Data manager's should_retry did not get called #8
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.
I'm trying to use
tm.attempts
to automatically retry a query in case of exception and found thatzone.sqlalchemy.SessionDataManager.should_retry
did not get called at all inpyramid_tm
. I've tried debugging the problem and found these lines as culprit:As far as I understand, this is related to how
manager._retryable
works:manager._retryable
will get a list of data manager instances viamanager.get()._resources
and call that data manager'sshould_retry
. (1):However calling
manager.abort()
will empty themanager.get()._resources
.Since
manager._retryable
is called after abort inpyramid_tm
, it will try to iterate over an empty list and no data manager'sshould_retry
gets called at all. 😢 (2):This patch simply reversing these two lines since real
Attempt
intransaction.manager
also has it reversed (3):I'm not quite sure how to write a test for this one, so I added
active
toDummyTransaction
to simulate data manager's presenceness to ensure_retryable
is only returned if there's active data manager (tests properly failing after I swapped two lines in__init__.py
back).Thanks raydeo in #pyramid for helping me tracking this down! 👍