Hi!

Looks like page eviction works incorrectly, when you try to insert a lot of
data at once in a batch.
I created a JIRA ticket for this issue:
https://issues.apache.org/jira/browse/IGNITE-8917
Thank you for the report!

When I replaced putAll with singular puts, Ignite stopped failing with
IgniteOOM.
You can use this approach as a workaround.

Denis

вт, 3 июл. 2018 г. в 12:11, Michaelikus <[email protected]>:

> Hiii everybody!
>
> There is a cluster 2.4 consists of 4 nodes with following data region and
> cache
>
> *DATA REGION:*
>         <property name="dataStorageConfiguration">
>             <bean
> class="org.apache.ignite.configuration.DataStorageConfiguration">
>                 <property name="defaultDataRegionConfiguration">
>                     <bean
> class="org.apache.ignite.configuration.DataRegionConfiguration">
>                         <property name="name" value="NotPersistRegion"/>
>                         <property name="maxSize"
> value="#{1L*1024*1024*1024}"/>
>                         <property name="pageEvictionMode"
> value="RANDOM_2_LRU"/>
>                         <property name="metricsEnabled" value="true"/>
>                         <property name="persistenceEnabled" value="false"/>
>                     </bean>
>                 </property>
>
>                 <property name="metricsEnabled" value="true"/>
>                 <property name="alwaysWriteFullPages" value="true"/>
>                 <property name="walCompactionEnabled" value="true"/>
>             </bean>
>         </property>
>
>
> *CACHE:*
>         <property name="cacheConfiguration">
>             <list>
>                 <bean
> class="org.apache.ignite.configuration.CacheConfiguration">
>                     <property name="name"
> value="InstagramUserId2UserName"/>
>                     <property name="cacheMode" value="PARTITIONED"/>
>                     <property name="atomicityMode" value="ATOMIC"/>
>                     <property name="partitionLossPolicy"
> value="READ_WRITE_SAFE"/>
>                     <property name="copyOnRead" value="false"/>
>                     <property name="dataRegionName"
> value="NotPersistRegion"/>
>                     <property name="statisticsEnabled" value="true"/>
>                     <property name="managementEnabled" value="true"/>
>                     <property name="backups" value="1"/>
>                     <property name="readFromBackup" value="true"/>
>                 </bean>
>             </list>
>         </property>
>
>
> *Java class which writes to cache:*
>
>     private static void putAllGetAll(IgniteCache<Integer, String> cache)
> throws IgniteException {
>         System.out.println();
>         System.out.println(">>> Starting putAll-getAll example.");
>
>         final int keyCnt = 100000;
>
>         // Create batch.
>         for (int bulkNum = 00; bulkNum < 1000; bulkNum++){
>             Map<Integer, String> batch = new HashMap<>();
>
>             for (int i = 0; i < keyCnt; i++) {
>                 batch.put(bulkNum * keyCnt + i, "bulk-" + (bulkNum) +
> ".Value=" + (bulkNum * keyCnt + i));
>             }
>             System.out.println(">>> Bulk #" + bulkNum + " - prepared.");
>
>             // Bulk-store entries in cache.
>             cache.putAll(batch);
>             System.out.println(">>> Bulk #" + bulkNum + " - stored in
> cache.");
>             batch.clear();
>         }
>     }
>
> In parallel i've run task which read random keys from same cache:
>
> int keyCnt = 90000000;
> while(true){
>     rndKey = rndGen.nextInt(keyCnt);
>     randomKeyFromCache = cache.get(rndKey);
>     System.out.println("Got [key=" + rndKey  + ", val=" +
> randomKeyFromCache
> + ']');
> }
>
>
> *And error:*
>
> Exception in thread "main"
> org.apache.ignite.cache.CachePartialUpdateException: Failed to update keys
> (retry update if possible).: [23700331, 23700330, 23700332, 23700322,
> 23700345, 23700351, 23700337, 23700338, 23700342, 23700300]
>     at
>
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicAbstractUpdateFuture.onPrimaryError(GridNearAtomicAbstractUpdateFuture.java:397)
>     at
>
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicUpdateFuture.onPrimaryResponse(GridNearAtomicUpdateFuture.java:416)
>     at
>
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.processNearAtomicUpdateResponse(GridDhtAtomicCache.java:3073)
>     at
>
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.access$500(GridDhtAtomicCache.java:130)
>     at
>
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache$6.apply(GridDhtAtomicCache.java:285)
>     at
>
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache$6.apply(GridDhtAtomicCache.java:280)
>     at
>
> org.apache.ignite.internal.processors.cache.GridCacheIoManager.processMessage(GridCacheIoManager.java:1060)
>     at
>
> org.apache.ignite.internal.processors.cache.GridCacheIoManager.onMessage0(GridCacheIoManager.java:579)
>     at
>
> org.apache.ignite.internal.processors.cache.GridCacheIoManager.handleMessage(GridCacheIoManager.java:378)
>     at
>
> org.apache.ignite.internal.processors.cache.GridCacheIoManager.handleMessage(GridCacheIoManager.java:304)
>     at
>
> org.apache.ignite.internal.processors.cache.GridCacheIoManager.access$100(GridCacheIoManager.java:99)
>     at
>
> org.apache.ignite.internal.processors.cache.GridCacheIoManager$1.onMessage(GridCacheIoManager.java:293)
>     at
>
> org.apache.ignite.internal.managers.communication.GridIoManager.invokeListener(GridIoManager.java:1555)
>     at
>
> org.apache.ignite.internal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:1183)
>     at
>
> org.apache.ignite.internal.managers.communication.GridIoManager.access$4200(GridIoManager.java:126)
>     at
>
> org.apache.ignite.internal.managers.communication.GridIoManager$9.run(GridIoManager.java:1090)
>     at
>
> org.apache.ignite.internal.util.StripedExecutor$Stripe.run(StripedExecutor.java:505)
>     at java.lang.Thread.run(Thread.java:748)
>     Suppressed: class org.apache.ignite.IgniteCheckedException: Failed to
> update keys on primary node.
>         at
>
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.UpdateErrors.addFailedKeys(UpdateErrors.java:124)
>         at
>
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicUpdateResponse.addFailedKeys(GridNearAtomicUpdateResponse.java:342)
>         at
>
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal0(GridDhtAtomicCache.java:1785)
>         at
>
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal(GridDhtAtomicCache.java:1628)
>         at
>
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.processNearAtomicUpdateRequest(GridDhtAtomicCache.java:3055)
>         at
>
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.access$400(GridDhtAtomicCache.java:130)
>         at
>
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache$5.apply(GridDhtAtomicCache.java:266)
>         at
>
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache$5.apply(GridDhtAtomicCache.java:261)
>         ... 12 more
>         Suppressed: class org.apache.ignite.IgniteException: Runtime
> failure
> on search row:
> org.apache.ignite.internal.processors.cache.tree.SearchRow@3b644991
>             at
>
> org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.invoke(BPlusTree.java:1630)
>             at
>
> org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl$CacheDataStoreImpl.invoke(IgniteCacheOffheapManagerImpl.java:1199)
>             at
>
> org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl.invoke(IgniteCacheOffheapManagerImpl.java:345)
>             at
>
> org.apache.ignite.internal.processors.cache.GridCacheMapEntry.innerUpdate(GridCacheMapEntry.java:1767)
>             at
>
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateSingle(GridDhtAtomicCache.java:2420)
>             at
>
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.update(GridDhtAtomicCache.java:1883)
>             at
>
> org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal0(GridDhtAtomicCache.java:1736)
>             ... 17 more
>         Caused by: class
> org.apache.ignite.internal.mem.IgniteOutOfMemoryException: Out of memory in
> data region [name=NotPersistRegion, initSize=256.0 MiB, maxSize=1.0 GiB,
> persistenceEnabled=false] Try the following:
>   ^-- Increase maximum off-heap memory size
> (DataRegionConfiguration.maxSize)
>   ^-- Enable Ignite persistence
> (DataRegionConfiguration.persistenceEnabled)
>   ^-- Enable eviction or expiration policies
>             at
>
> org.apache.ignite.internal.pagemem.impl.PageMemoryNoStoreImpl.allocatePage(PageMemoryNoStoreImpl.java:298)
>             at
>
> org.apache.ignite.internal.processors.cache.persistence.freelist.AbstractFreeList.allocateDataPage(AbstractFreeList.java:465)
>             at
>
> org.apache.ignite.internal.processors.cache.persistence.freelist.AbstractFreeList.insertDataRow(AbstractFreeList.java:503)
>             at
>
> org.apache.ignite.internal.processors.cache.persistence.RowStore.addRow(RowStore.java:97)
>             at
>
> org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl$CacheDataStoreImpl.createRow(IgniteCacheOffheapManagerImpl.java:1252)
>             at
>
> org.apache.ignite.internal.processors.cache.GridCacheMapEntry$AtomicCacheUpdateClosure.update(GridCacheMapEntry.java:4857)
>             at
>
> org.apache.ignite.internal.processors.cache.GridCacheMapEntry$AtomicCacheUpdateClosure.call(GridCacheMapEntry.java:4653)
>             at
>
> org.apache.ignite.internal.processors.cache.GridCacheMapEntry$AtomicCacheUpdateClosure.call(GridCacheMapEntry.java:4367)
>             at
>
> org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree$Invoke.invokeClosure(BPlusTree.java:3051)
>             at
>
> org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree$Invoke.access$6200(BPlusTree.java:2945)
>             at
>
> org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.invokeDown(BPlusTree.java:1711)
>             at
>
> org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.invokeDown(BPlusTree.java:1688)
>             at
>
> org.apache.ignite.internal.processors.cache.persistence.tree.BPlusTree.invoke(BPlusTree.java:1600)
>             ... 23 more
>
>
>
>
> --
> Sent from: http://apache-ignite-users.70518.x6.nabble.com/
>

Reply via email to