Repository: ignite
Updated Branches:
  refs/heads/ignite-5075 debb0c9e0 -> 68e799c8e


ignite-5075


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

Branch: refs/heads/ignite-5075
Commit: 68e799c8e627dd066b32f5c3e9efbf80201100b7
Parents: debb0c9
Author: sboikov <[email protected]>
Authored: Tue May 16 16:46:00 2017 +0300
Committer: sboikov <[email protected]>
Committed: Tue May 16 16:46:00 2017 +0300

----------------------------------------------------------------------
 .../cache/CacheGroupInfrastructure.java         |  3 ++
 .../distributed/dht/GridDhtCacheEntry.java      |  2 +-
 .../distributed/dht/GridDhtLocalPartition.java  | 16 ++++++++
 .../dht/GridDhtPartitionTopologyImpl.java       | 15 +++++++
 .../processors/cache/IgniteCacheGroupsTest.java | 42 ++++++++++++++++----
 5 files changed, 69 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/68e799c8/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheGroupInfrastructure.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheGroupInfrastructure.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheGroupInfrastructure.java
index 4241c51..62add3f 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheGroupInfrastructure.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/CacheGroupInfrastructure.java
@@ -528,6 +528,9 @@ public class CacheGroupInfrastructure {
      * @param destroy Destroy flag.
      */
     void stopCache(GridCacheContext cctx, boolean destroy) {
+        if (top != null)
+            top.onCacheStopped(cctx.cacheId());
+
         offheapMgr.stopCache(cctx.cacheId(), destroy);
 
         removeCacheContext(cctx);

http://git-wip-us.apache.org/repos/asf/ignite/blob/68e799c8/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtCacheEntry.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtCacheEntry.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtCacheEntry.java
index 5acbf2f..974a267 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtCacheEntry.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtCacheEntry.java
@@ -139,7 +139,7 @@ public class GridDhtCacheEntry extends 
GridDistributedCacheEntry {
         assert !Thread.holdsLock(this);
 
         // Remove this entry from partition mapping.
-        cctx.dht().topology().onRemoved(this);
+        cctx.topology().onRemoved(this);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/68e799c8/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLocalPartition.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLocalPartition.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLocalPartition.java
index ac8316b..72f67f7 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLocalPartition.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtLocalPartition.java
@@ -1149,6 +1149,22 @@ public class GridDhtLocalPartition extends 
GridCacheConcurrentMapImpl implements
     }
 
     /**
+     * @param cacheId Cache ID.
+     */
+    void onCacheStopped(int cacheId) {
+        assert grp.sharedGroup() : grp.nameForLog();
+
+        for (Iterator<RemovedEntryHolder> it = rmvQueue.iterator(); 
it.hasNext();) {
+            RemovedEntryHolder e = it.next();
+
+            if (e.cacheId() == cacheId)
+                it.remove();
+        }
+
+        cachesEntryMaps.remove(cacheId);
+    }
+
+    /**
      * @param state Composite state.
      * @return Partition state.
      */

http://git-wip-us.apache.org/repos/asf/ignite/blob/68e799c8/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java
index 4696d27..100e0d5 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/distributed/dht/GridDhtPartitionTopologyImpl.java
@@ -1963,6 +1963,21 @@ public class GridDhtPartitionTopologyImpl implements 
GridDhtPartitionTopology {
         }
     }
 
+    /**
+     * @param cacheId Cache ID.
+     */
+    public void onCacheStopped(int cacheId) {
+        if (!grp.sharedGroup())
+            return;
+
+        for (int i = 0; i < locParts.length(); i++) {
+            GridDhtLocalPartition part = locParts.get(i);
+
+            if (part != null)
+                part.onCacheStopped(cacheId);
+        }
+    }
+
     /** {@inheritDoc} */
     @Override public void printMemoryStats(int threshold) {
         X.println(">>>  Cache partition topology stats [igniteInstanceName=" + 
ctx.igniteInstanceName() +

http://git-wip-us.apache.org/repos/asf/ignite/blob/68e799c8/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheGroupsTest.java
----------------------------------------------------------------------
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheGroupsTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheGroupsTest.java
index 27df118..20ac80c 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheGroupsTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/IgniteCacheGroupsTest.java
@@ -706,12 +706,14 @@ public class IgniteCacheGroupsTest extends 
GridCommonAbstractTest {
     /**
      * @throws Exception If failed.
      */
-    public void _testConcurrentOperationsAndDestroy() throws Exception {
+    public void testConcurrentOperationsAndCacheDestroy() throws Exception {
         final int SRVS = 4;
         final int CLIENTS = 4;
         final int NODES = SRVS + CLIENTS;
 
-        Ignite srv0 = startGridsMultiThreaded(SRVS);
+        startGrid(0);
+
+        Ignite srv0 = startGridsMultiThreaded(1, SRVS - 1);
 
         client = true;
 
@@ -722,6 +724,8 @@ public class IgniteCacheGroupsTest extends 
GridCommonAbstractTest {
         final int grp1Backups = ThreadLocalRandom.current().nextInt(3);
         final int grp2Backups = ThreadLocalRandom.current().nextInt(3);
 
+        log.info("Start test [grp1Backups=" + grp1Backups + ", grp2Backups=" + 
grp2Backups + ']');
+
         for (int i = 0; i < CACHES; i++) {
             srv0.createCache(
                 cacheConfiguration(GROUP1, GROUP1 + "-" + i, PARTITIONED, 
ATOMIC, grp1Backups, i % 2 == 0));
@@ -758,7 +762,7 @@ public class IgniteCacheGroupsTest extends 
GridCommonAbstractTest {
                 catch (Exception e) {
                     err.set(true);
 
-                    log.error("Unexpected error: " + e, e);
+                    log.error("Unexpected error(1): " + e, e);
 
                     stop.set(true);
                 }
@@ -768,6 +772,8 @@ public class IgniteCacheGroupsTest extends 
GridCommonAbstractTest {
         IgniteInternalFuture cacheFut = GridTestUtils.runAsync(new Runnable() {
             @Override public void run() {
                 try {
+                    int cntr = 0;
+
                     while (!stop.get()) {
                         ThreadLocalRandom rnd = ThreadLocalRandom.current();
 
@@ -787,7 +793,7 @@ public class IgniteCacheGroupsTest extends 
GridCommonAbstractTest {
 
                         log.info("Create cache [node=" + node.name() + ", 
grp=" + grp + ']');
 
-                        IgniteCache cache = 
node.createCache(cacheConfiguration(grp, "tmpCache",
+                        IgniteCache cache = 
node.createCache(cacheConfiguration(grp, "tmpCache-" + cntr++,
                             PARTITIONED,
                             rnd.nextBoolean() ? ATOMIC : TRANSACTIONAL,
                             backups,
@@ -804,15 +810,15 @@ public class IgniteCacheGroupsTest extends 
GridCommonAbstractTest {
                 catch (Exception e) {
                     err.set(true);
 
-                    log.error("Unexpected error: " + e, e);
+                    log.error("Unexpected error(2): " + e, e);
 
                     stop.set(true);
                 }
             }
-        }, "cache-thread");
+        }, "cache-destroy-thread");
 
         try {
-            U.sleep(10_000);
+            U.sleep(30_000);
         }
         finally {
             stop.set(true);
@@ -866,7 +872,27 @@ public class IgniteCacheGroupsTest extends 
GridCommonAbstractTest {
     private void cacheOperation(ThreadLocalRandom rnd, IgniteCache cache) {
         Object key = rnd.nextInt(1000);
 
-        cache.put(key, 1);
+        switch (rnd.nextInt(4)) {
+            case 0:
+                cache.put(key, 1);
+
+                break;
+
+            case 1:
+                cache.get(key);
+
+                break;
+
+            case 2:
+                cache.remove(key);
+
+                break;
+
+            case 3:
+                cache.localPeek(key);
+
+                break;
+        }
     }
 
     /**

Reply via email to