You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@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)