From be36a49d374d25a4a4a2042304f3e63e4327c5b1 Mon Sep 17 00:00:00 2001 From: Konstantin Dudkov Date: Wed, 29 Mar 2017 16:55:19 +0300 Subject: [PATCH 1/4] ignite-4876 --- .../junits/GridAbstractTest.java | 49 ++++++++++++++++++- 1 file changed, 47 insertions(+), 2 deletions(-) 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 ddcf91f2a65ce..b835a68ad9bd5 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.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; @@ -137,6 +141,9 @@ public abstract class GridAbstractTest extends TestCase { /** */ private static final long DFLT_TEST_TIMEOUT = 5 * 60 * 1000; + /** */ + private static final int DFLT_PART_WAIT_TIMEOUT = 2000; + /** */ private static final transient Map, TestCounters> tests = new ConcurrentHashMap<>(); @@ -953,6 +960,16 @@ protected void stopGrid(@Nullable String igniteInstanceName) { */ @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 @@ protected void stopGrid(@Nullable String igniteInstanceName, boolean cancel) { 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 @@ protected void stopAllGrids(boolean cancel) { } 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(); } @@ -1994,6 +2014,31 @@ public static IgniteEx grid(String name, boolean remote, boolean thisRemote) { } } + /** + * + * @throws IgniteInterruptedCheckedException + */ + public void awaitTopologyChange() throws IgniteInterruptedCheckedException { + for (Ignite g : G.allGrids()) { + GridKernalContext ctx = ((IgniteKernal)g).context(); + + if (ctx.isStopping()) + continue; + + final AffinityTopologyVersion topVer = ctx.discovery().topologyVersionEx(); + final 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() { + return exchVer.equals(topVer); + } + }, DFLT_PART_WAIT_TIMEOUT); + } + } + } + /** * */ From b180b659e74b37f90d9193b7cf877d007c9bfe79 Mon Sep 17 00:00:00 2001 From: Konstantin Dudkov Date: Wed, 29 Mar 2017 17:25:07 +0300 Subject: [PATCH 2/4] ignite-4876 --- .../org/apache/ignite/testframework/junits/GridAbstractTest.java | 1 + 1 file changed, 1 insertion(+) 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 b835a68ad9bd5..d3c2d6f11951d 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 @@ -2030,6 +2030,7 @@ public void awaitTopologyChange() throws IgniteInterruptedCheckedException { if (! topVer.equals(exchVer)) { info("topology version mismatch: node " + g.name() + " " + exchVer + ", " + topVer); + GridTestUtils.waitForCondition(new GridAbsPredicate() { @Override public boolean apply() { return exchVer.equals(topVer); From f82b5e545cf652c52b1629b50bdd9c01a6af0a6b Mon Sep 17 00:00:00 2001 From: Konstantin Dudkov Date: Wed, 29 Mar 2017 17:41:17 +0300 Subject: [PATCH 3/4] ignite-4876 --- .../apache/ignite/testframework/junits/GridAbstractTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 d3c2d6f11951d..63608036d1204 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 @@ -142,7 +142,7 @@ public abstract class GridAbstractTest extends TestCase { private static final long DFLT_TEST_TIMEOUT = 5 * 60 * 1000; /** */ - private static final int DFLT_PART_WAIT_TIMEOUT = 2000; + private static final int DFLT_TOP_WAIT_TIMEOUT = 2000; /** */ private static final transient Map, TestCounters> tests = new ConcurrentHashMap<>(); @@ -2035,7 +2035,7 @@ public void awaitTopologyChange() throws IgniteInterruptedCheckedException { @Override public boolean apply() { return exchVer.equals(topVer); } - }, DFLT_PART_WAIT_TIMEOUT); + }, DFLT_TOP_WAIT_TIMEOUT); } } } From 9a02350bef4418aaa69ce8d70db124ef5a9330f0 Mon Sep 17 00:00:00 2001 From: Konstantin Dudkov Date: Thu, 30 Mar 2017 16:46:32 +0300 Subject: [PATCH 4/4] ignite-4876 review fix --- .../ignite/testframework/junits/GridAbstractTest.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) 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 63608036d1204..1bb4540a66e0c 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 @@ -2020,19 +2020,22 @@ public static IgniteEx grid(String name, boolean remote, boolean thisRemote) { */ public void awaitTopologyChange() throws IgniteInterruptedCheckedException { for (Ignite g : G.allGrids()) { - GridKernalContext ctx = ((IgniteKernal)g).context(); + final GridKernalContext ctx = ((IgniteKernal)g).context(); if (ctx.isStopping()) continue; - final AffinityTopologyVersion topVer = ctx.discovery().topologyVersionEx(); - final AffinityTopologyVersion exchVer = ctx.cache().context().exchange().readyAffinityVersion(); + 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);