[ https://issues.apache.org/jira/browse/IGNITE-6649?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Andrew Mashenkov updated IGNITE-6649: ------------------------------------- Attachment: EvictionPolicyTest.java > Add EvictionPolicy factory support in IgniteConfiguration. > ---------------------------------------------------------- > > Key: IGNITE-6649 > URL: https://issues.apache.org/jira/browse/IGNITE-6649 > Project: Ignite > Issue Type: Bug > Security Level: Public(Viewable by anyone) > Components: cache > Reporter: Andrew Mashenkov > Assignee: Andrew Mashenkov > Fix For: 2.4 > > Attachments: EvictionPolicyTest.java > > > For now the only way to set EvictionPolicy to IgniteConfiguration is to use > EvictionPolicy instance. > That looks error prone as user can easily share instance between caches or > cache reincarnations and got unexpected results. > E.g. it can cause an AssertionError if EvictionPolicy is reused. > Steps to reproduce. > 1. Create CacheConfiguration object that will be reused. > 2. Create and fill a cache. > 3. Destroy cache and create cache again with same CacheConfiguration object. > 4. One of next put can fails with stacktrace below. > The error is throws when EvictionPolicy tries to evict entries from cache > that has just been destroyed. > Also, EvictionPolicy object can be implicitly holds by some user objects > (together with IgniteConfiguration) that can cause memory leak. > java.lang.AssertionError > at > org.apache.ignite.internal.processors.cache.CacheEvictableEntryImpl.evict(CacheEvictableEntryImpl.java:71) > at > org.apache.ignite.cache.eviction.lru.LruEvictionPolicy.shrink0(LruEvictionPolicy.java:275) > at > org.apache.ignite.cache.eviction.lru.LruEvictionPolicy.shrink(LruEvictionPolicy.java:250) > at > org.apache.ignite.cache.eviction.lru.LruEvictionPolicy.onEntryAccessed(LruEvictionPolicy.java:161) > at > org.apache.ignite.internal.processors.cache.GridCacheEvictionManager.notifyPolicy(GridCacheEvictionManager.java:1393) > at > org.apache.ignite.internal.processors.cache.GridCacheEvictionManager.touch(GridCacheEvictionManager.java:825) > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.unlockEntries(GridDhtAtomicCache.java:3058) > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal0(GridDhtAtomicCache.java:1952) > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal(GridDhtAtomicCache.java:1730) > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicAbstractUpdateFuture.mapSingle(GridNearAtomicAbstractUpdateFuture.java:264) > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicSingleUpdateFuture.map(GridNearAtomicSingleUpdateFuture.java:494) > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicSingleUpdateFuture.mapOnTopology(GridNearAtomicSingleUpdateFuture.java:436) > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicAbstractUpdateFuture.map(GridNearAtomicAbstractUpdateFuture.java:209) > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.update0(GridDhtAtomicCache.java:1245) > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.put0(GridDhtAtomicCache.java:680) > at > org.apache.ignite.internal.processors.cache.GridCacheAdapter.put(GridCacheAdapter.java:2328) > at > org.apache.ignite.internal.processors.cache.GridCacheAdapter.put(GridCacheAdapter.java:2305) > at > org.apache.ignite.internal.processors.cache.IgniteCacheProxy.put(IgniteCacheProxy.java:1379) > -- This message was sent by Atlassian JIRA (v6.4.14#64029)