You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by je...@apache.org on 2015/12/21 19:05:02 UTC

[34/50] [abbrv] incubator-geode git commit: GEODE-669 Add CacheObserver for ShutdownAll

GEODE-669
Add CacheObserver for ShutdownAll

Let GatewayReceiverCommand to throw CacheClosedException instead of
RegionDestroyedException when ShutdownAll happened.


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

Branch: refs/heads/feature/GEODE-14
Commit: ae2d529405f28caa0ab9fc1a3d309ebddbda4920
Parents: 0b288a2
Author: zhouxh <gz...@pivotal.io>
Authored: Tue Dec 15 11:21:32 2015 -0800
Committer: zhouxh <gz...@pivotal.io>
Committed: Tue Dec 15 11:22:56 2015 -0800

----------------------------------------------------------------------
 .../gemfire/internal/cache/CacheObserver.java   |  5 ++++
 .../internal/cache/CacheObserverAdapter.java    |  4 ++++
 .../internal/cache/GemFireCacheImpl.java        |  7 ++++++
 .../sockets/command/GatewayReceiverCommand.java | 24 +++++++++++++-------
 4 files changed, 32 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/ae2d5294/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheObserver.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheObserver.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheObserver.java
index 9cd6c28..6b18d86 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheObserver.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheObserver.java
@@ -183,4 +183,9 @@ public interface CacheObserver
    */
   public void beforeDeletingEmptyOplog(Oplog emptyOplog);
   
+  /**
+   * Invoked just before ShutdownAll operation
+   * @param emptyOplog
+   */
+  void beforeShutdownAll();
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/ae2d5294/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheObserverAdapter.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheObserverAdapter.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheObserverAdapter.java
index 82c4507..ef66739 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheObserverAdapter.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/CacheObserverAdapter.java
@@ -147,4 +147,8 @@ public class CacheObserverAdapter implements CacheObserver {
   public void beforeDeletingEmptyOplog(Oplog emptyOplog)
   {
   }
+  
+  @Override
+  public void beforeShutdownAll() {
+  }
 }

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/ae2d5294/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/GemFireCacheImpl.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/GemFireCacheImpl.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/GemFireCacheImpl.java
index 27bb813..506bd7a 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/GemFireCacheImpl.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/GemFireCacheImpl.java
@@ -1639,6 +1639,13 @@ public class GemFireCacheImpl implements InternalCache, ClientCache, HasCachePer
       // it's already doing shutdown by another thread
       return;
     }
+    if (LocalRegion.ISSUE_CALLBACKS_TO_CACHE_OBSERVER) {
+      try {
+        CacheObserverHolder.getInstance().beforeShutdownAll();
+      } finally {
+        LocalRegion.ISSUE_CALLBACKS_TO_CACHE_OBSERVER = false;
+      }
+    }
     this.isShutDownAll = true;
 
     // bug 44031 requires multithread shutdownall should be grouped

http://git-wip-us.apache.org/repos/asf/incubator-geode/blob/ae2d5294/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GatewayReceiverCommand.java
----------------------------------------------------------------------
diff --git a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GatewayReceiverCommand.java b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GatewayReceiverCommand.java
index 6d252e4..e2fb686 100644
--- a/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GatewayReceiverCommand.java
+++ b/gemfire-core/src/main/java/com/gemstone/gemfire/internal/cache/tier/sockets/command/GatewayReceiverCommand.java
@@ -24,6 +24,7 @@ import java.util.ArrayList;
 import java.util.List;
 
 import com.gemstone.gemfire.CancelException;
+import com.gemstone.gemfire.cache.CacheClosedException;
 import com.gemstone.gemfire.cache.EntryNotFoundException;
 import com.gemstone.gemfire.cache.RegionDestroyedException;
 import com.gemstone.gemfire.cache.operations.DestroyOperationContext;
