lhotari opened a new pull request, #23903:
URL: https://github.com/apache/pulsar/pull/23903

   Fixes #23900
   
   ### Motivation
   
   During work on PR #23901, a severe issue was discovered in the RangeCache 
implementation. Cache lookups consistently fail when the key used to look up an 
entry differs from the instance used to put the entry into the cache.
   
   This problematic solution was introduced in PR #22789, which aimed to 
address race conditions in the RangeCache and prevent the use of already 
recycled object instances. The solution underwent subsequent refactoring in PRs 
#22814 and #22818. While the value wrapper solution ensures consistency between 
cached entries and their corresponding keys, the original design primarily 
focused on the `getRange` and `removeRange` methods.
   
   In these method implementations, the ConcurrentSkipListMap's subMap method 
ensures the original key remains available, preventing the lookup problem from 
manifesting. This explains why the issue remained undetected for so long, as 
caching functions correctly in most scenarios.
   
   The impact primarily affects single reads, such as initial readings of 
replay queue entries. Single reads have never added entries to the cache, a bug 
originally reported as part of #23504 and subsequently moved to #23900.
   
   Issue #23900 represents a partial regression. Prior to the changes 
introduced in PRs #22789, #22814, and #22818, replay queue entries might have 
been cached due to previous reads adding entries to the cache. However, the 
functionality to add replay queue reads to the cache has never been implemented.
   
   ### Modifications
   
   - add unit test to verify that an entry can be looked up with a different 
key instance
   - fix the issue in RangeCache implementation
   
   ### Documentation
   
   <!-- DO NOT REMOVE THIS SECTION. CHECK THE PROPER BOX ONLY. -->
   
   - [ ] `doc` <!-- Your PR contains doc changes. -->
   - [ ] `doc-required` <!-- Your PR changes impact docs and you will update 
later -->
   - [x] `doc-not-needed` <!-- Your PR changes do not impact docs -->
   - [ ] `doc-complete` <!-- Docs have been already added -->


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to