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";);
 

Reply via email to