Gearman-Client-Async
view release on metacpan or search on metacpan
lib/Gearman/Client/Async.pm view on Meta::CPAN
Jonathan Steinert (hachi@cpan.org)
=cut
use strict;
use warnings;
use Carp qw(croak);
use fields (
'job_servers', # arrayref of Gearman::Client::Async::Connection objects
't_no_random', # don't randomize job server to use: use first alive one.
't_offline_host', # hashref: hostname -> $bool, if host should act as offline, for testing
);
use Danga::Socket 1.52;
use Gearman::Objects;
use Gearman::Task;
use Gearman::JobStatus;
use Gearman::Client::Async::Connection;
use List::Util qw(first);
lib/Gearman/Client/Async.pm view on Meta::CPAN
return wantarray ? @list : \@list;
}
sub add_task {
my Gearman::Client::Async $self = shift;
my Gearman::Task $task = shift;
my $try_again;
$try_again = sub {
my @job_servers = grep { $_->alive } @{$self->{job_servers}};
warn "Alive servers: " . @job_servers . " out of " . @{$self->{job_servers}} . "\n" if DEBUGGING;
unless (@job_servers) {
$task->final_fail;
$try_again = undef;
return;
}
my $js;
if (defined( my $hash = $task->hash )) {
# Task is hashed, use key to fetch job server
lib/Gearman/Client/Async/Connection.pm view on Meta::CPAN
$self->_requeue_all;
}
sub mark_dead {
my Gearman::Client::Async::Connection $self = shift;
$self->{deadtime} = time + 10;
warn "$self->{hostspec} marked dead for a bit." if DEBUGGING;
}
sub alive {
my Gearman::Client::Async::Connection $self = shift;
return $self->{deadtime} <= time;
}
sub add_task {
my Gearman::Client::Async::Connection $self = shift;
my Gearman::Task $task = shift;
Carp::confess("add_task called when in wrong state")
unless $self->{state} == S_READY;
( run in 0.905 second using v1.01-cache-2.11-cpan-39bf76dae61 )