diff --git a/connector/perl/lib/MR/IProto/Cluster.pm b/connector/perl/lib/MR/IProto/Cluster.pm index d5f46b8bdeffe20e559bfb387157597e234762c9..b8b34b7d86c43e0415373beef2aead4f01f9ff0f 100644 --- a/connector/perl/lib/MR/IProto/Cluster.pm +++ b/connector/perl/lib/MR/IProto/Cluster.pm @@ -113,6 +113,11 @@ has _one => ( lazy_build => 1, ); +has _server => ( + is => 'rw', + isa => 'Maybe[MR::IProto::Cluster::Server]', +); + has _ketama => ( is => 'ro', isa => 'ArrayRef[ArrayRef]', @@ -145,9 +150,12 @@ sub server { my ($self, $key) = @_; my $one = $self->_one; return $one if defined $one; - my $method = $self->balance == RR ? '_balance_rr' - : $self->balance == KETAMA ? '_balance_ketama' - : '_balance_hash'; + if($self->balance == RR) { + my $server = $self->_server; + return $server if $server && $server->active; + return $self->_server($self->_balance_rr); + } + my $method = $self->balance == KETAMA ? '_balance_ketama' : '_balance_hash'; return $self->$method($key); }