Repository: ignite Updated Branches: refs/heads/master dfaffe2af -> 02afb437f
IGNITE-8987 Fixed Ignite hang on getting of atomic structures after autoactivation - Fixes #4664. Signed-off-by: Alexey Goncharuk <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/02afb437 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/02afb437 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/02afb437 Branch: refs/heads/master Commit: 02afb437f4286c421e53de732c3041e182817c5d Parents: dfaffe2 Author: Roman Guseinov <[email protected]> Authored: Tue Sep 4 16:20:16 2018 +0300 Committer: Alexey Goncharuk <[email protected]> Committed: Tue Sep 4 16:20:16 2018 +0300 ---------------------------------------------------------------------- .../datastructures/DataStructuresProcessor.java | 5 ++- ...IgnitePersistentStoreDataStructuresTest.java | 45 +++++++++++++++++++- 2 files changed, 48 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/02afb437/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/DataStructuresProcessor.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/DataStructuresProcessor.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/DataStructuresProcessor.java index 8f6876c..2c77f17 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/DataStructuresProcessor.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/datastructures/DataStructuresProcessor.java @@ -193,7 +193,10 @@ public final class DataStructuresProcessor extends GridProcessorAdapter implemen * */ public void onBeforeActivate() { - initLatch = new CountDownLatch(1); + CountDownLatch latch0 = initLatch; + + if (latch0 == null || latch0.getCount() == 0) + initLatch = new CountDownLatch(1); } /** http://git-wip-us.apache.org/repos/asf/ignite/blob/02afb437/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePersistentStoreDataStructuresTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePersistentStoreDataStructuresTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePersistentStoreDataStructuresTest.java index 53e014e..855b035 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePersistentStoreDataStructuresTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/persistence/IgnitePersistentStoreDataStructuresTest.java @@ -17,6 +17,7 @@ package org.apache.ignite.internal.processors.cache.persistence; +import java.util.concurrent.TimeUnit; import org.apache.ignite.Ignite; import org.apache.ignite.IgniteAtomicLong; import org.apache.ignite.IgniteAtomicSequence; @@ -30,6 +31,8 @@ import org.apache.ignite.configuration.DataRegionConfiguration; import org.apache.ignite.configuration.DataStorageConfiguration; import org.apache.ignite.configuration.IgniteConfiguration; import org.apache.ignite.configuration.WALMode; +import org.apache.ignite.internal.IgniteFutureTimeoutCheckedException; +import org.apache.ignite.internal.IgniteInternalFuture; import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi; import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder; import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder; @@ -43,6 +46,9 @@ public class IgnitePersistentStoreDataStructuresTest extends GridCommonAbstractT /** */ private static final TcpDiscoveryIpFinder ipFinder = new TcpDiscoveryVmIpFinder(true); + /** */ + private static volatile boolean autoActivationEnabled = false; + /** {@inheritDoc} */ @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception { IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName); @@ -56,7 +62,7 @@ public class IgnitePersistentStoreDataStructuresTest extends GridCommonAbstractT cfg.setDataStorageConfiguration(memCfg); - cfg.setAutoActivationEnabled(false); + cfg.setAutoActivationEnabled(autoActivationEnabled); return cfg; } @@ -71,6 +77,8 @@ public class IgnitePersistentStoreDataStructuresTest extends GridCommonAbstractT super.beforeTest(); cleanPersistenceDir(); + + autoActivationEnabled = false; } /** {@inheritDoc} */ @@ -162,6 +170,41 @@ public class IgnitePersistentStoreDataStructuresTest extends GridCommonAbstractT /** * @throws Exception If failed. */ + public void testSequenceAfterAutoactivation() throws Exception { + final String seqName = "testSequence"; + + autoActivationEnabled = true; + + Ignite ignite = startGrids(2); + + ignite.cluster().active(true); + + ignite.atomicSequence(seqName, 0, true); + + stopAllGrids(true); + + final Ignite node = startGrids(2); + + IgniteInternalFuture fut = GridTestUtils.runAsync(new Runnable() { + @Override public void run() { + // Should not hang. + node.atomicSequence(seqName, 0, false); + } + }); + + try { + fut.get(10, TimeUnit.SECONDS); + } + catch (IgniteFutureTimeoutCheckedException e) { + fut.cancel(); + + fail("Ignite was stuck on getting the atomic sequence after autoactivation."); + } + } + + /** + * @throws Exception If failed. + */ public void testSet() throws Exception { fail("https://issues.apache.org/jira/browse/IGNITE-5553");
