IGNITE-9111 Do not wait for deactivation. Signed-off-by: agura <ag...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/8811a143 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/8811a143 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/8811a143 Branch: refs/heads/ignite-8446 Commit: 8811a143b525804905fd661b2c66d508b70e4697 Parents: d632eb6 Author: Pavel Kovalenko <jokse...@gmail.com> Authored: Thu Aug 2 15:51:17 2018 +0300 Committer: agura <ag...@apache.org> Committed: Thu Aug 2 15:51:46 2018 +0300 ---------------------------------------------------------------------- .../cluster/DiscoveryDataClusterState.java | 7 --- .../cluster/GridClusterStateProcessor.java | 2 +- .../IgniteClusterActivateDeactivateTest.java | 48 ++++++++++++++++++++ 3 files changed, 49 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/8811a143/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/DiscoveryDataClusterState.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/DiscoveryDataClusterState.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/DiscoveryDataClusterState.java index b6029a3..65d6088 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/DiscoveryDataClusterState.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/DiscoveryDataClusterState.java @@ -173,13 +173,6 @@ public class DiscoveryDataClusterState implements Serializable { } /** - * @return {@code True} if cluster active state change is in progress, {@code false} otherwise. - */ - public boolean activeStateChanging() { - return transition() && (prevState == null || (prevState.active != active)); - } - - /** * @return State change exchange version. */ public AffinityTopologyVersion transitionTopologyVersion() { http://git-wip-us.apache.org/repos/asf/ignite/blob/8811a143/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/GridClusterStateProcessor.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/GridClusterStateProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/GridClusterStateProcessor.java index da0bbf6..8d2620f 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/GridClusterStateProcessor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cluster/GridClusterStateProcessor.java @@ -179,7 +179,7 @@ public class GridClusterStateProcessor extends GridProcessorAdapter implements I assert globalState != null; - if (globalState.transition() && globalState.activeStateChanging()) { + if (globalState.transition() && globalState.active()) { Boolean transitionRes = globalState.transitionResult(); if (transitionRes != null) http://git-wip-us.apache.org/repos/asf/ignite/blob/8811a143/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteClusterActivateDeactivateTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteClusterActivateDeactivateTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteClusterActivateDeactivateTest.java index 3b39bfb..4ff97ba 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteClusterActivateDeactivateTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteClusterActivateDeactivateTest.java @@ -42,6 +42,7 @@ import org.apache.ignite.internal.managers.discovery.IgniteDiscoverySpi; import org.apache.ignite.internal.processors.affinity.AffinityTopologyVersion; import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsFullMessage; import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsSingleMessage; +import org.apache.ignite.internal.processors.cluster.DiscoveryDataClusterState; import org.apache.ignite.internal.util.typedef.F; import org.apache.ignite.internal.util.typedef.G; import org.apache.ignite.internal.util.typedef.internal.CU; @@ -53,6 +54,7 @@ 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.junit.Assert; import static org.apache.ignite.cache.CacheAtomicityMode.ATOMIC; import static org.apache.ignite.cache.CacheAtomicityMode.TRANSACTIONAL; @@ -1176,6 +1178,52 @@ public class IgniteClusterActivateDeactivateTest extends GridCommonAbstractTest } /** + * @throws Exception If failed. + */ + public void testClusterStateNotWaitForDeactivation() throws Exception { + testSpi = true; + + final int nodes = 2; + + IgniteEx crd = (IgniteEx) startGrids(nodes); + + crd.cluster().active(true); + + AffinityTopologyVersion curTopVer = crd.context().discovery().topologyVersionEx(); + + AffinityTopologyVersion deactivationTopVer = new AffinityTopologyVersion( + curTopVer.topologyVersion(), + curTopVer.minorTopologyVersion() + 1 + ); + + for (int gridIdx = 0; gridIdx < nodes; gridIdx++) { + TestRecordingCommunicationSpi spi = TestRecordingCommunicationSpi.spi(grid(gridIdx)); + + blockExchangeSingleMessage(spi, deactivationTopVer); + } + + IgniteInternalFuture deactivationFut = GridTestUtils.runAsync(() -> crd.cluster().active(false)); + + // Wait for deactivation start. + GridTestUtils.waitForCondition(() -> { + DiscoveryDataClusterState clusterState = crd.context().state().clusterState(); + + return clusterState.transition() && !clusterState.active(); + }, getTestTimeout()); + + // Check that deactivation transition wait is not happened. + Assert.assertFalse(crd.context().state().publicApiActiveState(true)); + + for (int gridIdx = 0; gridIdx < nodes; gridIdx++) { + TestRecordingCommunicationSpi spi = TestRecordingCommunicationSpi.spi(grid(gridIdx)); + + spi.stopBlock(); + } + + deactivationFut.get(); + } + + /** * @param exp If {@code true} there should be recorded messages. */ private void checkRecordedMessages(boolean exp) {