You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ag...@apache.org on 2018/04/23 07:12:31 UTC

[35/50] [abbrv] ignite git commit: IGNITE-7791 Fix for Ignite Client Nodes: failed test IgniteClientReconnectCacheTest.testReconnectCacheDestroyedAndCreat. - Fixes #3779.

IGNITE-7791 Fix for Ignite Client Nodes: failed test IgniteClientReconnectCacheTest.testReconnectCacheDestroyedAndCreat. - Fixes #3779.

Signed-off-by: dpavlov <dp...@apache.org>


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

Branch: refs/heads/ignite-6083
Commit: 9796ec41c4925f56f7a8d7f8097d2257f592b559
Parents: 09879b8
Author: Maxim Muzafarov <ma...@gmail.com>
Authored: Thu Apr 19 17:26:50 2018 +0300
Committer: dpavlov <dp...@apache.org>
Committed: Thu Apr 19 17:26:50 2018 +0300

----------------------------------------------------------------------
 .../processors/cache/ClusterCachesInfo.java     |   7 +-
 .../cache/LocalJoinCachesContext.java           |  15 ---
 .../IgniteClientReconnectDelayedSpiTest.java    | 103 +++++++++++++++++++
 .../IgniteClientReconnectTestSuite.java         |   2 +
 4 files changed, 106 insertions(+), 21 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/9796ec41/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ClusterCachesInfo.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ClusterCachesInfo.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ClusterCachesInfo.java
