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();

Reply via email to