You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ag...@apache.org on 2017/04/09 13:51:29 UTC
[06/18] ignite git commit: IGNITE-4876 - Tests should wait for
topology change on all nodes
IGNITE-4876 - Tests should wait for topology change on all nodes
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/4e80ddfe
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/4e80ddfe
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/4e80ddfe
Branch: refs/heads/ignite-4003
Commit: 4e80ddfe25d21f316de287bf5dade4ef0a0d17cc
Parents: 77740bf
Author: Konstantin Dudkov <kd...@ya.ru>
Authored: Fri Apr 7 17:17:04 2017 +0300
Committer: Alexey Goncharuk <al...@gmail.com>
Committed: Fri Apr 7 17:17:04 2017 +0300
----------------------------------------------------------------------
.../testframework/junits/GridAbstractTest.java | 53 +++++++++++++++++++-
1 file changed, 51 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/4e80ddfe/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java b/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java
index ddcf91f..1bb4540 100644
--- a/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java
+++ b/modules/core/src/test/java/org/apache/ignite/testframework/junits/GridAbstractTest.java
@@ -57,16 +57,20 @@ import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.configuration.NearCacheConfiguration;
import org.apache.ignite.events.EventType;
+import org.apache.ignite.internal.GridKernalContext;
import org.apache.ignite.internal.IgniteEx;
import org.apache.ignite.internal.IgniteInternalFuture;
+import org.apache.ignite.internal.IgniteInterruptedCheckedException;
import org.apache.ignite.internal.IgniteKernal;
import org.apache.ignite.internal.IgnitionEx;
import org.apache.ignite.internal.binary.BinaryEnumCache;
import org.apache.ignite.internal.binary.BinaryMarshaller;
+import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion;
import org.apache.ignite.internal.processors.resource.GridSpringResourceContext;
import org.apache.ignite.internal.util.GridClassLoaderCache;
import org.apache.ignite.internal.util.GridTestClockTimer;
import org.apache.ignite.internal.util.GridUnsafe;
+import org.apache.ignite.internal.util.lang.GridAbsPredicate;
import org.apache.ignite.internal.util.typedef.F;
import org.apache.ignite.internal.util.typedef.G;
import org.apache.ignite.internal.util.typedef.internal.LT;
@@ -138,6 +142,9 @@ public abstract class GridAbstractTest extends TestCase {
private static final long DFLT_TEST_TIMEOUT = 5 * 60 * 1000;
/** */
+ private static final int DFLT_TOP_WAIT_TIMEOUT = 2000;
+
+ /** */
private static final transient Map<Class<?>, TestCounters> tests = new ConcurrentHashMap<>();
/** */
@@ -953,6 +960,16 @@ public abstract class GridAbstractTest extends TestCase {
*/
@SuppressWarnings({"deprecation"})
protected void stopGrid(@Nullable String igniteInstanceName, boolean cancel) {
+ stopGrid(igniteInstanceName, cancel, true);
+ }
+
+ /**
+ * @param igniteInstanceName Ignite instance name.
+ * @param cancel Cancel flag.
+ * @param awaitTop Await topology change flag.
+ */
+ @SuppressWarnings({"deprecation"})
+ protected void stopGrid(@Nullable String igniteInstanceName, boolean cancel, boolean awaitTop) {
try {
Ignite ignite = grid(igniteInstanceName);
@@ -965,6 +982,9 @@ public abstract class GridAbstractTest extends TestCase {
G.stop(igniteInstanceName, cancel);
else
IgniteProcessProxy.stop(igniteInstanceName, cancel);
+
+ if (awaitTop)
+ awaitTopologyChange();
}
catch (IllegalStateException ignored) {
// Ignore error if grid already stopped.
@@ -999,10 +1019,10 @@ public abstract class GridAbstractTest extends TestCase {
}
for (Ignite g : clients)
- stopGrid(g.name(), cancel);
+ stopGrid(g.name(), cancel, false);
for (Ignite g : srvs)
- stopGrid(g.name(), cancel);
+ stopGrid(g.name(), cancel, false);
assert G.allGrids().isEmpty();
}
@@ -1996,6 +2016,35 @@ public abstract class GridAbstractTest extends TestCase {
/**
*
+ * @throws IgniteInterruptedCheckedException
+ */
+ public void awaitTopologyChange() throws IgniteInterruptedCheckedException {
+ for (Ignite g : G.allGrids()) {
+ final GridKernalContext ctx = ((IgniteKernal)g).context();
+
+ if (ctx.isStopping())
+ continue;
+
+ AffinityTopologyVersion topVer = ctx.discovery().topologyVersionEx();
+ AffinityTopologyVersion exchVer = ctx.cache().context().exchange().readyAffinityVersion();
+
+ if (! topVer.equals(exchVer)) {
+ info("topology version mismatch: node " + g.name() + " " + exchVer + ", " + topVer);
+
+ GridTestUtils.waitForCondition(new GridAbsPredicate() {
+ @Override public boolean apply() {
+ AffinityTopologyVersion topVer = ctx.discovery().topologyVersionEx();
+ AffinityTopologyVersion exchVer = ctx.cache().context().exchange().readyAffinityVersion();
+
+ return exchVer.equals(topVer);
+ }
+ }, DFLT_TOP_WAIT_TIMEOUT);
+ }
+ }
+ }
+
+ /**
+ *
*/
private static interface WriteReplaceOwner {
/**