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

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

     [ https://issues.apache.org/jira/browse/IGNITE-13092?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Tomasz Grygo updated IGNITE-13092:
----------------------------------
     Attachment: ignite.xml
    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>


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


> 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>
>            Reporter: Tomasz Grygo
>            Priority: Blocker
>         Attachments: ignite.xml
>
>
> 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)