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.
Pulling standalone fixes out of #6616 to be merged separately.
Hidden by our suppressions file, but the
snapshot_test
unit test spots a lock inversion:During rollback we hold the
maps_lock
, and eventually take thehistory.state_lock
to touch the History's state. In theinit_from_snapshot
path, we take thehistory.state_lock
very early and then try to read from the KV (which internally requires takingmaps_lock
to establish which tables exist). This causes a lock cycle.I think the fix is simple and uncontroversial - delay taking the lock in the
init_from_snapshot
path until after the KV read. This mutex is only supposed to protect the History's internal state, so arbitrary work may come before it. Also, the KV read should be monotonic.