fixed regression in the random balancer that I created when I removed the shuffle...
John Napiorkowski [Thu, 10 Jul 2008 19:58:28 +0000 (19:58 +0000)]
lib/DBIx/Class/Storage/DBI/Replicated/Balancer.pm
lib/DBIx/Class/Storage/DBI/Replicated/Balancer/Random.pm

index 316653a..25c8009 100644 (file)
@@ -136,8 +136,11 @@ around 'next_storage' => sub {
   }
     
   ## Get a replicant, or the master if none
-  my $next = $self->$next_storage(@args);
-  return $next ? $next:$self->master; 
+  if(my $next = $self->$next_storage(@args)) {
+    return $next;
+  } else {
+    return $self->master;
+  }
 };
 
 =head2 increment_storage
@@ -184,10 +187,10 @@ around 'select_single' => sub {
   my ($select_single, $self, @args) = @_;
   
   if (my $forced_pool = $args[-1]->{force_pool}) {
-       delete $args[-1]->{force_pool};
-       return $self->_get_forced_pool($forced_pool)->select_single(@args); 
+    delete $args[-1]->{force_pool};
+    return $self->_get_forced_pool($forced_pool)->select_single(@args); 
   } else {
-       $self->increment_storage;
+    $self->increment_storage;
     return $self->$select_single(@args);
   }
 };
index e90445c..8bbaa49 100644 (file)
@@ -1,6 +1,5 @@
 package DBIx::Class::Storage::DBI::Replicated::Balancer::Random;
 
-use List::Util qw(shuffle);
 use Moose;
 with 'DBIx::Class::Storage::DBI::Replicated::Balancer';
 
@@ -43,8 +42,9 @@ sub next_storage {
   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[int(rand($count_active_replicants +1))];
+  return $active_replicants[$random_replicant];
 }
 
 =head1 AUTHOR