From: Peter Rabbitson Date: Fri, 11 Sep 2009 23:31:16 +0000 (+0000) Subject: Final scopeguard tweak (?) X-Git-Tag: v0.08112~21 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=dbsrgits%2FDBIx-Class.git;a=commitdiff_plain;h=83f262630f7430c3b20391b6af3a70e92107b8d5 Final scopeguard tweak (?) --- diff --git a/lib/DBIx/Class/Storage/TxnScopeGuard.pm b/lib/DBIx/Class/Storage/TxnScopeGuard.pm index 92b8d36..a798791 100644 --- a/lib/DBIx/Class/Storage/TxnScopeGuard.pm +++ b/lib/DBIx/Class/Storage/TxnScopeGuard.pm @@ -41,8 +41,12 @@ sub DESTROY { ."Rollback failed: ${rollback_exception}"; } else { - # throws an object (verified with eval{}) but DESTROY eats the exception - $storage->throw_exception ("Rollback failed: ${rollback_exception}"); + carp (join ' ', + "********************* ROLLBACK FAILED!!! ********************", + "\nA rollback operation failed after the guard went out of scope.", + 'This is potentially a disastrous situation, check your data for', + "consistency: $rollback_exception" + ); } } } diff --git a/t/81transactions.t b/t/81transactions.t index 1028e7f..00c9418 100644 --- a/t/81transactions.t +++ b/t/81transactions.t @@ -329,23 +329,22 @@ $schema->storage->disconnect; }, qr/Deliberate exception.+Rollback failed/s); } -# make sure it warns and dies on failed rollbacks -TODO: { +# make sure it warns *big* on failed rollbacks +{ my $schema = DBICTest->init_schema(); - local $TODO = "Can't die in DESTROY :("; - - throws_ok (sub { - warnings_exist (sub { + warnings_exist (sub { my $guard = $schema->txn_scope_guard; $schema->resultset ('Artist')->create ({ name => 'bohhoo'}); $schema->storage->disconnect; # this should freak out the guard rollback - }, - qr/A DBIx::Class::Storage::TxnScopeGuard went out of scope without explicit commit or error. Rolling back./, - 'out-of-scope warning'); - }, qr/Rollback failed:/, 'rollback error thrown' ); + [ + qr/A DBIx::Class::Storage::TxnScopeGuard went out of scope without explicit commit or error. Rolling back./, + qr/\*+ ROLLBACK FAILED\!\!\! \*+/, + ], + 'proper warnings generated on out-of-scope+rollback failure' + ); } done_testing;