anton-vinogradov commented on code in PR #13316:
URL: https://github.com/apache/ignite/pull/13316#discussion_r3595544800


##########
modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/atomic/GridNearAtomicAbstractUpdateFuture.java:
##########
@@ -153,6 +157,9 @@ public abstract class GridNearAtomicAbstractUpdateFuture 
extends GridCacheFuture
     /** Handle binary in interceptor operation flag. */
     protected boolean keepBinaryInInterceptor;
 
+    /** Near entries reserved against eviction for the time of update. */
+    protected Map<KeyCacheObject, GridNearCacheEntry> reservedEntries;

Review Comment:
   The reservation blocks markObsolete(), not the eviction policy — and 
markObsolete() is how near entries get removed even with no policy configured: 
GridCacheEvictionManager.touch() removes empty entries via markObsoleteIfEmpty 
*before* the plcEnabled check, and the reader-became-backup branch in this PR 
relies on markObsolete too.
   
   An unreleased reservation therefore makes the entry permanently unremovable 
— empty placeholders (DELETE, failed keys, remap) would just accumulate 
forever, policy or not. The map is what release iterates, so writing to it is 
simply pairing every reserve with its release. The `expected:<3> but was:<100>` 
failure shows the same effect through a policy only because it's easiest to 
observe there.



-- 
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