Repository: ignite
Updated Branches:
  refs/heads/master 41699c31c -> 39f6e899c


IGNITE-8086 Flaky test timeouts in Activate/Deactivate Cluster suite

Signed-off-by: Anton Vinogradov <[email protected]>


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/39f6e899
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/39f6e899
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/39f6e899

Branch: refs/heads/master
Commit: 39f6e899c32025daf6afcab9366711381c1e38a7
Parents: 41699c3
Author: Maxim Muzafarov <[email protected]>
Authored: Wed Apr 25 13:39:13 2018 +0300
Committer: Anton Vinogradov <[email protected]>
Committed: Wed Apr 25 13:39:13 2018 +0300

----------------------------------------------------------------------
 .../distributed/CacheBaselineTopologyTest.java  | 16 +++---
 .../junits/common/GridCommonAbstractTest.java   | 60 ++++++++++++++++++++
 2 files changed, 67 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/39f6e899/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheBaselineTopologyTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheBaselineTopologyTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheBaselineTopologyTest.java
index 22cf205..e543919 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheBaselineTopologyTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/distributed/CacheBaselineTopologyTest.java
@@ -452,8 +452,7 @@ public class CacheBaselineTopologyTest extends 
GridCommonAbstractTest {
                 .setPartitionLossPolicy(READ_ONLY_SAFE)
         );
 
-        for (int i = 0; i < NODE_COUNT; i++)
-            grid(i).cache(CACHE_NAME).rebalance().get();
+        manualCacheRebalancing(ignite, CACHE_NAME);
 
         int key = -1;
 
@@ -575,9 +574,9 @@ public class CacheBaselineTopologyTest extends 
GridCommonAbstractTest {
         IgniteEx primary = null;
         IgniteEx backup = null;
 
-        for (int i = 0; i < NODE_COUNT; i++) {
-            grid(i).cache(CACHE_NAME).rebalance().get();
+        manualCacheRebalancing(ig, CACHE_NAME);
 
+        for (int i = 0; i < NODE_COUNT; i++) {
             if (grid(i).localNode().equals(affNodes.get(0))) {
                 primaryIdx = i;
                 primary = grid(i);
@@ -617,7 +616,7 @@ public class CacheBaselineTopologyTest extends 
GridCommonAbstractTest {
 
         assertEquals(backup.localNode(), 
ig.affinity(CACHE_NAME).mapKeyToNode(key));
 
-        primary.cache(CACHE_NAME).rebalance().get();
+        manualCacheRebalancing(ig, CACHE_NAME);
 
         awaitPartitionMapExchange();
 
@@ -661,9 +660,9 @@ public class CacheBaselineTopologyTest extends 
GridCommonAbstractTest {
         IgniteEx primary = null;
         IgniteEx backup = null;
 
-        for (int i = 0; i < NODE_COUNT; i++) {
-            grid(i).cache(CACHE_NAME).rebalance().get();
+        manualCacheRebalancing(ig, CACHE_NAME);
 
+        for (int i = 0; i < NODE_COUNT; i++) {
             if (grid(i).localNode().equals(affNodes.get(0))) {
                 primaryIdx = i;
                 primary = grid(i);
@@ -725,8 +724,7 @@ public class CacheBaselineTopologyTest extends 
GridCommonAbstractTest {
         assertEquals(val2, primary.cache(CACHE_NAME).get(key));
         assertEquals(val2, backup.cache(CACHE_NAME).get(key));
 
-        for (int i = 0; i < NODE_COUNT; i++)
-            grid(i).cache(CACHE_NAME).rebalance().get();
+        manualCacheRebalancing(ig, CACHE_NAME);
 
         awaitPartitionMapExchange();
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/39f6e899/modules/core/src/test/java/org/apache/ignite/testframework/junits/common/GridCommonAbstractTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/testframework/junits/common/GridCommonAbstractTest.java
 
b/modules/core/src/test/java/org/apache/ignite/testframework/junits/common/GridCommonAbstractTest.java
index 9f2f8c4..b992f5c 100755
--- 
a/modules/core/src/test/java/org/apache/ignite/testframework/junits/common/GridCommonAbstractTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/testframework/junits/common/GridCommonAbstractTest.java
@@ -43,6 +43,7 @@ import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteCompute;
 import org.apache.ignite.IgniteEvents;
 import org.apache.ignite.IgniteException;
+import org.apache.ignite.IgniteLogger;
 import org.apache.ignite.IgniteMessaging;
 import org.apache.ignite.Ignition;
 import org.apache.ignite.cache.CachePeekMode;
@@ -61,6 +62,7 @@ import org.apache.ignite.events.Event;
 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.processors.affinity.AffinityTopologyVersion;
 import 
org.apache.ignite.internal.processors.affinity.GridAffinityFunctionContextImpl;
@@ -98,6 +100,9 @@ import org.apache.ignite.internal.util.typedef.internal.LT;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteFuture;
 import org.apache.ignite.lang.IgnitePredicate;
+import org.apache.ignite.lang.IgniteRunnable;
+import org.apache.ignite.resources.IgniteInstanceResource;
+import org.apache.ignite.resources.LoggerResource;
 import org.apache.ignite.testframework.GridTestNode;
 import org.apache.ignite.testframework.GridTestUtils;
 import org.apache.ignite.testframework.junits.GridAbstractTest;
@@ -951,6 +956,61 @@ public abstract class GridCommonAbstractTest extends 
GridAbstractTest {
     }
 
     /**
+     * Use method for manual rebalaincing cache on all nodes. Note that using
+     * <pre name="code" class="java">
+     *   for (int i = 0; i < G.allGrids(); i++)
+     *     grid(i).cache(CACHE_NAME).rebalance().get();
+     * </pre>
+     * for rebalancing cache will lead to flaky test cases.
+     *
+     * @param ignite Ignite server instance for getting {@code compute} facade 
over all cluster nodes.
+     * @param cacheName Cache name for manual rebalancing on cluster. Usually 
used when used when
+     * {@link CacheConfiguration#getRebalanceDelay()} configuration parameter 
set to {@code -1} value.
+     * @throws IgniteCheckedException If fails.
+     */
+    protected void manualCacheRebalancing(Ignite ignite,
+        final String cacheName) throws IgniteCheckedException {
+        if (ignite.configuration().isClientMode())
+            return;
+
+        IgniteFuture<Void> fut =
+            ignite.compute().withTimeout(5_000).broadcastAsync(new 
IgniteRunnable() {
+                /** */
+                @LoggerResource
+                IgniteLogger log;
+
+                /** */
+                @IgniteInstanceResource
+                private Ignite ignite;
+
+                /** {@inheritDoc} */
+                @Override public void run() {
+                    IgniteCache<?, ?> cache = ignite.cache(cacheName);
+
+                    assertNotNull(cache);
+
+                    while (!(Boolean)cache.rebalance().get()) {
+                        try {
+                            U.sleep(100);
+                        }
+                        catch (IgniteInterruptedCheckedException e) {
+                            throw new IgniteException(e);
+                        }
+                    }
+
+                    if (log.isInfoEnabled())
+                        log.info("Manual rebalance finished [node=" + 
ignite.name() + ", cache=" + cacheName + "]");
+                }
+            });
+
+        assertTrue(GridTestUtils.waitForCondition(new GridAbsPredicate() {
+            @Override public boolean apply() {
+                return fut.isDone();
+            }
+        }, 5_000));
+    }
+
+    /**
      * @param id Node id.
      * @param major Major ver.
      * @param minor Minor ver.

Reply via email to