You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Roman Kondakov (Jira)" <ji...@apache.org> on 2020/05/28 20:24:00 UTC
[jira] [Commented] (IGNITE-13092) ConcurrentModificationException
when adding items to cache
[ https://issues.apache.org/jira/browse/IGNITE-13092?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17119050#comment-17119050 ]
Roman Kondakov commented on IGNITE-13092:
-----------------------------------------
It looks like a bug in the logging: {{TreeMap}} is logged without a proper synchronization. As a workaround you can set the logging level higher than {{DEBUG}}
> ConcurrentModificationException when adding items to cache
> ----------------------------------------------------------
>
> Key: IGNITE-13092
> URL: https://issues.apache.org/jira/browse/IGNITE-13092
> Project: Ignite
> Issue Type: Bug
> Components: cache
> Affects Versions: 2.8.1
> Environment: Java 1.8.0_231
> Apache Ignite 2.8.1
> Windows 10, 64G memory
> Java params:
> {{-Xms1024m }}{{-Xmx50g }}{{-Xss1024m}}
> {{-Xverify:none}}
> {{-server}}
> {{-DIGNITE_QUIET=true}}
> {{-XX:+UseG1GC}}
> {{-XX:+DisableExplicitGC}}
> {{-Djava.net.preferIPv4Stack=true}}
> {{-XX:+AlwaysPreTouch}}
> {{-XX:+ScavengeBeforeFullGC}}
> {{-XX:+AggressiveOpts}}
> <dependency>
> <groupId>org.apache.ignite</groupId>
> <artifactId>ignite-core</artifactId>
> <version>${ignite.version}</version>
> </dependency>
> <dependency>
> <groupId>org.apache.ignite</groupId>
> <artifactId>ignite-spring</artifactId>
> <version>${ignite.version}</version>
> </dependency>
> <dependency>
> <groupId>org.apache.ignite</groupId>
> <artifactId>ignite-log4j2</artifactId>
> <version>${ignite.version}</version>
> </dependency>
> <?xml version="1.0" encoding="UTF-8"?>
> <beans xmlns="http://www.springframework.org/schema/beans"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xsi:schemaLocation="
> http://www.springframework.org/schema/beans
> http://www.springframework.org/schema/beans/spring-beans.xsd">
> <bean class="org.apache.ignite.configuration.IgniteConfiguration">
> <property name="gridLogger">
> <bean class="org.apache.ignite.logger.log4j2.Log4J2Logger">
> <constructor-arg type="java.lang.String" value="log4j2.xml"/>
> </bean>
> </property>
> <property name="communicationSpi">
> <bean class="org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi">
> <!-- Override local port. -->
> <property name="localPort" value="47400"/>
> </bean>
> </property>
> <!-- Configure internal thread pool. 64-->
> <property name="publicThreadPoolSize" value="16"/>
> <!-- Configure system thread pool. 32-->
> <property name="systemThreadPoolSize" value="8"/>
> <property name="systemWorkerBlockedTimeout" value="#{5 * 60 * 1000}"/>
> <property name="failureHandler">
> <bean class="org.apache.ignite.failure.StopNodeFailureHandler">
> <!-- uncomment to enable this handler to
> process critical workers' hung-ups -->
> <property name="ignoredFailureTypes">
> <list>
> </list>
> </property>
> </bean>
> </property>
> <!-- Set to true to enable distributed class loading for examples, default is false. -->
> <property name="peerClassLoadingEnabled" value="false"/>
> <property name="dataStorageConfiguration">
> <bean class="org.apache.ignite.configuration.DataStorageConfiguration">
> <!--
> Sets a path to the root directory where data and indexes are
> to be persisted. It's assumed the directory is on a separated SSD.
> -->
> <property name="storagePath" value="persistence"/>
> <!--
> Sets a path to the directory where WAL is stored.
> It's assumed the directory is on a separated HDD.
> -->
> <property name="walPath" value="wal"/>
> <!--
> Sets a path to the directory where WAL archive is stored.
> The directory is on the same HDD as the WAL.
> -->
> <property name="walArchivePath" value="wal/archive"/>
> <!-- Changing WAL Mode. -->
> <property name="walMode" value="NONE"/>
> <!-- Set the page size to 4 KB, default -->
> <!-- limit 1 KB - 16 KB -->
> <property name="pageSize" value="#{4 * 1024}"/>
> <!-- Enable write throttling. -->
> <property name="writeThrottlingEnabled" value="false"/>
> <property name="checkpointFrequency" value="500"/>
> <property name="lockWaitTime" value="2000"/>
> <property name="checkpointThreads" value="1"/>
> <property name="checkpointWriteOrder" value="RANDOM"/>
> <!--
> Default memory region that grows endlessly. A cache is bound to this memory region
> unless it sets another one in its CacheConfiguration.
> -->
> <property name="defaultDataRegionConfiguration">
> <bean class="org.apache.ignite.configuration.DataRegionConfiguration">
> <!--property name="name" value="Default_Region"/-->
> <property name="name" value="default"/>
> <!-- 100 MB memory region with disabled eviction -->
> <property name="initialSize" value="#{100L * 1024 * 1024}"/>
> <!-- maxSize 20 MB is too little -->
> <!-- sum of all maxSize values has to be less than total memory of the system -->
> <!-- limits size in memory, not on disk -->
> <!-- default value 1.2GB -->
> <property name="maxSize" value="#{2L * 1024 * 1024 * 1024}"/>
> <property name="persistenceEnabled" value="true"/>
> <!-- Increasing the buffer size to 1 GB. -->
> <property name="checkpointPageBufferSize" value="#{1L * 1024 * 1024 * 1024}"/>
> </bean>
> </property>
> <!-- Defining several data regions for different memory regions -->
> <property name="dataRegionConfigurations">
> <list>
> </list>
> </property>
> </bean>
> </property>
> <property name="cacheConfiguration">
> <list>
> <!--bean class="org.apache.ignite.configuration.CacheConfiguration">
> <property name="dataRegionName" value="default"/>
> <property name="name" value=".ShardDetectorStorage"/>
> <property name="onheapCacheEnabled" value="true"/>
> </bean>
> <bean class="org.apache.ignite.configuration.CacheConfiguration">
> <property name="dataRegionName" value="default"/>
> <property name="name" value=".ChildrenStore"/>
> <property name="onheapCacheEnabled" value="true"/>
> </bean>
> <bean class="org.apache.ignite.configuration.CacheConfiguration">
> <property name="dataRegionName" value="default"/>
> <property name="name" value=".ChildrenStore.listsize"/>
> <property name="onheapCacheEnabled" value="true"/>
> </bean>
> <bean class="org.apache.ignite.configuration.CacheConfiguration">
> <property name="dataRegionName" value="default"/>
> <property name="name" value=".RootStorage"/>
> <property name="onheapCacheEnabled" value="true"/>
> </bean>
> <bean class="org.apache.ignite.configuration.CacheConfiguration">
> <property name="dataRegionName" value="default"/>
> <property name="name" value=".QualifierStorage"/>
> <property name="onheapCacheEnabled" value="true"/>
> </bean-->
> </list>
> </property>
> </bean>
> </beans>
> Reporter: Tomasz Grygo
> Priority: Blocker
>
> Ignite fails when adding items to cache with multiple concurrent threads. Cache is persistent, with no eviction and no WAL. There is no Ignite cluster, just one machine.
> 2020-05-27 23:29:13,177 [Storage0 ] [ERROR] - <.ChildrenStore> Unexpected exception during cache update
> java.util.ConcurrentModificationException
> at java.util.TreeMap$PrivateEntryIterator.nextEntry(TreeMap.java:1211)
> at java.util.TreeMap$EntryIterator.next(TreeMap.java:1247)
> at java.util.TreeMap$EntryIterator.next(TreeMap.java:1242)
> at java.util.AbstractMap.toString(AbstractMap.java:554)
> at java.lang.String.valueOf(String.java:2994)
> at java.lang.StringBuilder.append(StringBuilder.java:131)
> at org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryPartitionRecovery.collectEntries(CacheContinuousQueryPartitionRecovery.java:261)
> at org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryHandler.handleEvent(CacheContinuousQueryHandler.java:973)
> at org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryHandler.onEntryUpdate(CacheContinuousQueryHandler.java:1019)
> at org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryHandler.access$600(CacheContinuousQueryHandler.java:90)
> at org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryHandler$2.onEntryUpdated(CacheContinuousQueryHandler.java:445)
> at org.apache.ignite.internal.processors.cache.query.continuous.CacheContinuousQueryManager.onEntryUpdated(CacheContinuousQueryManager.java:443)
> at org.apache.ignite.internal.processors.cache.GridCacheMapEntry.innerUpdate(GridCacheMapEntry.java:2489)
> at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateSingle(GridDhtAtomicCache.java:2641)
> at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.update(GridDhtAtomicCache.java:2102)
> at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal0(GridDhtAtomicCache.java:1919)
> at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal(GridDhtAtomicCache.java:1719)
> at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicAbstractUpdateFuture.sendSingleRequest(GridNearAtomicAbstractUpdateFuture.java:300)
> at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicSingleUpdateFuture.map(GridNearAtomicSingleUpdateFuture.java:486)
> at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicSingleUpdateFuture.mapOnTopology(GridNearAtomicSingleUpdateFuture.java:446)
> at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridNearAtomicAbstractUpdateFuture.map(GridNearAtomicAbstractUpdateFuture.java:249)
> at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.update0(GridDhtAtomicCache.java:1164)
> at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.put0(GridDhtAtomicCache.java:624)
> at org.apache.ignite.internal.processors.cache.GridCacheAdapter.put(GridCacheAdapter.java:2580)
> at org.apache.ignite.internal.processors.cache.GridCacheAdapter.putIfAbsent(GridCacheAdapter.java:3007)
> at org.apache.ignite.internal.processors.cache.IgniteCacheProxyImpl.putIfAbsent(IgniteCacheProxyImpl.java:1395)
> at org.apache.ignite.internal.processors.cache.GatewayProtectedCacheProxy.putIfAbsent(GatewayProtectedCacheProxy.java:928)
> at com.sc.extr.cache.PureIgniteDynamicSetStorage.addItem(PureIgniteDynamicSetStorage.java:96)
> at com.sc.extr.cache.SetStorageBase.addItem(SetStorageBase.java:44)
> at com.sc.extr.tree.childrenstore.ChildrenStoreBaseKV.addItem(ChildrenStoreBaseKV.java:30)
> at com.sc.extr.tree.childrenstore.ChildrenStoreInPureIgnite.add(ChildrenStoreInPureIgnite.java:59)
> at com.sc.extr.tree.ShardChildren.addChild(ShardChildren.java:46)
> at com.sc.extr.tree.SkinnyTreeBuilder.shardChild(SkinnyTreeBuilder.java:121)
> at com.sc.extr.tree.SkinnyTreeBuilder.parentFwd(SkinnyTreeBuilder.java:162)
> at com.sc.extr.tree.SkinnyTreeBuilder.addRow(SkinnyTreeBuilder.java:277)
> at com.sc.extr.tree.MultiCacheTreeBuilder.process(MultiCacheTreeBuilder.java:204)
> at com.sc.bi.workflow.WorkTransformer.processOne(WorkTransformer.java:84)
> at com.sc.bi.workflow.WorkTransformer.doWork(WorkTransformer.java:145)
> at com.sc.bi.workflow.WorkTransformer.processQueue(WorkTransformer.java:210)
> at com.sc.bi.workflow.WorkTransformer.run(WorkTransformer.java:169)
--
This message was sent by Atlassian Jira
(v8.3.4#803005)