For testing I created a data region of 21 MB 

DataRegionConfiguration = 
    (new DataRegionConfiguration)
      .setName("testRegion")
      .setInitialSize(21 * 1024 * 1024)
      .setMaxSize(21 * 1024 * 1024)
      .setPersistenceEnabled(false)
      .setPageEvictionMode(DataPageEvictionMode.RANDOM_LRU)
      .setMetricsEnabled(true)
      .setEvictionThreshold(.9)

I then created a cache that uses that data region.

      val cfg = new CacheConfiguration[Int, String]
      cfg.setName("testCache")
      .setCacheMode(CacheMode.PARTITIONED) // The most efficient mode that
allows a client to read
      .setAtomicityMode(CacheAtomicityMode.ATOMIC)
     
.setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(Duration.ETERNAL)) //
never throw away data
      .setDataRegionName("testRegion"))
      .setStatisticsEnabled(true)

       val myCache = ignite.getOrCreateCache(cfg)

This region is large enough to hold about 9900 entries where the String
value has a length of 1200.

If I put 20000 values into the cache one at a time using put, it works as I
expect.   There is no error and a subset of the values is retained in the
cache.

But if I do a putall on the 20000 values I get an IgniteOutOfMemoryException
( stack trace below).  Is this expected behavior?   The error suggests
enabling evictions, but they are already enabled.

This test is running just a single instance of ignite embedded in the test
program.  In production I will have much more memory, but I want to
understand if this is a bug, since there can always be a case where the
putall will require more memory than is currently available and if it does
not evict pages I could get this in prod.

[19:41:08,411][ERROR][main][GridDhtAtomicCache] <fubar> Unexpected exception
during cache update
class org.apache.ignite.IgniteException: Runtime failure on search row:
org.apache.ignite.internal.processors.cache.tree.SearchRow@262b2c86
        at
org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.invoke(BPlusTree.java:1632)
        at
org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl$CacheDataStoreImpl.invoke(IgniteCacheOffheapManagerImpl.java:1201)
        at
org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl.invoke(IgniteCacheOffheapManagerImpl.java:343)
        at
org.apache.ignite.internal.processors.cache.GridCacheMapEntry.innerUpdate(GridCacheMapEntry.java:1693)
        at
org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateSingle(GridDhtAtomicCache.java:2419)
        at
org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.update(GridDhtAtomicCache.java:1882)
        at
org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal0(GridDhtAtomicCache.java:1735)
        at
org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal(GridDhtAtomicCache.java:1627)
        at
org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicAbstractUpdateFuture.sendSingleRequest(GridNearAtomicAbstractUpdateFuture.java:299)
        at
org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicUpdateFuture.map(GridNearAtomicUpdateFuture.java:812)
        at
org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicUpdateFuture.mapOnTopology(GridNearAtomicUpdateFuture.java:664)
        at
org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicAbstractUpdateFuture.map(GridNearAtomicAbstractUpdateFuture.java:248)
        at
org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAll0(GridDhtAtomicCache.java:1068)
        at
org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.putAll0(GridDhtAtomicCache.java:647)
        at
org.apache.ignite.internal.processors.cache.GridCacheAdapter.putAll(GridCacheAdapter.java:2760)
        at
org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.putAll(IgniteCacheProxyImpl.java:1068)
        at
org.apache.ignite.internal.processors.cache.GatewayProtectedCacheProxy.putAll(GatewayProtectedCacheProxy.java:928)
        at IgniteMain$.$anonfun$main$8(IgniteMain.scala:64)
        at 
scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12)
        at scala.util.Try$.apply(Try.scala:209)
        at IgniteMain$.main(IgniteMain.scala:64)
        at IgniteMain.main(IgniteMain.scala)
Caused by: class org.apache.ignite.internal.mem.IgniteOutOfMemoryException:
Not enough memory allocated (consider increasing data region size or
enabling evictions) [policyName=RefData, size=22.0 MB]
        at
org.apache.ignite.internal.pagemem.impl.PageMemoryNoStoreImpl.allocatePage(PageMemoryNoStoreImpl.java:292)
        at
org.apache.ignite.internal.processors.cache.persistence.freelist.FreeListImpl.allocateDataPage(FreeListImpl.java:456)
        at
org.apache.ignite.internal.processors.cache.persistence.freelist.FreeListImpl.insertDataRow(FreeListImpl.java:494)
        at
org.apache.ignite.internal.processors.cache.persistence.RowStore.addRow(RowStore.java:90)
        at
org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl$CacheDataStoreImpl.createRow(IgniteCacheOffheapManagerImpl.java:1255)
        at
org.apache.ignite.internal.processors.cache.GridCacheMapEntry$AtomicCacheUpdateClosure.update(GridCacheMapEntry.java:4408)
        at
org.apache.ignite.internal.processors.cache.GridCacheMapEntry$AtomicCacheUpdateClosure.call(GridCacheMapEntry.java:4204)
        at
org.apache.ignite.internal.processors.cache.GridCacheMapEntry$AtomicCacheUpdateClosure.call(GridCacheMapEntry.java:3918)
        at
org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree$Invoke.invokeClosure(BPlusTree.java:2988)
        at
org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree$Invoke.access$6200(BPlusTree.java:2882)
        at
org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.invokeDown(BPlusTree.java:1713)
        at
org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.invoke(BPlusTree.java:1602)
        ... 21 more




--
Sent from: http://apache-ignite-users.70518.x6.nabble.com/

Reply via email to