This repository was archived by the owner on Apr 4, 2020. It is now read-only.
Use the :requires_new option for nested transactions #9
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Nested transactions are not really supported at the database level.
Because of this, nesting transaction blocks can cause the outer block to be aborted which will cause later SQL statements to fail with the message:
This is currently the case with the
BufferedCommitter's 1000 change transaction and the one started in the attempt_change method in theOneWayReplicator.To deal with this the
PostgreSQLAdapter#transactionmethod accepts a:requires_newoption which uses save points to simulate nested transactions.This change adds this option to the previously nested transaction in the
OneWayReplicatorThis will allow for the insert to fail (for example with a unique constraint error) and the outer transaction to continue.
More information about this option can be found at:
http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/DatabaseStatements.html#method-i-transaction
Worked on this with @gtanzillo
https://bugzilla.redhat.com/show_bug.cgi?id=1348576