Avihai Berkovitz created IGNITE-2888: ----------------------------------------
Summary: Eviction policy not called upon cache.remove() Key: IGNITE-2888 URL: https://issues.apache.org/jira/browse/IGNITE-2888 Project: Ignite Issue Type: Bug Components: cache Affects Versions: 1.5.0.final Environment: java version "1.8.0_73" Java(TM) SE Runtime Environment (build 1.8.0_73-b02) Java HotSpot(TM) 64-Bit Server VM (build 25.73-b02, mixed mode) Windows 10 64bit Reporter: Avihai Berkovitz When I set an eviction policy to a cache it doesn't get called when removing an entry from the cache. This only happens when using a *REPLICATED* or *PARTITIONED* cache, and only in *ATOMIC* mode. This is the reason it never came up in the GridCacheConcurrentEvictionConsistencySelfTest test. If you change the cache parameters in the test you can see the problem easily. This causes two problems: * Cache entries that were deleted still remain in memory, because the objects are referenced by the policy * The eviction policy "thinks" the cache is larger than it really is, so entries might be evicted even if there is no need for it Here is a small test case to illustrate the problem: {code} IgniteConfiguration igniteConfig = new IgniteConfiguration() .setGridLogger(new Slf4jLogger()) .setDeploymentMode(DeploymentMode.CONTINUOUS); try (Ignite ignite = Ignition.start(igniteConfig)) { LruEvictionPolicy evictionPolicy = new LruEvictionPolicy(30); CacheConfiguration<String, String> cacheConfiguration = new CacheConfiguration<String, String>() .setName("test") .setCacheMode(CacheMode.REPLICATED) .setAtomicityMode(CacheAtomicityMode.ATOMIC) .setEvictionPolicy(evictionPolicy); IgniteCache<String, String> cache = ignite.getOrCreateCache(cacheConfiguration); for (int i = 1; i <= 100; i++) { cache.put("key" + i, "data"); System.out.println(String.format("Size: %d, LRU: %d", cache.size(CachePeekMode.ALL), evictionPolicy.getCurrentSize())); if (i % 5 == 0) { cache.remove("key" + (i-1)); System.out.println(String.format("Size: %d, LRU: %d", cache.size(CachePeekMode.ALL), evictionPolicy.getCurrentSize())); } } } {code} -- This message was sent by Atlassian JIRA (v6.3.4#6332)