X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI%2FReplicated%2FBalancer.pm;h=316653a0f61fe54fcb86f453938753b15cf1a0a6;hb=c354902c20a8459162b76a4006cb6091af5bf6d4;hp=186e4832d24d6f687c971f00329420a1a9652e22;hpb=bbafcf262b74716a37f4265512ba5c1ecd92e15b;p=dbsrgits%2FDBIx-Class-Historic.git diff --git a/lib/DBIx/Class/Storage/DBI/Replicated/Balancer.pm b/lib/DBIx/Class/Storage/DBI/Replicated/Balancer.pm index 186e483..316653a 100644 --- a/lib/DBIx/Class/Storage/DBI/Replicated/Balancer.pm +++ b/lib/DBIx/Class/Storage/DBI/Replicated/Balancer.pm @@ -163,8 +163,9 @@ the load evenly (hopefully) across existing capacity. around 'select' => sub { my ($select, $self, @args) = @_; - if ($args[-1]->{execute_reliably}) { - return $self->master->select(@args); + if (my $forced_pool = $args[-1]->{force_pool}) { + delete $args[-1]->{force_pool}; + return $self->_get_forced_pool($forced_pool)->select(@args); } else { $self->increment_storage; return $self->$select(@args); @@ -182,8 +183,9 @@ the load evenly (hopefully) across existing capacity. around 'select_single' => sub { my ($select_single, $self, @args) = @_; - if ($args[-1]->{execute_reliably}) { - return $self->master->select_single(@args); + if (my $forced_pool = $args[-1]->{force_pool}) { + delete $args[-1]->{force_pool}; + return $self->_get_forced_pool($forced_pool)->select_single(@args); } else { $self->increment_storage; return $self->$select_single(@args); @@ -203,6 +205,25 @@ before 'columns_info_for' => sub { $self->increment_storage; }; +=head2 _get_forced_pool ($name) + +Given an identifier, find the most correct storage object to handle the query. + +=cut + +sub _get_forced_pool { + my ($self, $forced_pool) = @_; + if(blessed $forced_pool) { + return $forced_pool; + } elsif($forced_pool eq 'master') { + return $self->master; + } elsif(my $replicant = $self->pool->replicants($forced_pool)) { + return $replicant; + } else { + $self->master->throw_exception("$forced_pool is not a named replicant."); + } +} + =head1 AUTHOR John Napiorkowski