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.
