[ https://issues.apache.org/jira/browse/IGNITE-2888?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Ilya Lantukh reassigned IGNITE-2888: ------------------------------------ Assignee: Ilya Lantukh > 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 > Assignee: Ilya Lantukh > > 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)