perf: track bulk get operation completions explicitly #161
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.
This commit makes it so that the operation callbacks are used to collect all the locked state that we might need to access, which makes the code after latch-release run without contending memcached to complete.
Before this commit, callbacks on the bulk get operation accumulate the state and when all operations have completed, we release the latch and then the calller calculates the final state. Unfortunately looking at the state, the caller must take operation locks, which are potentially still hold by memcache driver since it has only momentarily before released the latch.
The Memcache callbacks are made whilst holding the lock on the Operation objects, which means they are a great time to get locked state such as cancellation state. This patch makes the change to collect state during callbacks. The callback future interaction is a little clunky, but this avoids a major rewrite of the implementations.