You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ignite.apache.org by "Aleksey Plekhanov (Jira)" <ji...@apache.org> on 2020/04/02 09:03:00 UTC

[jira] [Created] (IGNITE-12854) Node failed under load when ATOMIC and TRANSACTIONAL caches created in the same cache group

Aleksey Plekhanov created IGNITE-12854:
------------------------------------------

             Summary: Node failed under load when ATOMIC and TRANSACTIONAL caches created in the same cache group
                 Key: IGNITE-12854
                 URL: https://issues.apache.org/jira/browse/IGNITE-12854
             Project: Ignite
          Issue Type: Bug
    Affects Versions: 2.8, 2.9, 2.8.1
            Reporter: Aleksey Plekhanov


Node failed with assertion error under concurrent puts to ATOMIC and TRANSACTIONAL caches belonging to the same cache group:
{noformat}
java.lang.AssertionError: LWM after HWM: lwm=262, hwm=261
    at org.apache.ignite.internal.processors.cache.PartitionUpdateCounterTrackingImpl.reserve(PartitionUpdateCounterTrackingImpl.java:262)
    at org.apache.ignite.internal.processors.cache.IgniteCacheOffheapManagerImpl$CacheDataStoreImpl.getAndIncrementUpdateCounter(IgniteCacheOffheapManagerImpl.java:1601)
    at org.apache.ignite.internal.processors.cache.persistence.GridCacheOffheapManager$GridCacheDataStore.getAndIncrementUpdateCounter(GridCacheOffheapManager.java:2162)
    at org.apache.ignite.internal.processors.cache.distributed.dht.topology.GridDhtLocalPartition.getAndIncrementUpdateCounter(GridDhtLocalPartition.java:1087)
    at org.apache.ignite.internal.processors.cache.transactions.IgniteTxLocalAdapter.calculatePartitionUpdateCounters(IgniteTxLocalAdapter.java:520)
    at org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxPrepareFuture.prepare0(GridDhtTxPrepareFuture.java:1343)
    at org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxPrepareFuture.mapIfLocked(GridDhtTxPrepareFuture.java:709)
    at org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxPrepareFuture.prepare(GridDhtTxPrepareFuture.java:1104)
    at org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxLocal.prepareAsync(GridDhtTxLocal.java:411)
    at org.apache.ignite.internal.processors.cache.transactions.IgniteTxHandler.prepareNearTx(IgniteTxHandler.java:577)
    at org.apache.ignite.internal.processors.cache.transactions.IgniteTxHandler.prepareNearTx(IgniteTxHandler.java:374)
    at org.apache.ignite.internal.processors.cache.transactions.IgniteTxHandler.processNearTxPrepareRequest0(IgniteTxHandler.java:183)
    at org.apache.ignite.internal.processors.cache.transactions.IgniteTxHandler.processNearTxPrepareRequest(IgniteTxHandler.java:161)
    at org.apache.ignite.internal.processors.cache.transactions.IgniteTxHandler$1.apply(IgniteTxHandler.java:205)
    at org.apache.ignite.internal.processors.cache.transactions.IgniteTxHandler$1.apply(IgniteTxHandler.java:203)
    at org.apache.ignite.internal.processors.cache.GridCacheIoManager.processMessage(GridCacheIoManager.java:1142)
    at org.apache.ignite.internal.processors.cache.GridCacheIoManager.onMessage0(GridCacheIoManager.java:591)
    at org.apache.ignite.internal.processors.cache.GridCacheIoManager.handleMessage(GridCacheIoManager.java:392)
    at org.apache.ignite.internal.processors.cache.GridCacheIoManager.handleMessage(GridCacheIoManager.java:318)
    at org.apache.ignite.internal.processors.cache.GridCacheIoManager$1.onMessage(GridCacheIoManager.java:308)
    at org.apache.ignite.internal.managers.communication.GridIoManager.invokeListener(GridIoManager.java:1847)
    at org.apache.ignite.internal.managers.communication.GridIoManager.processRegularMessage0(GridIoManager.java:1472)
    at org.apache.ignite.internal.managers.communication.GridIoManager$9.run(GridIoManager.java:1367)
    at org.apache.ignite.internal.util.StripedExecutor$Stripe.body(StripedExecutor.java:565)
    at org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:120){noformat}
Reproducer:

 
{code:java}
public void testPartCounters() throws Exception {
    final AtomicBoolean end = new AtomicBoolean();

    final IgniteEx srv = startGrids(3);

    srv.cluster().active(true);

    IgniteInternalFuture<?> loadFut = runMultiThreadedAsync(() -> {
        while (!end.get() && !fail) {
            List<IgniteCache<Object, Object>> caches = F.asList(
                srv.getOrCreateCache(new CacheConfiguration<>(CACHE_NAME_ATOMIC)
                    .setAtomicityMode(CacheAtomicityMode.ATOMIC)
                    .setGroupName(GROUP_NAME)
                ),
                srv.getOrCreateCache(new CacheConfiguration<>(CACHE_NAME_TX)
                    .setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL)
                    .setGroupName(GROUP_NAME)
                )
            );

            for (IgniteCache<Object, Object> cache : caches) {
                for (int i = 0; i < ENTRIES; i++)
                    cache.put(i, new byte[1024]);
            }
        }
    }, WORKLOAD_THREADS_CNT, "async_runner");

    try {
        // Let's wait some time.
        loadFut.get(10, TimeUnit.SECONDS);
    }
    catch (Exception e) {
        assertFalse("Failure handler was called. See log above.", fail);

        assertTrue(X.hasCause(e, IgniteFutureTimeoutCheckedException.class));
    }
    finally {
        end.set(true);
    }

    assertFalse("Failure handler was called. See log above.", fail);
}
{code}
 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)