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; + } } /**
