Merge remote-tracking branch 'remotes/origin/ignite-3478' into ignite-5935
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishAndAckFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishAndAckFuture.java
index 36efe2f..140f57d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishAndAckFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishAndAckFuture.java
@@ -18,6 +18,7 @@
package org.apache.ignite.internal.processors.cache.distributed.near;
import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.IgniteLogger;
import org.apache.ignite.internal.IgniteInternalFuture;
import org.apache.ignite.internal.processors.cache.mvcc.MvccQueryTracker;
import org.apache.ignite.internal.processors.cache.mvcc.TxMvccInfo;
@@ -41,6 +42,11 @@
}
/** {@inheritDoc} */
+ @Override public IgniteLogger logger() {
+ return finishFut.context().logger(GridNearTxFinishAndAckFuture.class);
+ }
+
+ /** {@inheritDoc} */
@Override public boolean commit() {
return finishFut.commit();
}
@@ -52,6 +58,15 @@
finishFut.listen(new IgniteInClosure<GridNearTxFinishFuture>() {
@Override public void apply(final GridNearTxFinishFuture fut) {
+ try {
+ fut.get();
+ }
+ catch (IgniteCheckedException e) {
+ onDone(e);
+
+ return;
+ }
+
GridNearTxLocal tx = fut.tx();
IgniteInternalFuture<Void> ackFut = null;
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/CacheCoordinatorsProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/CacheCoordinatorsProcessor.java
index c88ca1c..31ca21d 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/CacheCoordinatorsProcessor.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/mvcc/CacheCoordinatorsProcessor.java
@@ -147,6 +147,11 @@
super(ctx);
}
+ /** {@inheritDoc} */
+ @Override public void onKernalStop(boolean cancel) {
+ super.onKernalStop(cancel);
+ }
+
/**
* @param crdVer Mvcc coordinator version.
* @param cntr Counter.
@@ -1342,6 +1347,7 @@
return "CacheCoordinatorDiscoveryListener[]";
}
}
+
/**
*
*/
@@ -1396,6 +1402,7 @@
return "CoordinatorMessageListener[]";
}
}
+
/**
*
*/
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccTransactionsTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccTransactionsTest.java
index 6309523..e8fc281 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccTransactionsTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/mvcc/CacheMvccTransactionsTest.java
@@ -350,6 +350,59 @@
}
/**
+ * @throws Exception If failed.
+ */
+ public void testNearTxNodeFailureSimple() throws Exception {
+ testSpi = true;
+
+ final int SRVS = 3;
+
+ startGridsMultiThreaded(SRVS);
+
+ client = true;
+
+ Ignite client = startGrid(SRVS);
+
+ CacheConfiguration<Object, Object> ccfg = cacheConfiguration(PARTITIONED,
+ FULL_SYNC, 2, DFLT_PARTITION_COUNT);
+
+ final IgniteCache cache = client.createCache(ccfg);
+
+ TestRecordingCommunicationSpi spi = TestRecordingCommunicationSpi.spi(client);
+
+ spi.blockMessages(new IgniteBiPredicate<ClusterNode, Message>() {
+ @Override public boolean apply(ClusterNode node, Message msg) {
+ if (msg instanceof GridNearTxFinishRequest || msg instanceof CoordinatorAckRequestTx) {
+ info("Block message [node=" + node.id() + ", msg=" + msg + ']');
+
+ return true;
+ }
+
+ return false;
+ }
+ });
+
+ IgniteInternalFuture fut = GridTestUtils.runAsync(new Callable() {
+ @Override public Object call() throws Exception {
+ try {
+ cache.put(primaryKey(jcache(1)), 1);
+ }
+ catch (Exception e) {
+ info("Ignore error: " + e);
+ }
+
+ return null;
+ }
+ });
+
+ spi.waitForBlocked();
+
+ stopGrid(SRVS);
+
+ fut.get();
+ }
+
+ /**
* @param tx If {@code true} tests reads inside transaction.
* @throws Exception If failed.
*/