@@ -36,6 +37,7 @@ import com.gemstone.gemfire.i18n.LogWriterI18n;
 import com.gemstone.gemfire.internal.Version;
 import com.gemstone.gemfire.internal.cache.EntryEventImpl;
 import com.gemstone.gemfire.internal.cache.EventID;
+import com.gemstone.gemfire.internal.cache.GemFireCacheImpl;
 import com.gemstone.gemfire.internal.cache.KeyWithRegionContext;
 import com.gemstone.gemfire.internal.cache.LocalRegion;
 import com.gemstone.gemfire.internal.cache.tier.CachedRegionHelper;
@@ -67,6 +69,16 @@ public class GatewayReceiverCommand extends BaseCommand {
   private GatewayReceiverCommand() {
   }
 
+  private void handleRegionNull(ServerConnection servConn, String regionName, int batchId) {
+    GemFireCacheImpl gfc = (GemFireCacheImpl)servConn.getCachedRegionHelper().getCache();
+    if (gfc != null && gfc.isCacheAtShutdownAll()) {
+      throw new CacheClosedException("Shutdown occurred during message processing");
+    } else {
+      String reason = LocalizedStrings.ProcessBatch_WAS_NOT_FOUND_DURING_BATCH_CREATE_REQUEST_0.toLocalizedString(new Object[] {regionName, Integer.valueOf(batchId)});
+      throw new RegionDestroyedException(reason, regionName);
+    }
+  }
+  
   @Override
   public void cmdExecute(Message msg, ServerConnection servConn, long start)
       throws IOException, InterruptedException {
@@ -292,8 +304,7 @@ public class GatewayReceiverCommand extends BaseCommand {
           }
           region = (LocalRegion)crHelper.getRegion(regionName);
           if (region == null) {
-            String reason = LocalizedStrings.ProcessBatch_WAS_NOT_FOUND_DURING_BATCH_CREATE_REQUEST_0.toLocalizedString(new Object[] {regionName, Integer.valueOf(batchId)});
-            throw new RegionDestroyedException(reason, regionName);
+            handleRegionNull(servConn, regionName, batchId);
           } else {
             clientEvent = new EntryEventImpl(eventId);
             if (versionTimeStamp > 0) {
@@ -402,8 +413,7 @@ public class GatewayReceiverCommand extends BaseCommand {
           }
           region = (LocalRegion)crHelper.getRegion(regionName);
           if (region == null) {
-            String reason = LocalizedStrings.ProcessBatch_WAS_NOT_FOUND_DURING_BATCH_CREATE_REQUEST_0.toLocalizedString(new Object[] {regionName, Integer.valueOf(batchId)});
-            throw new RegionDestroyedException(reason, regionName);
+            handleRegionNull(servConn, regionName, batchId);
           } else {
             clientEvent = new EntryEventImpl(eventId);
             if (versionTimeStamp > 0) {
@@ -502,8 +512,7 @@ public class GatewayReceiverCommand extends BaseCommand {
           }
           region = (LocalRegion)crHelper.getRegion(regionName);
           if (region == null) {
-            String reason = LocalizedStrings.ProcessBatch_WAS_NOT_FOUND_DURING_BATCH_CREATE_REQUEST_0.toLocalizedString(new Object[] {regionName, Integer.valueOf(batchId)});
-            throw new RegionDestroyedException(reason, regionName);
+            handleRegionNull(servConn, regionName, batchId);
           } else {
             clientEvent = new EntryEventImpl(eventId);
             if (versionTimeStamp > 0) {
@@ -584,8 +593,7 @@ public class GatewayReceiverCommand extends BaseCommand {
             region = (LocalRegion)crHelper.getRegion(regionName);
             
             if (region == null) {
-              String reason = LocalizedStrings.ProcessBatch_WAS_NOT_FOUND_DURING_BATCH_UPDATE_VERSION_REQUEST_0.toLocalizedString(new Object[] {regionName});
-              throw new RegionDestroyedException(reason, regionName);
+              handleRegionNull(servConn, regionName, batchId);
             } else {
 
               clientEvent = new EntryEventImpl(eventId);