[ https://issues.apache.org/jira/browse/IGNITE-10514?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Vyacheslav Koptilin updated IGNITE-10514: ----------------------------------------- Description: Cache validation on the primary node, that was introduced by IGNITE-10413, may lead to the following AssertionError. {code:java} java.lang.AssertionError: GridDhtPartitionsExchangeFuture [firstDiscoEvt=DiscoveryCustomEvent [customMsg=CacheAffinityChangeMessage [...]] at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal0(GridDhtAtomicCache.java:1788) at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal(GridDhtAtomicCache.java:1671) at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.processNearAtomicUpdateRequest(GridDhtAtomicCache.java:3184) at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.access$400(GridDhtAtomicCache.java:138) at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache$5.apply(GridDhtAtomicCache.java:273) at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache$5.apply(GridDhtAtomicCache.java:268) at org.apache.ignite.internal.processors.cache.GridCacheIoManager.processMessage(GridCacheIoManager.java:1059) at org.apache.ignite.internal.processors.cache.GridCacheIoManager.onMessage0(GridCacheIoManager.java:584) at org.apache.ignite.internal.processors.cache.GridCacheIoManager.handleMessage(GridCacheIoManager.java:383) at org.apache.ignite.internal.processors.cache.GridCacheIoManager.handleMessage(GridCacheIoManager.java:309) at org.apache.ignite.internal.processors.cache.GridCacheIoManager.access$100(GridCacheIoManager.java:100) at org.apache.ignite.internal.processors.cache.GridCacheIoManager$1.onMessage(GridCacheIoManager.java:299) at org.apache.ignite.internal.managers.communication.GridIoManager.invokeListener(GridIoManager.java:1568) at org.apache.ignite.internal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:1196) at org.apache.ignite.internal.managers.communication.GridIoManager.access$4200(GridIoManager.java:127) at org.apache.ignite.internal.managers.communication.GridIoManager$9.run(GridIoManager.java:1092) at org.apache.ignite.internal.util.StripedExecutor$Stripe.body(StripedExecutor.java:505) at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:120) at java.lang.Thread.run(Thread.java:748) {code} Let's consider the following scenario: * Start one node and upload data. * Start a new node (note that this step triggers rebalancing). * Start explicit transaction and try to update atomic cache (it is assumed that atomic operation are allowed for use inside transactions, see Ignite system property DFLT_ALLOW_ATOMIC_OPS_IN_TX) {code:java} IgniteTransactions txs = ignite.transactions(); try (Transaction tx = txs.txStart()) { atomicCache.put(); tx.commit(); } {code} Let's assume that the transaction mapped on the topology version that is related to {{NODE_JOIN}} event, on the other hand, the corresponding request {{GridNearAtomicAbstractUpdateRequest}} can be validated on the primary node using the next top version, triggered by {{CacheAffinityMessage}}. {code:java} if (validateCache) { GridDhtTopologyFuture topFut = top.topologyVersionFuture(); // There is a chance that the topFut is not done yet! assert topFut.isDone() : topFut; Throwable err = topFut.validateCache(ctx, req.recovery(), false, null, null); ... }{code} That is the root cause of the {{AssertionError}} mentioned above. was: Cache validation on the primary node, that was introduced by IGNITE-10413, may lead to the following AssertionError. {code:java} java.lang.AssertionError: GridDhtPartitionsExchangeFuture [firstDiscoEvt=DiscoveryCustomEvent [customMsg=CacheAffinityChangeMessage [...]] at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal0(GridDhtAtomicCache.java:1788) at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal(GridDhtAtomicCache.java:1671) at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.processNearAtomicUpdateRequest(GridDhtAtomicCache.java:3184) at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.access$400(GridDhtAtomicCache.java:138) at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache$5.apply(GridDhtAtomicCache.java:273) at org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache$5.apply(GridDhtAtomicCache.java:268) at org.apache.ignite.internal.processors.cache.GridCacheIoManager.processMessage(GridCacheIoManager.java:1059) at org.apache.ignite.internal.processors.cache.GridCacheIoManager.onMessage0(GridCacheIoManager.java:584) at org.apache.ignite.internal.processors.cache.GridCacheIoManager.handleMessage(GridCacheIoManager.java:383) at org.apache.ignite.internal.processors.cache.GridCacheIoManager.handleMessage(GridCacheIoManager.java:309) at org.apache.ignite.internal.processors.cache.GridCacheIoManager.access$100(GridCacheIoManager.java:100) at org.apache.ignite.internal.processors.cache.GridCacheIoManager$1.onMessage(GridCacheIoManager.java:299) at org.apache.ignite.internal.managers.communication.GridIoManager.invokeListener(GridIoManager.java:1568) at org.apache.ignite.internal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:1196) at org.apache.ignite.internal.managers.communication.GridIoManager.access$4200(GridIoManager.java:127) at org.apache.ignite.internal.managers.communication.GridIoManager$9.run(GridIoManager.java:1092) at org.apache.ignite.internal.util.StripedExecutor$Stripe.body(StripedExecutor.java:505) at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:120) at java.lang.Thread.run(Thread.java:748) {code} Let's consider the following scenario: * Start one node and upload data. * Start a new node (note that this step triggers rebalancing). * Start explicit transaction and try to update atomic cache (it is assumed that atomic operation are allowed for use inside transactions, see Ignite system property DFLT_ALLOW_ATOMIC_OPS_IN_TX) {code:java} IgniteTransactions txs = ignite.transactions(); try (Transaction tx = txs.txStart()) { atomicCache.put(); tx.commit(); } {code} Let's assume that the transaction mapped on the topology version that is related to {{NODE_JOIN}} event, on the other hand, the corresponding request {{GridNearAtomicAbstractUpdateRequest}} can be validated on the primary node using the next top version, triggered by \{{CacheAffinityMessage}}. That is the root cause of the {{AssertionError}} mentioned above. > Cache validation on the primary node may result in AssertionError > ----------------------------------------------------------------- > > Key: IGNITE-10514 > URL: https://issues.apache.org/jira/browse/IGNITE-10514 > Project: Ignite > Issue Type: Bug > Affects Versions: 2.8 > Reporter: Vyacheslav Koptilin > Assignee: Vyacheslav Koptilin > Priority: Major > Fix For: 2.8 > > > Cache validation on the primary node, that was introduced by IGNITE-10413, > may lead to the following AssertionError. > {code:java} > java.lang.AssertionError: GridDhtPartitionsExchangeFuture > [firstDiscoEvt=DiscoveryCustomEvent [customMsg=CacheAffinityChangeMessage > [...]] > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal0(GridDhtAtomicCache.java:1788) > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.updateAllAsyncInternal(GridDhtAtomicCache.java:1671) > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.processNearAtomicUpdateRequest(GridDhtAtomicCache.java:3184) > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache.access$400(GridDhtAtomicCache.java:138) > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache$5.apply(GridDhtAtomicCache.java:273) > at > org.apache.ignite.internal.processors.cache.distributed.dht.atomic.GridDhtAtomicCache$5.apply(GridDhtAtomicCache.java:268) > at > org.apache.ignite.internal.processors.cache.GridCacheIoManager.processMessage(GridCacheIoManager.java:1059) > at > org.apache.ignite.internal.processors.cache.GridCacheIoManager.onMessage0(GridCacheIoManager.java:584) > at > org.apache.ignite.internal.processors.cache.GridCacheIoManager.handleMessage(GridCacheIoManager.java:383) > at > org.apache.ignite.internal.processors.cache.GridCacheIoManager.handleMessage(GridCacheIoManager.java:309) > at > org.apache.ignite.internal.processors.cache.GridCacheIoManager.access$100(GridCacheIoManager.java:100) > at > org.apache.ignite.internal.processors.cache.GridCacheIoManager$1.onMessage(GridCacheIoManager.java:299) > at > org.apache.ignite.internal.managers.communication.GridIoManager.invokeListener(GridIoManager.java:1568) > at > org.apache.ignite.internal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:1196) > at > org.apache.ignite.internal.managers.communication.GridIoManager.access$4200(GridIoManager.java:127) > at > org.apache.ignite.internal.managers.communication.GridIoManager$9.run(GridIoManager.java:1092) > at > org.apache.ignite.internal.util.StripedExecutor$Stripe.body(StripedExecutor.java:505) > at > org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:120) > at java.lang.Thread.run(Thread.java:748) > {code} > Let's consider the following scenario: > * Start one node and upload data. > * Start a new node (note that this step triggers rebalancing). > * Start explicit transaction and try to update atomic cache (it is assumed > that atomic operation are allowed for use inside transactions, see Ignite > system property DFLT_ALLOW_ATOMIC_OPS_IN_TX) > {code:java} > IgniteTransactions txs = ignite.transactions(); > try (Transaction tx = txs.txStart()) { > atomicCache.put(); > tx.commit(); > } > {code} > Let's assume that the transaction mapped on the topology version that is > related to {{NODE_JOIN}} event, > on the other hand, the corresponding request > {{GridNearAtomicAbstractUpdateRequest}} can be validated on the primary node > using the next top version, triggered by {{CacheAffinityMessage}}. > {code:java} > if (validateCache) { > GridDhtTopologyFuture topFut = top.topologyVersionFuture(); > // There is a chance that the topFut is not done yet! > assert topFut.isDone() : topFut; > Throwable err = topFut.validateCache(ctx, req.recovery(), false, null, > null); > ... > }{code} > That is the root cause of the {{AssertionError}} mentioned above. -- This message was sent by Atlassian JIRA (v7.6.3#76005)