refactor(db-mongodb,drizzle): reduce race condition window between retrieving and using a session #14653
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.
Description
Moves
getSession(MongoDB) andgetTransaction(Drizzle) calls to immediately before database operations.Why
When sessions are retrieved early in a function but used much later, there's a race condition window: if a parallel operation commits/ends that session before we use it, we get
MongoExpiredSessionError. By retrieving the session right before use, we minimize this window.This alone significantly reduced transaction errors in #14651. By retrieving sessions closer to use, if a parallel operation commits the transaction before we retrieve it, we get
undefinedinstead of an expired session. Operations then run without a session (which succeeds) rather than attempting to use an expired session (which errors).Example: