AnyEvent-Redis-Federated
view release on metacpan or search on metacpan
Revision history for Perl extension AnyEvent::Redis::Federated.
0.08 Tue Nov 27 12:00:41 2012
- Doc cleanup.
0.07 Thu Sep 13 12:00:41 2012
- Fixed retry logic, memory leak in poll(), and introduce node groups.
0.06 Tue Aug 7 10:00:41 2012
- AnyEvent timer replaced with alarm since timers work in
surprising ways
0.05 Tue Jul 31 10:06:41 2012
- more Makefile.PL fixes
0.04 Mon Jul 30 11:06:41 2012
- Makefile.PL fixes
0.03 Mon Jul 30 10:06:41 2012
- fix tests to start redis-server if found
lib/AnyEvent/Redis/Federated.pm view on Meta::CPAN
$self->{server_status}{"$server:retries"}++;
$self->{server_status}{"$server:down_since"} = time();
$self->{server_status}{"$server:retry_interval"} ||= $self->{base_retry_interval};
}
if ($self->{server_status}{"$server:retry_pending"}) {
warn "retry already pending for $server, skipping\n" if $self->{debug};
return 1;
}
# ok, schedule the timer to re-check. this should NOT be a
# recurring timer, otherwise we end up with a bunch of pending
# retries since the "interval" is likely shorter than TCP timeout.
# eventually this will error out, in which case we'll try it again
# by calling markServerDown() after clearying retry_pending, or
# it'll work and we're good to go.
my $t;
my $r;
$t = AnyEvent->timer(
after => $delay,
cb => sub {
warn "timer callback triggered for $server" if $self->{debug};
my ($host, $port) = split /:/, $server;
print "attempting reconnect to $server\n" if $self->{debug};
$r = AnyEvent::Redis->new(
host => $host,
port => $port,
on_error => sub {
warn @_ unless $self->{quiet};
$self->{server_status}{"$server:retry_pending"} = 0;
$self->markServerDown($server); # schedule another try
}
);
$r->ping(sub{
my $val = shift; # should be 'PONG'
if ($val ne 'PONG') {
warn "retry ping got $val instead of PONG" if $self->{debug};
}
$self->{conn}->{$server} = $r;
$self->{server_status}{"$server:retry_pending"} = 0;
$self->markServerUp($server);
undef $t; # we need to keep a ref to the timer here so it runs at all
});
}
);
warn "scheduled health check of $server in $delay secs\n" if $self->{debug};
$self->{server_status}{"$server:retry_pending"} = 1;
return 1;
}
our $AUTOLOAD;
lib/AnyEvent/Redis/Federated.pm view on Meta::CPAN
# check the state of requests, marking remaining as cancelled
while (my ($rid, $state) = each %{$self->{request_state}}) {
if ($self->{request_state}->{$rid}) {
print "found pending request to cancel: $rid\n" if $self->{debug};
$self->{request_state}->{$rid} = 0;
$self->{cv}->end;
undef $w;
}
}
});
print "scheduling alarm timer in poll() for $timeout\n" if $self->{debug};
alarm($timeout);
}
$self->{cv}->recv;
$self->{cv} = undef;
alarm(0);
undef $w;
}
sub scheduleCall {
( run in 1.013 second using v1.01-cache-2.11-cpan-49f99fa48dc )