switch to Gearman::XS
authorDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 15 Apr 2012 19:57:22 +0000 (21:57 +0200)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 15 Apr 2012 19:57:22 +0000 (21:57 +0200)
lib/CloudStore/Gearman.pm

index 1eb38cd..7377d37 100644 (file)
@@ -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;