feat: chainstore: striped lock to prevent redundant work in index cache #10885
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.
Related Issues
see #10866 PR for previous discuss and #10788
Proposed Changes
Feature: Add striped lock for ChainIndex cache access in chain/store/index
This pull request introduces a striped lock for the
ChainIndex
indexCache
. The lock, implemented via the 'github.com/nmvalera/striped-mutex' package, is applied when accessing theindexCache
in theGetTipsetByHeight
method.The goal of this change is to prevent redundant computations when the same tipset is accessed concurrently. The lock uses the tipset key as a unique identifier, thereby ensuring mutual exclusion on a per-tipset basis, while allowing different tipsets to still be processed concurrently.
Important Note: The lock is acquired before checking the cache for a tipset and released after the cache is filled with the tipset.
This pull request also introduces a new dependency, 'github.com/nmvalera/striped-mutex', which has been added to
go.mod
andgo.sum
.As a minor change, the
fillCache
method comment indicating that the caller must holdindexCacheLk
has been removed as it's no longer relevant with the current lock usage.Additional Info
Checklist
Before you mark the PR ready for review, please make sure that:
<PR type>: <area>: <change being made>
fix: mempool: Introduce a cache for valid signatures
PR type
: fix, feat, build, chore, ci, docs, perf, refactor, revert, style, testarea
, e.g. api, chain, state, market, mempool, multisig, networking, paych, proving, sealing, wallet, deps