X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI%2FReplicated%2FBalancer.pm;h=d7a8769b8e4ec8d5af048252dc61dcbdc93783e3;hb=6a151f5877412d2824295071428c52eb4bf646ec;hp=798c0ef556b9e617162a7102b3c07499ccf17e85;hpb=41916570b3a93b05746e23b73c9a9b5005bc0d2e;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Storage/DBI/Replicated/Balancer.pm b/lib/DBIx/Class/Storage/DBI/Replicated/Balancer.pm index 798c0ef..d7a8769 100644 --- a/lib/DBIx/Class/Storage/DBI/Replicated/Balancer.pm +++ b/lib/DBIx/Class/Storage/DBI/Replicated/Balancer.pm @@ -3,7 +3,8 @@ package DBIx::Class::Storage::DBI::Replicated::Balancer; use Moose::Role; requires 'next_storage'; use MooseX::Types::Moose qw/Int/; - +use DBIx::Class::Storage::DBI::Replicated::Pool; +use DBIx::Class::Storage::DBI::Replicated::Types qw/DBICStorageDBI/; use namespace::clean -except => 'meta'; =head1 NAME @@ -48,7 +49,7 @@ ultimate fallback. has 'master' => ( is=>'ro', - isa=>'DBIx::Class::Storage::DBI', + isa=>DBICStorageDBI, required=>1, ); @@ -80,7 +81,7 @@ via it's balancer object. has 'current_replicant' => ( is=> 'rw', - isa=>'DBIx::Class::Storage::DBI', + isa=>DBICStorageDBI, lazy_build=>1, handles=>[qw/ select @@ -169,10 +170,12 @@ the load evenly (hopefully) across existing capacity. around 'select' => sub { my ($select, $self, @args) = @_; - + if (my $forced_pool = $args[-1]->{force_pool}) { delete $args[-1]->{force_pool}; return $self->_get_forced_pool($forced_pool)->select(@args); + } elsif($self->master->{transaction_depth}) { + return $self->master->select(@args); } else { $self->increment_storage; return $self->$select(@args); @@ -189,10 +192,12 @@ the load evenly (hopefully) across existing capacity. 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); + } elsif($self->master->{transaction_depth}) { + return $self->master->select_single(@args); } else { $self->increment_storage; return $self->$select_single(@args); @@ -224,7 +229,7 @@ sub _get_forced_pool { return $forced_pool; } elsif($forced_pool eq 'master') { return $self->master; - } elsif(my $replicant = $self->pool->replicants($forced_pool)) { + } elsif(my $replicant = $self->pool->replicants->{$forced_pool}) { return $replicant; } else { $self->master->throw_exception("$forced_pool is not a named replicant."); @@ -233,7 +238,7 @@ sub _get_forced_pool { =head1 AUTHOR -John Napiorkowski +John Napiorkowski =head1 LICENSE