Repository: incubator-ignite Updated Branches: refs/heads/ignite-929 bb3f4b535 -> 7abb6b7b1
ignite-929 Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/7abb6b7b Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/7abb6b7b Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/7abb6b7b Branch: refs/heads/ignite-929 Commit: 7abb6b7b161536b3c610eca4a2d8842deae9b6d0 Parents: bb3f4b5 Author: avinogradov <avinogra...@gridgain.com> Authored: Thu Jun 11 13:16:29 2015 +0300 Committer: avinogradov <avinogra...@gridgain.com> Committed: Thu Jun 11 13:16:29 2015 +0300 ---------------------------------------------------------------------- .../processors/cache/GridCacheGateway.java | 28 +++----- .../processors/cache/GridCacheProcessor.java | 12 ++-- .../processors/cache/IgniteCacheProxy.java | 8 +-- .../cache/CacheStopAndDestroySelfTest.java | 74 ++++++++++++++------ 4 files changed, 74 insertions(+), 48 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7abb6b7b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheGateway.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheGateway.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheGateway.java index 5170c6d..d239d94 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheGateway.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/GridCacheGateway.java @@ -17,16 +17,12 @@ package org.apache.ignite.internal.processors.cache; -import org.apache.ignite.IgniteCheckedException; -import org.apache.ignite.IgniteException; -import org.apache.ignite.internal.IgniteInterruptedCheckedException; -import org.apache.ignite.internal.util.GridSpinReadWriteLock; -import org.apache.ignite.internal.util.tostring.GridToStringExclude; -import org.apache.ignite.internal.util.typedef.internal.CU; -import org.apache.ignite.internal.util.typedef.internal.U; -import org.jetbrains.annotations.Nullable; - -import java.util.concurrent.atomic.AtomicInteger; +import org.apache.ignite.*; +import org.apache.ignite.internal.*; +import org.apache.ignite.internal.util.*; +import org.apache.ignite.internal.util.tostring.*; +import org.apache.ignite.internal.util.typedef.internal.*; +import org.jetbrains.annotations.*; /** * Cache gateway. @@ -39,8 +35,8 @@ public class GridCacheGateway<K, V> { /** Stopped flag for dynamic caches. */ private volatile boolean stopped; - /** Client counter. */ - private final AtomicInteger clients = new AtomicInteger(0); + /** Closed flag for dynamic caches. */ + private final ThreadLocal<Boolean> closed = new ThreadLocal<>(); /** */ private GridSpinReadWriteLock rwLock = new GridSpinReadWriteLock(); @@ -157,7 +153,7 @@ public class GridCacheGateway<K, V> { throw new IllegalStateException("Cache has been stopped: " + ctx.name()); } - if (clients.get() <= 0) { + if (closed.get()) { rwLock.readUnlock(); throw new IllegalStateException("Cache has been closed: " + ctx.name()); @@ -244,22 +240,20 @@ public class GridCacheGateway<K, V> { */ public void block() { stopped = true; - - clients.decrementAndGet(); } /** * */ public void open() { - clients.incrementAndGet(); + closed.set(false); } /** * */ public void close() { - clients.decrementAndGet(); + closed.set(true); } /** http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7abb6b7b/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 5415b22..13c0034 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 @@ -1983,17 +1983,17 @@ public class GridCacheProcessor extends GridProcessorAdapter { * @return Future that will be completed when cache is stopped. */ public IgniteInternalFuture<?> dynamicCloseCache(String cacheName) { + IgniteCacheProxy<?, ?> proxy = jCacheProxies.get(maskNull(cacheName)); + + // Closing gateway first. + if (proxy != null) + proxy.gate().close(); + CacheConfiguration cfg = ctx.cache().cacheConfiguration(cacheName); if (cfg.getCacheMode() == LOCAL) return dynamicDestroyCache(cacheName); else { - IgniteCacheProxy<?, ?> proxy = jCacheProxies.get(maskNull(cacheName)); - - // Closing gateway first. - if (proxy != null) - proxy.gate().close(); - GridCacheAdapter<?, ?> cache = caches.get(maskNull(cacheName)); if (cache != null && !cache.context().affinityNode()) { http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7abb6b7b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java index f3240d9..54a7f86 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/cache/IgniteCacheProxy.java @@ -1354,7 +1354,7 @@ public class IgniteCacheProxy<K, V> extends AsyncSupportAdapter<IgniteCache<K, V /** {@inheritDoc} */ @Override public void destroy() { - if (!onEnterIfNoClose()) + if (!onEnterIfNoStop()) return; IgniteInternalFuture<?> fut; @@ -1376,7 +1376,7 @@ public class IgniteCacheProxy<K, V> extends AsyncSupportAdapter<IgniteCache<K, V /** {@inheritDoc} */ @Override public void close() { - if (!onEnterIfNoClose()) + if (!onEnterIfNoStop()) return; IgniteInternalFuture<?> fut; @@ -1398,7 +1398,7 @@ public class IgniteCacheProxy<K, V> extends AsyncSupportAdapter<IgniteCache<K, V /** {@inheritDoc} */ @Override public boolean isClosed() { - if (!onEnterIfNoClose()) + if (!onEnterIfNoStop()) return true; try { @@ -1586,7 +1586,7 @@ public class IgniteCacheProxy<K, V> extends AsyncSupportAdapter<IgniteCache<K, V * * @return {@code True} if enter successful. */ - private boolean onEnterIfNoClose() { + private boolean onEnterIfNoStop() { if (lock) return gate.enterIfNotStopped(); else http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7abb6b7b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheStopAndDestroySelfTest.java ---------------------------------------------------------------------- diff --git a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheStopAndDestroySelfTest.java b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheStopAndDestroySelfTest.java index 9913df9..5c9fa12 100644 --- a/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheStopAndDestroySelfTest.java +++ b/modules/core/src/test/java/org/apache/ignite/internal/processors/cache/CacheStopAndDestroySelfTest.java @@ -17,27 +17,29 @@ package org.apache.ignite.internal.processors.cache; -import org.apache.ignite.IgniteCache; -import org.apache.ignite.cache.CacheMode; -import org.apache.ignite.cluster.ClusterNode; -import org.apache.ignite.configuration.CacheConfiguration; -import org.apache.ignite.configuration.IgniteConfiguration; -import org.apache.ignite.configuration.NearCacheConfiguration; -import org.apache.ignite.internal.IgniteInterruptedCheckedException; -import org.apache.ignite.internal.managers.communication.GridIoMessage; -import org.apache.ignite.internal.processors.cache.distributed.dht.GridDhtTxPrepareRequest; -import org.apache.ignite.internal.util.typedef.internal.U; -import org.apache.ignite.plugin.extensions.communication.Message; -import org.apache.ignite.spi.IgniteSpiException; -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; -import org.apache.ignite.testframework.GridTestUtils; -import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest; - -import java.util.UUID; -import java.util.concurrent.atomic.AtomicInteger; +import org.apache.ignite.*; +import org.apache.ignite.cache.*; +import org.apache.ignite.cluster.*; +import org.apache.ignite.configuration.*; +import org.apache.ignite.internal.*; +import org.apache.ignite.internal.managers.communication.*; +import org.apache.ignite.internal.processors.cache.distributed.dht.*; +import org.apache.ignite.internal.util.typedef.internal.*; +import org.apache.ignite.plugin.extensions.communication.*; +import org.apache.ignite.spi.*; +import org.apache.ignite.spi.communication.tcp.*; +import org.apache.ignite.spi.discovery.tcp.*; +import org.apache.ignite.spi.discovery.tcp.ipfinder.*; +import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.*; +import org.apache.ignite.testframework.*; +import org.apache.ignite.testframework.junits.common.*; +import org.jsr107.tck.processor.*; + +import javax.cache.*; +import javax.cache.CacheManager; +import javax.cache.configuration.*; +import java.util.*; +import java.util.concurrent.atomic.*; /** * Checks stop and destroy methods behavior. @@ -794,6 +796,10 @@ public class CacheStopAndDestroySelfTest extends GridCommonAbstractTest { } } + /** + * @param a AtomicInteger. + * @param node Node. + */ public void closeWithTry(AtomicInteger a, int node) { while (!stop) { try (IgniteCache<String, String> cache = grid(node).getOrCreateCache(getDhtConfig())) { @@ -808,6 +814,32 @@ public class CacheStopAndDestroySelfTest extends GridCommonAbstractTest { } } + /** + * Tests start -> destroy -> start -> close using CacheManager. + */ + public void testTckStyleCreateDestroyClose() { + CacheManager mgr = Caching.getCachingProvider().getCacheManager(); + + String cacheName = "cache"; + + mgr.createCache(cacheName, new MutableConfiguration<Integer, String>().setTypes(Integer.class, String.class)); + + mgr.destroyCache(cacheName); + + Cache cache = mgr.createCache(cacheName, new MutableConfiguration<Integer, String>().setTypes(Integer.class, String.class)); + + cache.close(); + + try { + cache.invoke(123, new ThrowExceptionEntryProcessor<Integer, String, Void>(UnsupportedOperationException.class)); + assert false; + } + catch (IllegalStateException e) { + // No-op; + } + + } + /** {@inheritDoc} */ @Override protected void beforeTest() throws Exception { super.beforeTest();