index 975617e..70ff110 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ClusterCachesInfo.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/ClusterCachesInfo.java
@@ -1905,7 +1905,6 @@ class ClusterCachesInfo {
         Set<Integer> stoppedCacheGrps = new HashSet<>();
 
         Set<String> survivedCaches = new HashSet<>();
-        Set<Integer> survivedCacheGrps = new HashSet<>();
 
         if (!active) {
             joinOnTransition = transition;
@@ -1948,11 +1947,8 @@ class ClusterCachesInfo {
 
                 if (stopped)
                     stoppedCacheGrps.add(locDesc.groupId());
-                else {
+                else
                     assert locDesc.groupId() == desc.groupId();
-
-                    survivedCacheGrps.add(locDesc.groupId());
-                }
             }
 
             for (Map.Entry<String, DynamicCacheDescriptor> e : cachesOnDisconnect.caches.entrySet()) {
@@ -1977,7 +1973,6 @@ class ClusterCachesInfo {
             }
 
             if (locJoinCachesCtx != null) {
-                locJoinCachesCtx.removeSurvivedCacheGroups(survivedCacheGrps);
                 locJoinCachesCtx.removeSurvivedCaches(survivedCaches);
 
                 if (locJoinCachesCtx.isEmpty())

http://git-wip-us.apache.org/repos/asf/ignite/blob/9796ec41/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/LocalJoinCachesContext.java
----------------------------------------------------------------------
diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/LocalJoinCachesContext.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/LocalJoinCachesContext.java
index db829b2..f41df60 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/LocalJoinCachesContext.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/LocalJoinCachesContext.java
@@ -86,11 +86,6 @@ public class LocalJoinCachesContext {
      * @param cacheNames Survived caches to clean.
      */
     public void removeSurvivedCaches(Set<String> cacheNames) {
-        if (cacheDescs != null) {
-            for (String cacheName : cacheNames)
-                cacheDescs.remove(cacheName);
-        }
-
         Iterator<T2<DynamicCacheDescriptor, NearCacheConfiguration>> it = locJoinStartCaches.iterator();
 
         for (; it.hasNext();) {
@@ -104,16 +99,6 @@ public class LocalJoinCachesContext {
     }
 
     /**
-     * @param cacheGrps Survived caches groups to clean.
-     */
-    public void removeSurvivedCacheGroups(Set<Integer> cacheGrps) {
-        if (cacheGrpDescs != null) {
-            for (Integer grpId : cacheGrps)
-                cacheGrpDescs.remove(grpId);
-        }
-    }
-
-    /**
      * @return {@code True} if the context is empty.
      */
     public boolean isEmpty() {

http://git-wip-us.apache.org/repos/asf/ignite/blob/9796ec41/modules/core/src/test/java/org/apache/ignite/internal/IgniteClientReconnectDelayedSpiTest.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/internal/IgniteClientReconnectDelayedSpiTest.java b/modules/core/src/test/java/org/apache/ignite/internal/IgniteClientReconnectDelayedSpiTest.java
new file mode 100644
index 0000000..a4a0912
--- /dev/null
+++ b/modules/core/src/test/java/org/apache/ignite/internal/IgniteClientReconnectDelayedSpiTest.java
@@ -0,0 +1,103 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal;
+
+import org.apache.ignite.Ignite;
+import org.apache.ignite.cluster.ClusterNode;
+import org.apache.ignite.configuration.CacheConfiguration;
+import org.apache.ignite.configuration.IgniteConfiguration;
+import org.apache.ignite.internal.managers.discovery.GridDiscoveryManager;
+import org.apache.ignite.internal.processors.cache.CacheAffinityChangeMessage;
+import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsAbstractMessage;
+import org.apache.ignite.internal.processors.cache.distributed.dht.preloader.GridDhtPartitionsSingleMessage;
+import org.apache.ignite.internal.util.lang.GridAbsPredicate;
+import org.apache.ignite.internal.util.typedef.F;
+import org.apache.ignite.lang.IgniteBiPredicate;
+import org.apache.ignite.plugin.extensions.communication.Message;
+import org.apache.ignite.testframework.GridTestUtils;
+
+/**
+ * Test cases for emulation of delayed messages sending with {@link TestRecordingCommunicationSpi} for blocking and
+ * resending messages at the moment we need it.
+ */
+public class IgniteClientReconnectDelayedSpiTest extends IgniteClientReconnectAbstractTest {
+    /** {@inheritDoc} */
+    @Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
+        IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
+
+        TestRecordingCommunicationSpi spi = new TestRecordingCommunicationSpi();
+
+        cfg.setCommunicationSpi(spi);
+        cfg.setCacheConfiguration(new CacheConfiguration("preconfigured-cache"));
+
+        return cfg;
+    }
+
+    /** {@inheritDoc} */
+    @Override protected int serverCount() {
+        return 3;
+    }
+
+    /**
+     * Test checks correctness of stale {@link CacheAffinityChangeMessage} processing by client node as delayed
+     * {@link GridDhtPartitionsSingleMessage} with exchId = null sends after client node reconnect happens.
+     *
+     * @throws Exception If failed.
+     */
+    public void testReconnectCacheDestroyedDelayedAffinityChange() throws Exception {
+        Ignite ignite = ignite(1);
+
+        TestRecordingCommunicationSpi spi = TestRecordingCommunicationSpi.spi(ignite);
+
+        spi.blockMessages(GridDhtPartitionsSingleMessage.class, ignite.name());
+        spi.blockMessages(new IgniteBiPredicate<ClusterNode, Message>() {
+            @Override public boolean apply(ClusterNode node, Message msg) {
+                return (msg instanceof GridDhtPartitionsSingleMessage) &&
+                    ((GridDhtPartitionsAbstractMessage)msg).exchangeId() == null;
+            }
+        });
+
+        final Ignite client = startGrid(getConfiguration().setClientMode(true));
+
+        client.getOrCreateCache(new CacheConfiguration<>(DEFAULT_CACHE_NAME));
+
+        final Ignite srv = clientRouter(client);
+
+        reconnectClientNode(client, srv, new Runnable() {
+            @Override public void run() {
+                srv.destroyCache(DEFAULT_CACHE_NAME);
+
+                srv.getOrCreateCache(new CacheConfiguration<>(DEFAULT_CACHE_NAME));
+            }
+        });
+
+        // Resend delayed GridDhtPartitionsSingleMessage.
+        spi.waitForBlocked();
+        spi.stopBlock();
+
+        assertNotNull(client.cache(DEFAULT_CACHE_NAME));
+
+        final GridDiscoveryManager srvDisco = ((IgniteEx)srv).context().discovery();
+
+        assertTrue(GridTestUtils.waitForCondition(new GridAbsPredicate() {
+            @Override public boolean apply() {
+                return F.eq(true, srvDisco.cacheClientNode(client.cluster().localNode(), DEFAULT_CACHE_NAME));
+            }
+        }, 5000));
+    }
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/9796ec41/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteClientReconnectTestSuite.java
----------------------------------------------------------------------
diff --git a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteClientReconnectTestSuite.java b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteClientReconnectTestSuite.java
index d0e907c..d5ebd15 100644
--- a/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteClientReconnectTestSuite.java
+++ b/modules/core/src/test/java/org/apache/ignite/testsuites/IgniteClientReconnectTestSuite.java
@@ -26,6 +26,7 @@ import org.apache.ignite.internal.IgniteClientReconnectCacheTest;
 import org.apache.ignite.internal.IgniteClientReconnectCollectionsTest;
 import org.apache.ignite.internal.IgniteClientReconnectComputeTest;
 import org.apache.ignite.internal.IgniteClientReconnectContinuousProcessorTest;
+import org.apache.ignite.internal.IgniteClientReconnectDelayedSpiTest;
 import org.apache.ignite.internal.IgniteClientReconnectDiscoveryStateTest;
 import org.apache.ignite.internal.IgniteClientReconnectFailoverTest;
 import org.apache.ignite.internal.IgniteClientReconnectServicesTest;
@@ -49,6 +50,7 @@ public class IgniteClientReconnectTestSuite extends TestSuite {
         suite.addTestSuite(IgniteClientReconnectApiExceptionTest.class);
         suite.addTestSuite(IgniteClientReconnectDiscoveryStateTest.class);
         suite.addTestSuite(IgniteClientReconnectCacheTest.class);
+        suite.addTestSuite(IgniteClientReconnectDelayedSpiTest.class);
         suite.addTestSuite(IgniteClientReconnectBinaryContexTest.class);
         suite.addTestSuite(IgniteClientReconnectContinuousProcessorTest.class);
         suite.addTestSuite(IgniteClientReconnectComputeTest.class);