OAK-10811: (oak-search-elastic) reduce contention in IndexTracker #1466
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.
The
ElasticIndexTracker
has been introduced to avoid loading the index definition from the node store for each read/write into the index. The logic has been inspired by theLuceneIndexTracker
.The
isUpdateNeeded
has this comment:Although the comment makes total sense, the implementation was taking into account the
:status
node that gets updated every time the async lane changes the index.This creates contention because it forces the next read/write operation to recreate the
IndexNode
and reload the definition from the node store.With this PR, the logic does exactly what the comment above says reducing contention and avoiding unneeded object creation.