You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ignite.apache.org by "Tomasz Grygo (Jira)" <ji...@apache.org> on 2020/05/28 20:14:00 UTC

[jira] [Created] (IGNITE-13092) ConcurrentModificationException when adding items to cache

Tomasz Grygo created IGNITE-13092:
-------------------------------------

             Summary: 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


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)