-
Notifications
You must be signed in to change notification settings - Fork 92
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: add NOT_FOUND error check in __exit__ method of SessionCheckout. #718
Merged
Conversation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
…on was raised for the session and create new session if needed
product-auto-label
bot
added
size: xs
Pull request size is extra small.
api: spanner
Issues related to the googleapis/python-spanner API.
labels
Apr 19, 2022
product-auto-label
bot
added
size: m
Pull request size is medium.
and removed
size: xs
Pull request size is extra small.
labels
Apr 19, 2022
vi3k6i5
changed the title
fix: add session.exists() check in PingingPool.get() method.
fix: add NOT_FOUND error check in __exit__ method of SessionCheckout.
Apr 19, 2022
product-auto-label
bot
added
size: s
Pull request size is small.
and removed
size: m
Pull request size is medium.
labels
Apr 19, 2022
thiagotnunes
approved these changes
Apr 20, 2022
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
larkee
reviewed
Apr 20, 2022
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM 👍 One minor suggestion for another test case
… unrelated to Sessions
product-auto-label
bot
added
size: m
Pull request size is medium.
and removed
size: s
Pull request size is small.
labels
Apr 20, 2022
larkee
approved these changes
Apr 20, 2022
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Labels
api: spanner
Issues related to the googleapis/python-spanner API.
size: m
Pull request size is medium.
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.
PingingPool
currently checks if session exists in.get()
method only when_NOW() > ping_after
. If the session is used in any query and then returned the pool then the ping_after is reset to_NOW() _ + delta
. If the session is deleted in the backend and the checkout gives a not found error the session will still get returned to the pool with a reset forping_after = _NOW() _ + delta
.As described in the comment in
get()
method.Example:
An Application using
PingingPool
with 1 Session. The session has been killed on the server side, but theping
method has not cleared out the session from the pool yet because ping_after > _NOW() is notTrue
.Now
pool.get()
will return the session, and SnapshotCheckout will use the session and fail and return the session back into the pool.Put Method will put the session in the pool with a new wait_time, and the process will continue.
To avoid this inside the
__exit__
method ofSessionCheckout
we should check ifNOT_FOUND
error was raised or not. If that error was raised then create a new session and push it inside the pool.