Repository: ignite
Updated Branches:
  refs/heads/ignite-1758 40c6d35eb -> f2dec6d86


ignite-1758


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

Branch: refs/heads/ignite-1758
Commit: f2dec6d861a23aeebe690c1ee8c5e4f741aa0256
Parents: 40c6d35
Author: sboikov <sboi...@gridgain.com>
Authored: Mon Oct 26 11:27:57 2015 +0300
Committer: sboikov <sboi...@gridgain.com>
Committed: Mon Oct 26 11:27:57 2015 +0300

----------------------------------------------------------------------
 .../processors/cache/GridCacheProcessor.java    | 77 ++++++++++++--------
 .../IgniteClientReconnectCacheTest.java         | 33 +++++++++
 ...gniteClientReconnectMassiveShutdownTest.java |  3 +
 3 files changed, 84 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/f2dec6d8/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
index 722e570..f63b149 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheProcessor.java
@@ -1829,61 +1829,80 @@ public class GridCacheProcessor extends 
GridProcessorAdapter {
 
     /** {@inheritDoc} */
     @Nullable @Override public Serializable collectDiscoveryData(UUID nodeId) {
+        boolean reconnect = ctx.localNodeId().equals(nodeId) && 
cachesOnDisconnect != null;
+
         // Collect dynamically started caches to a single object.
-        Collection<DynamicCacheChangeRequest> reqs =
-            new ArrayList<>(registeredCaches.size() + 
registeredTemplates.size());
+        Collection<DynamicCacheChangeRequest> reqs;
 
-        boolean reconnect = ctx.localNodeId().equals(nodeId) && 
cachesOnDisconnect != null;
+        Map<String, Map<UUID, Boolean>> clientNodesMap;
 
-        Map<String, DynamicCacheDescriptor> descs = reconnect ? 
cachesOnDisconnect : registeredCaches;
+        if (reconnect) {
+            reqs = new ArrayList<>(caches.size());
 
-        for (DynamicCacheDescriptor desc : descs.values()) {
-            DynamicCacheChangeRequest req = new 
DynamicCacheChangeRequest(desc.cacheConfiguration().getName(), null);
+            clientNodesMap = U.newHashMap(caches.size());
 
-            req.startCacheConfiguration(desc.cacheConfiguration());
+            for (GridCacheAdapter<?, ?> cache : caches.values()) {
+                DynamicCacheDescriptor desc = 
cachesOnDisconnect.get(maskNull(cache.name()));
 
-            req.cacheType(desc.cacheType());
+                if (desc == null)
+                    continue;
 
-            req.deploymentId(desc.deploymentId());
+                DynamicCacheChangeRequest req = new 
DynamicCacheChangeRequest(cache.name(), null);
 
-            reqs.add(req);
-        }
+                req.startCacheConfiguration(desc.cacheConfiguration());
 
-        for (DynamicCacheDescriptor desc : registeredTemplates.values()) {
-            DynamicCacheChangeRequest req = new 
DynamicCacheChangeRequest(desc.cacheConfiguration().getName(), null);
+                req.cacheType(desc.cacheType());
 
-            req.startCacheConfiguration(desc.cacheConfiguration());
+                req.deploymentId(desc.deploymentId());
 
-            req.template(true);
+                reqs.add(req);
 
-            req.deploymentId(desc.deploymentId());
+                Boolean nearEnabled = cache.isNear();
+
+                Map<UUID, Boolean> map = U.newHashMap(1);
+
+                map.put(nodeId, nearEnabled);
 
-            reqs.add(req);
+                clientNodesMap.put(cache.name(), map);
+            }
         }
+        else {
+            reqs = new ArrayList<>(registeredCaches.size() + 
registeredTemplates.size());
 
-        DynamicCacheChangeBatch req = new DynamicCacheChangeBatch(reqs);
+            for (DynamicCacheDescriptor desc : registeredCaches.values()) {
+                DynamicCacheChangeRequest req = new 
DynamicCacheChangeRequest(desc.cacheConfiguration().getName(), null);
 
-        Map<String, Map<UUID, Boolean>> clientNodesMap = 
ctx.discovery().clientNodesMap();
+                req.startCacheConfiguration(desc.cacheConfiguration());
 
-        if (reconnect) {
-            clientNodesMap = U.newHashMap(caches.size());
+                req.cacheType(desc.cacheType());
 
-            for (GridCacheAdapter<?, ?> cache : caches.values()) {
-                Boolean nearEnabled = cache.isNear();
+                req.deploymentId(desc.deploymentId());
 
-                Map<UUID, Boolean> map = U.newHashMap(1);
+                reqs.add(req);
+            }
 
-                map.put(nodeId, nearEnabled);
+            for (DynamicCacheDescriptor desc : registeredTemplates.values()) {
+                DynamicCacheChangeRequest req = new 
DynamicCacheChangeRequest(desc.cacheConfiguration().getName(), null);
 
-                clientNodesMap.put(cache.name(), map);
+                req.startCacheConfiguration(desc.cacheConfiguration());
+
+                req.template(true);
+
+                req.deploymentId(desc.deploymentId());
+
+                reqs.add(req);
             }
+
+            clientNodesMap = ctx.discovery().clientNodesMap();
         }
 
-        req.clientNodes(clientNodesMap);
+        DynamicCacheChangeBatch batch = new DynamicCacheChangeBatch(reqs);
+
+        batch.clientNodes(clientNodesMap);
 
-        req.clientReconnect(reconnect);
+        batch.clientReconnect(reconnect);
 
-        return req;
+        return batch;
     }
 
     /** {@inheritDoc} */

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2dec6d8/modules/core/src/test/java/org/apache/ignite/internal/IgniteClientReconnectCacheTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/IgniteClientReconnectCacheTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/IgniteClientReconnectCacheTest.java
index edd95e9..6131f54 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/IgniteClientReconnectCacheTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/IgniteClientReconnectCacheTest.java
@@ -1128,6 +1128,39 @@ public class IgniteClientReconnectCacheTest extends 
IgniteClientReconnectAbstrac
     }
 
     /**
+     * @throws Exception If failed.
+     */
+    public void testReconnectDestroyCache() throws Exception {
+        clientMode = true;
+
+        Ignite client = startGrid(SRV_CNT);
+
+        CacheConfiguration<Integer, Integer> ccfg1 = new 
CacheConfiguration<>();
+        ccfg1.setName("cache1");
+
+        CacheConfiguration<Integer, Integer> ccfg2 = new 
CacheConfiguration<>();
+        ccfg2.setName("cache2");
+
+        final Ignite srv = grid(0);
+
+        srv.createCache(ccfg1);
+        srv.createCache(ccfg2).put(1, 1);
+
+        IgniteCache<Integer, Integer> cache = client.cache("cache2");
+
+        reconnectClientNode(client, srv, new Runnable() {
+            @Override public void run() {
+                srv.destroyCache("cache1");
+            }
+        });
+
+        cache.put(2, 2);
+
+        assertEquals(1, (Object)cache.get(1));
+        assertEquals(2, (Object)cache.get(2));
+    }
+
+    /**
      * @param client Client.
      * @param disconnectLatch Disconnect event latch.
      * @param reconnectLatch Reconnect event latch.

http://git-wip-us.apache.org/repos/asf/ignite/blob/f2dec6d8/modules/core/src/test/java/org/apache/ignite/internal/IgniteClientReconnectMassiveShutdownTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/IgniteClientReconnectMassiveShutdownTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/IgniteClientReconnectMassiveShutdownTest.java
index 5ae5a48..ccb1114 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/IgniteClientReconnectMassiveShutdownTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/IgniteClientReconnectMassiveShutdownTest.java
@@ -34,6 +34,7 @@ import org.apache.ignite.cluster.ClusterTopologyException;
 import org.apache.ignite.configuration.CacheConfiguration;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.util.typedef.X;
+import org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi;
 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;
@@ -77,6 +78,8 @@ public class IgniteClientReconnectMassiveShutdownTest extends 
GridCommonAbstract
 
         cfg.setDiscoverySpi(new TcpDiscoverySpi().setIpFinder(ipFinder));
 
+        
((TcpCommunicationSpi)cfg.getCommunicationSpi()).setSharedMemoryPort(-1);
+
         return cfg;
     }
 

Reply via email to