Repository navigation
fix: isolate storage mutation guards by exact resource - #258
Merged
Merged
Conversation
Replace process-wide hash-slot mutexes with reference-counted locks keyed by drive and path. Retain entries before waiting, acquire unique paths in order, and reclaim entries only after all holders and waiters finish. Add real storage API regressions for unrelated colliding objects and drives, plus coverage for cancellation, multi-path order and waiter lifetimes. Signed-off-by: Feng Ruohang <rh@vonng.com>
This file contains hidden or 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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
A paused storage mutation can block unrelated objects, including objects on healthy drives, when their drive/path hashes select the same process-wide mutex slot. Replace those slots with exact
(drive, path)locks, keeping entries alive for both holders and waiters and acquiring unique paths in a consistent order. Same-resource serialization and cancellation/late-commit behavior are preserved.Validation:
RenameData/UpdateMetadataregression fails with the old helper and passes with this change.make verifierspassed, and native plus Linux amd64 builds passed.The registry adds allocation and synchronization cost (about 432 ns/op in the 8-worker independent lock microbenchmark); short local storage benchmarks showed no metadata-update regression. Idle entries are removed, while the Go map can retain peak capacity. Disk format, wire interfaces, configuration and dependencies are unchanged.