From 205670276f65c623bc8fc45bf9eb4a61cd35dc7a Mon Sep 17 00:00:00 2001 From: Dobrica Pavlinusic Date: Sun, 15 Apr 2012 21:57:22 +0200 Subject: [PATCH] switch to Gearman::XS --- lib/CloudStore/Gearman.pm | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/lib/CloudStore/Gearman.pm b/lib/CloudStore/Gearman.pm index 1eb38cd..7377d37 100644 --- a/lib/CloudStore/Gearman.pm +++ b/lib/CloudStore/Gearman.pm @@ -2,14 +2,17 @@ package CloudStore::Gearman; use warnings; use strict; -use Gearman::Client; +use Gearman::XS qw(:constants); +use Gearman::XS::Client; use Data::Dump qw(dump); sub gearman { - my $gearman = Gearman::Client->new; - $gearman->job_servers('127.0.0.1:4730'); - return $gearman; + my $client = Gearman::XS::Client->new; + my $server = $ENV{GEARMAN} || '127.0.0.1:4730'; + $client->add_server(split(/:/,$server)); + warn "## new gearman client to $server pid $$\n"; + return $client; } sub gearman_do { @@ -18,9 +21,15 @@ sub gearman_do { my $body = join(' ', @_) . "\n"; warn "## gearman_do $func ",dump($body),"\n"; - my $result = $self->gearman->do_task( $func => $body ); - warn "##>> ",dump($result),$/ if $ENV{DEBUG}; - return $$result if defined $result; + my $client = $self->gearman; + + my ( $ret, $result ) = $client->do( $func => $body ); + if ( $ret == GEARMAN_SUCCESS || $ret == GEARMAN_WORK_DATA ) { # shell gearman clients return WORK_DATA + warn "##>> ",dump($result),$/ if $ENV{DEBUG}; + } else { + warn "# ERROR $ret ", Gearman::XS::strerror($ret), " result=",dump($result); + } + return $result; } 1; -- 2.20.1