Implement ConcurrentLfu events: attempt 3 #727
Draft
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 PR implements events for
ConcurrentLfuas a switchable policy. When disabled all event code is fully elided at runtime by the JIT compiler.Events are considered perf critical in
ConcurrentLfubecause the ItemRemoved logic is invoked as part of the maintenance cycle, this introduces overhead even when there are no events registered. The Maintenance method latency determines cache throughput at the limit, so any overhead here is not desired. Later, these events could be captured in a list and processed asynchronously via the scheduler.In this implementation, calling
TryRemovedefers event processing to the maintenance cycle (thusTryRemoveand policy based eviction behave the same), whereasTryUpdateexecutes the event handler immediately whenTryUpdateis called.This PR was produced with Claude Code using the following prompts:
Prompt 1:
Prompt 2:
Prompt 3:
Fixed manually: reviewed code to determine correct approach to distinguish between evicted vs removed.
Fixed manually: test build and run.
Prompt 4:
Prompt 5:
Prompt 6:
Prompt 7:
Prompt 8: