X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDBIx%2FClass%2FStorage%2FDBI%2FReplicated.pm;h=1024d47c8bfbdfaa97bb74c93565e4189986718b;hb=ed7ab0f4ce1a9118ea6285ee562ef003085a6b64;hp=51bd137d295f7e81b69169d9664f3ac50ebdc639;hpb=e471ab87e76b9965174b13c6b1f37025ba2615b9;p=dbsrgits%2FDBIx-Class.git diff --git a/lib/DBIx/Class/Storage/DBI/Replicated.pm b/lib/DBIx/Class/Storage/DBI/Replicated.pm index 51bd137..1024d47 100644 --- a/lib/DBIx/Class/Storage/DBI/Replicated.pm +++ b/lib/DBIx/Class/Storage/DBI/Replicated.pm @@ -16,6 +16,7 @@ use MooseX::Types::Moose qw/ClassName HashRef Object/; use Scalar::Util 'reftype'; use Hash::Merge; use List::Util qw/min max reduce/; +use Try::Tiny; use namespace::clean -except => 'meta'; @@ -308,7 +309,6 @@ has 'write_handler' => ( is_datatype_numeric _supports_insert_returning _count_select - _subq_count_select _subq_update_delete svp_rollback svp_begin @@ -373,6 +373,8 @@ has 'write_handler' => ( my @unimplemented = qw( _arm_global_destructor _preserve_foreign_dbh + _verify_pid + _verify_tid ); for my $method (@unimplemented) { @@ -649,7 +651,8 @@ sub execute_reliably { my @result; my $want_array = wantarray; - eval { + my $exception; + try { if($want_array) { @result = $coderef->(@args); } elsif(defined $want_array) { @@ -657,19 +660,14 @@ sub execute_reliably { } else { $coderef->(@args); } + } catch { + $self->throw_exception("coderef returned an error: $_"); + } finally { + ##Reset to the original state + $self->read_handler($current); }; - ##Reset to the original state - $self->read_handler($current); - - ##Exception testing has to come last, otherwise you might leave the - ##read_handler set to master. - - if($@) { - $self->throw_exception("coderef returned an error: $@"); - } else { - return $want_array ? @result : $result[0]; - } + return $want_array ? @result : $result[0]; } =head2 set_reliable_storage @@ -1049,22 +1047,6 @@ sub _get_server_version { return $self->_server_info->{dbms_version}; } -sub _verify_pid { - my $self = shift; - - for my $storage ($self->all_storages) { - $storage->_verify_pid; - } -} - -sub _verify_tid { - my $self = shift; - - for my $storage ($self->all_storages) { - $storage->_verify_tid; - } -} - =head1 GOTCHAS Due to the fact that replicants can lag behind a master, you must take care to