[cherrypick] Fix possible (but probably rare) race condition (#19951) #19966
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.
Fix crashes in execution_driver due to inability to execute
transactions.
We must hold the lock for the object entry while inserting to the
object_by_id_cache
. Otherwise, a surprising bug can occur:then pause.
TransactionManager immediately
schedules transactions if their inputs are available. It does not matter
that TX1
hasn't finished executing yet.
object_by_id_cache.
Now, any subsequent attempt to get the latest version of O will return
(O,1) instead of
(O,2).
This seems very unlikely, but it may be more likely under the following
circumstances:
optimistic
lock-free algorithms that have retry loops. Possibly, under high
contention, this
code might spin for a surprisingly long time.
happen due to
the tx finalizer, plus checkpoint executor, consensus, and RPCs from
fullnodes.
Unfortunately I have not been able to reproduce this bug, so we cannot
be sure that
this fixes the crashes we've seen. But this is certainly a possible bug.
Description
Describe the changes or additions included in this PR.
Test plan
How did you test the new or updated feature?
Release notes
Check each box that your changes affect. If none of the boxes relate to your changes, release notes aren't required.
For each box you select, include information after the relevant heading that describes the impact of your changes that a user might notice and any actions they must take to implement updates.