fix: add NOT_FOUND error check in __exit__ method of SessionCheckout. #718
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.