X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI%2FReplicated%2FBalancer%2FRandom.pm;h=1e657b5a77e2108b9e85b03d0e5ea675ab9ba670;hb=41916570b3a93b05746e23b73c9a9b5005bc0d2e;hp=6c66ea88b19787cb651d8416ea0a158b358256be;hpb=106d5f3b7e03a68fb2e125772e3f06a34115f22d;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Storage/DBI/Replicated/Balancer/Random.pm b/lib/DBIx/Class/Storage/DBI/Replicated/Balancer/Random.pm index 6c66ea8..1e657b5 100644 --- a/lib/DBIx/Class/Storage/DBI/Replicated/Balancer/Random.pm +++ b/lib/DBIx/Class/Storage/DBI/Replicated/Balancer/Random.pm @@ -1,12 +1,12 @@ package DBIx::Class::Storage::DBI::Replicated::Balancer::Random; -use List::Util qw(shuffle); use Moose; -extends 'DBIx::Class::Storage::DBI::Replicated::Balancer'; +with 'DBIx::Class::Storage::DBI::Replicated::Balancer'; +use namespace::clean -except => 'meta'; =head1 NAME -DBIx::Class::Storage::DBI::Replicated::Balancer; A Software Load Balancer +DBIx::Class::Storage::DBI::Replicated::Balancer::Random - A 'random' Balancer =head1 SYNOPSIS @@ -40,9 +40,12 @@ be requested several times in a row. =cut sub next_storage { - my $self = shift @_; - my $next = (shuffle($self->pool->active_replicants))[0]; - return $next ? $next : $self->master; + my $self = shift @_; + my @active_replicants = $self->pool->active_replicants; + my $count_active_replicants = $#active_replicants +1; + my $random_replicant = int(rand($count_active_replicants)); + + return $active_replicants[$random_replicant]; } =head1 AUTHOR @@ -55,4 +58,6 @@ You may distribute this code under the same terms as Perl itself. =cut -1; \ No newline at end of file +__PACKAGE__->meta->make_immutable; + +1;