You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2015/11/26 14:43:29 UTC
[1/2] ignite git commit: Improved and enabled GridCacheStopSelfTest.
Repository: ignite
Updated Branches:
refs/heads/ignite-1537 abc4f83dd -> bfe74edfc
Improved and enabled GridCacheStopSelfTest.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/722aacfd
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/722aacfd
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/722aacfd
Branch: refs/heads/ignite-1537
Commit: 722aacfdfb9a89ad8696c73f896c2e0643eaa86d
Parents: c584cca
Author: sboikov <sb...@gridgain.com>
Authored: Thu Nov 26 16:41:59 2015 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Thu Nov 26 16:41:59 2015 +0300
----------------------------------------------------------------------
.../distributed/dht/GridDhtLockFuture.java | 1 +
.../near/GridNearTxFinishFuture.java | 14 +-
.../processors/cache/GridCacheStopSelfTest.java | 143 +++++++++++++++++--
3 files changed, 140 insertions(+), 18 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/722aacfd/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockFuture.java
index 491ccd2..2b5d5a4 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLockFuture.java
@@ -728,6 +728,7 @@ public final class GridDhtLockFuture extends GridCompoundIdentityFuture<Boolean>
* Completeness callback.
*
* @param success {@code True} if lock was acquired.
+ * @param stopping {@code True} if node is stopping.
* @return {@code True} if complete by this operation.
*/
private boolean onComplete(boolean success, boolean stopping) {
http://git-wip-us.apache.org/repos/asf/ignite/blob/722aacfd/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java
index f76fc96..291c88a 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/near/GridNearTxFinishFuture.java
@@ -25,6 +25,7 @@ import org.apache.ignite.IgniteCheckedException;
import org.apache.ignite.IgniteLogger;
import org.apache.ignite.cluster.ClusterNode;
import org.apache.ignite.internal.IgniteInternalFuture;
+import org.apache.ignite.internal.NodeStoppingException;
import org.apache.ignite.internal.cluster.ClusterTopologyCheckedException;
import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
import org.apache.ignite.internal.processors.cache.GridCacheContext;
@@ -203,6 +204,9 @@ public final class GridNearTxFinishFuture<K, V> extends GridCompoundIdentityFutu
boolean marked = tx.setRollbackOnly();
+ if (err instanceof NodeStoppingException)
+ return super.onDone(null, err);
+
if (err instanceof IgniteTxRollbackCheckedException) {
if (marked) {
try {
@@ -241,13 +245,13 @@ public final class GridNearTxFinishFuture<K, V> extends GridCompoundIdentityFutu
}
}
- if (tx.onePhaseCommit()) {
- boolean commit = this.commit && err == null;
+ if (tx.onePhaseCommit()) {
+ boolean commit = this.commit && err == null;
- finishOnePhase(commit);
+ finishOnePhase(commit);
- tx.tmFinish(commit);
- }
+ tx.tmFinish(commit);
+ }
if (super.onDone(tx0, err)) {
if (error() instanceof IgniteTxHeuristicCheckedException) {
http://git-wip-us.apache.org/repos/asf/ignite/blob/722aacfd/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheStopSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheStopSelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheStopSelfTest.java
index 59c899d..a34857f 100644
--- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheStopSelfTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/GridCacheStopSelfTest.java
@@ -21,36 +21,43 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.concurrent.Callable;
import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ThreadLocalRandom;
+import java.util.concurrent.atomic.AtomicInteger;
import javax.cache.CacheException;
+import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.IgniteException;
import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.internal.IgniteInternalFuture;
+import org.apache.ignite.internal.IgniteKernal;
import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
+import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
import org.apache.ignite.testframework.GridTestUtils;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
import org.apache.ignite.transactions.Transaction;
+import org.apache.ignite.transactions.TransactionConcurrency;
import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC;
import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL;
import static org.apache.ignite.cache.CacheMode.PARTITIONED;
import static org.apache.ignite.cache.CacheMode.REPLICATED;
+import static org.apache.ignite.transactions.TransactionConcurrency.OPTIMISTIC;
+import static org.apache.ignite.transactions.TransactionConcurrency.PESSIMISTIC;
+import static org.apache.ignite.transactions.TransactionIsolation.REPEATABLE_READ;
/**
* Tests correct cache stopping.
*/
public class GridCacheStopSelfTest extends GridCommonAbstractTest {
- /** {@inheritDoc} */
- @Override protected void beforeTest() throws Exception {
- fail("https://issues.apache.org/jira/browse/IGNITE-1393");
- }
-
/** */
private static final String EXPECTED_MSG = "Cache has been closed or destroyed";
/** */
+ private static final TcpDiscoveryIpFinder ipFinder = new TcpDiscoveryVmIpFinder(true);
+
+ /** */
private boolean atomic;
/** */
@@ -62,7 +69,7 @@ public class GridCacheStopSelfTest extends GridCommonAbstractTest {
TcpDiscoverySpi disc = new TcpDiscoverySpi();
- disc.setIpFinder(new TcpDiscoveryVmIpFinder(true));
+ disc.setIpFinder(ipFinder);
cfg.setDiscoverySpi(disc);
@@ -70,6 +77,9 @@ public class GridCacheStopSelfTest extends GridCommonAbstractTest {
ccfg.setCacheMode(replicated ? REPLICATED : PARTITIONED);
+ if (!replicated)
+ ccfg.setBackups(1);
+
ccfg.setAtomicityMode(atomic ? ATOMIC : TRANSACTIONAL);
ccfg.setSwapEnabled(true);
@@ -126,6 +136,112 @@ public class GridCacheStopSelfTest extends GridCommonAbstractTest {
}
/**
+ * @throws Exception If failed.
+ */
+ public void testStopMultithreaded() throws Exception {
+ try {
+ startGrid(0);
+
+ for (int i = 0; i < 5; i++) {
+ log.info("Iteration: " + i);
+
+ startGridsMultiThreaded(1, 3);
+
+ final AtomicInteger threadIdx = new AtomicInteger(0);
+
+ final IgniteInternalFuture<?> fut1 = GridTestUtils.runMultiThreadedAsync(new Callable<Void>() {
+ @Override public Void call() throws Exception {
+ int idx = threadIdx.getAndIncrement();
+
+ IgniteKernal node = (IgniteKernal)ignite(idx % 3 + 1);
+
+ IgniteCache<Integer, Integer> cache = node.cache(null);
+
+ while (true) {
+ try {
+ cacheOperations(node, cache);
+ }
+ catch (Exception e) {
+ if (node.isStopping())
+ break;
+ }
+ }
+
+ return null;
+ }
+ }, 20, "tx-node-stop-thread");
+
+ IgniteInternalFuture<?> fut2 = GridTestUtils.runMultiThreadedAsync(new Callable<Void>() {
+ @Override public Void call() throws Exception {
+ IgniteKernal node = (IgniteKernal)ignite(0);
+
+ IgniteCache<Integer, Integer> cache = node.cache(null);
+
+ while (!fut1.isDone()) {
+ try {
+ cacheOperations(node, cache);
+ }
+ catch (Exception ignore) {
+ // No-op.
+ }
+ }
+
+ return null;
+ }
+ }, 2, "tx-thread");
+
+ Thread.sleep(3000);
+
+ final AtomicInteger nodeIdx = new AtomicInteger(1);
+
+ GridTestUtils.runMultiThreaded(new Callable<Void>() {
+ @Override public Void call() throws Exception {
+ int idx = nodeIdx.getAndIncrement();
+
+ log.info("Stop node: " + idx);
+
+ ignite(idx).close();
+
+ return null;
+ }
+ }, 3, "stop-node");
+
+ fut1.get();
+ fut2.get();
+ }
+ }
+ finally {
+ stopAllGrids();
+ }
+ }
+
+ /**
+ * @param node Node.
+ * @param cache Cache.
+ */
+ private void cacheOperations(Ignite node, IgniteCache<Integer, Integer> cache) {
+ ThreadLocalRandom rnd = ThreadLocalRandom.current();
+
+ Integer key = rnd.nextInt(1000);
+
+ cache.put(key, key);
+
+ cache.get(key);
+
+ try (Transaction tx = node.transactions().txStart(OPTIMISTIC, REPEATABLE_READ)) {
+ cache.put(key, key);
+
+ tx.commit();
+ }
+
+ try (Transaction tx = node.transactions().txStart(PESSIMISTIC, REPEATABLE_READ)) {
+ cache.put(key, key);
+
+ tx.commit();
+ }
+ }
+
+ /**
* @param startTx If {@code true} starts transactions.
* @throws Exception If failed.
*/
@@ -143,8 +259,10 @@ public class GridCacheStopSelfTest extends GridCommonAbstractTest {
assertNotNull(cache);
- assertEquals(atomic ? ATOMIC : TRANSACTIONAL, cache.getConfiguration(CacheConfiguration.class).getAtomicityMode());
- assertEquals(replicated ? REPLICATED : PARTITIONED, cache.getConfiguration(CacheConfiguration.class).getCacheMode());
+ CacheConfiguration ccfg = cache.getConfiguration(CacheConfiguration.class);
+
+ assertEquals(atomic ? ATOMIC : TRANSACTIONAL, ccfg.getAtomicityMode());
+ assertEquals(replicated ? REPLICATED : PARTITIONED, ccfg.getCacheMode());
Collection<IgniteInternalFuture<?>> putFuts = new ArrayList<>();
@@ -155,7 +273,9 @@ public class GridCacheStopSelfTest extends GridCommonAbstractTest {
@Override public Void call() throws Exception {
try {
if (startTx) {
- try (Transaction tx = grid(0).transactions().txStart()) {
+ TransactionConcurrency concurrency = key % 2 == 0 ? OPTIMISTIC : PESSIMISTIC;
+
+ try (Transaction tx = grid(0).transactions().txStart(concurrency, REPEATABLE_READ)) {
cache.put(key, key);
readyLatch.countDown();
@@ -173,12 +293,9 @@ public class GridCacheStopSelfTest extends GridCommonAbstractTest {
cache.put(key, key);
}
}
- catch (CacheException | IgniteException e) {
+ catch (CacheException | IgniteException | IllegalStateException e) {
log.info("Ignore error: " + e);
}
- catch (IllegalStateException e) {
- assertTrue(e.getMessage().startsWith(EXPECTED_MSG));
- }
return null;
}
[2/2] ignite git commit: Merge remote-tracking branch
'remotes/origin/ignite-1.5' into ignite-1537
Posted by sb...@apache.org.
Merge remote-tracking branch 'remotes/origin/ignite-1.5' into ignite-1537
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/bfe74edf
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/bfe74edf
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/bfe74edf
Branch: refs/heads/ignite-1537
Commit: bfe74edfc2002acc5ba32d9c8a943f74543496f2
Parents: abc4f83 722aacf
Author: sboikov <sb...@gridgain.com>
Authored: Thu Nov 26 16:43:08 2015 +0300
Committer: sboikov <sb...@gridgain.com>
Committed: Thu Nov 26 16:43:08 2015 +0300
----------------------------------------------------------------------
.../distributed/dht/GridDhtLockFuture.java | 1 +
.../near/GridNearTxFinishFuture.java | 14 +-
.../processors/cache/GridCacheStopSelfTest.java | 143 +++++++++++++++++--
3 files changed, 140 insertions(+), 18 deletions(-)
----------------------------------------------------------------------