You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by bs...@apache.org on 2018/11/20 23:45:36 UTC

[geode] branch develop updated: GEODE-5076 jmx client should not access or modify internal regions

This is an automated email from the ASF dual-hosted git repository.

bschuchardt pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/develop by this push:
     new ed28310  GEODE-5076 jmx client should not access or modify internal regions
ed28310 is described below

commit ed28310be814268fca72e92ebe5dd16e2f54da9a
Author: Bruce Schuchardt <bs...@pivotal.io>
AuthorDate: Tue Nov 20 15:44:33 2018 -0800

    GEODE-5076 jmx client should not access or modify internal regions
    
    Modified the management packages to use a filtered cache that doesn't
    allow users access to internal regions.
    
    This closes #2866
---
 .../geode/internal/cache/GemFireCacheImpl.java     |  6 ++++--
 .../apache/geode/internal/cache/InternalCache.java |  2 +-
 .../cache/InternalCacheForClientAccess.java        | 22 +++++++++++++++-------
 .../internal/cache/xmlcache/CacheCreation.java     |  3 ++-
 .../apache/geode/management/ManagementService.java |  3 ++-
 .../apache/geode/management/cli/GfshCommand.java   |  5 ++++-
 .../management/internal/BaseManagementService.java |  5 +++--
 .../management/internal/FederatingManager.java     |  9 +++++----
 .../management/internal/JmxManagerAdvisee.java     |  6 +++---
 .../management/internal/JmxManagerLocator.java     | 12 ++++++------
 .../geode/management/internal/LocalManager.java    |  4 ++--
 .../geode/management/internal/ManagementAgent.java | 13 +++++++++++--
 .../management/internal/ManagementFunction.java    |  3 +--
 .../apache/geode/management/internal/Manager.java  |  5 +++--
 .../internal/SystemManagementService.java          |  8 +++++---
 .../management/internal/beans/BeanUtilFuncs.java   |  4 ++--
 .../internal/beans/CacheServerBridge.java          |  3 ---
 .../internal/beans/QueryDataFunction.java          | 18 ++++++------------
 .../cli/functions/DataCommandFunction.java         |  3 ++-
 .../cli/functions/DestroyIndexFunction.java        |  3 ++-
 .../internal/cli/functions/ExportDataFunction.java |  3 ++-
 .../internal/cli/functions/ExportLogsFunction.java | 10 +++++++---
 .../functions/GetRegionDescriptionFunction.java    |  3 ++-
 .../internal/cli/functions/ImportDataFunction.java |  4 +++-
 .../cli/functions/RegionAlterFunction.java         |  3 ++-
 .../cli/functions/RegionCreateFunction.java        |  3 ++-
 .../cli/functions/RegionDestroyFunction.java       |  3 ++-
 .../cli/functions/UserFunctionExecution.java       |  2 +-
 .../internal/cli/modes/CommandModes.java           | 11 +++++------
 .../internal/configuration/domain/XmlEntity.java   |  3 ++-
 .../functions/GetRegionNamesFunction.java          |  3 +--
 .../cli/commands/ExportLogsCommandTest.java        |  8 ++++++++
 .../cli/functions/RegionDestroyFunctionTest.java   | 10 +++++++---
 .../security/GfshCommandsSecurityTestBase.java     | 12 +++++++++++-
 .../web/controllers/CommonCrudController.java      |  6 ++----
 35 files changed, 136 insertions(+), 85 deletions(-)

diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java
index ce0195e..311a92c 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/GemFireCacheImpl.java
@@ -265,6 +265,7 @@ public class GemFireCacheImpl implements InternalCache, InternalClientCache, Has
   public static final boolean DEFAULT_COPY_ON_READ = false;
 
   /**
+   * getcachefor
    * The default amount of time to wait for a {@code netSearch} to complete
    */
   public static final int DEFAULT_SEARCH_TIMEOUT =
@@ -921,7 +922,8 @@ public class GemFireCacheImpl implements InternalCache, InternalClientCache, Has
       this.resourceAdvisor = ResourceAdvisor.createResourceAdvisor(this);
 
       // Initialize the advisor here, but wait to exchange profiles until cache is fully built
-      this.jmxAdvisor = JmxManagerAdvisor.createJmxManagerAdvisor(new JmxManagerAdvisee(this));
+      this.jmxAdvisor = JmxManagerAdvisor
+          .createJmxManagerAdvisor(new JmxManagerAdvisee(getCacheForProcessingClientRequests()));
 
       this.resourceManager = InternalResourceManager.createResourceManager(this);
       this.serialNumber = DistributionAdvisor.createSerialNumber();
@@ -5329,7 +5331,7 @@ public class GemFireCacheImpl implements InternalCache, InternalClientCache, Has
       new InternalCacheForClientAccess(this);
 
   @Override
-  public InternalCache getCacheForProcessingClientRequests() {
+  public InternalCacheForClientAccess getCacheForProcessingClientRequests() {
     return cacheForClients;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/InternalCache.java b/geode-core/src/main/java/org/apache/geode/internal/cache/InternalCache.java
index 0f97fbf..d44f7ca 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/InternalCache.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/InternalCache.java
@@ -367,5 +367,5 @@ public interface InternalCache extends Cache, Extensible<Cache>, CacheTime {
    * application visible regions. Any regions created internally
    * by Geode will not be accessible from the returned cache.
    */
-  InternalCache getCacheForProcessingClientRequests();
+  InternalCacheForClientAccess getCacheForProcessingClientRequests();
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/InternalCacheForClientAccess.java b/geode-core/src/main/java/org/apache/geode/internal/cache/InternalCacheForClientAccess.java
index 0b5bc81..976d591 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/InternalCacheForClientAccess.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/InternalCacheForClientAccess.java
@@ -138,14 +138,12 @@ public class InternalCacheForClientAccess implements InternalCache {
   }
 
   /**
-   * Server-side code using an InternalCacheForClientAccess may need to
-   * get an Internal Region not normally accesible and may use this method to
-   * do so. The REST API, for instance, needs to get at a Query store
-   * region that is not otherwise accessible through the getRegion methods.
+   * This method can be used to locate an internal region.
+   * It should not be invoked with a region name obtained
+   * from a client.
    */
   public <K, V> Region<K, V> getInternalRegion(String path) {
-    Region<K, V> result = delegate.getRegion(path);
-    return result;
+    return delegate.getRegion(path);
   }
 
   @Override
@@ -228,6 +226,16 @@ public class InternalCacheForClientAccess implements InternalCache {
     return delegate.createVMRegion(name, p_attrs, internalRegionArgs);
   }
 
+  /**
+   * This method allows server-side code to create an internal region. It should
+   * not be invoked with a region name obtained from a client.
+   */
+  public <K, V> Region<K, V> createInternalRegion(String name, RegionAttributes<K, V> p_attrs,
+      InternalRegionArguments internalRegionArgs)
+      throws RegionExistsException, TimeoutException, IOException, ClassNotFoundException {
+    return delegate.createVMRegion(name, p_attrs, internalRegionArgs);
+  }
+
   @Override
   public Cache getReconnectedCache() {
     Cache reconnectedCache = delegate.getReconnectedCache();
@@ -1201,7 +1209,7 @@ public class InternalCacheForClientAccess implements InternalCache {
   }
 
   @Override
-  public InternalCache getCacheForProcessingClientRequests() {
+  public InternalCacheForClientAccess getCacheForProcessingClientRequests() {
     return this;
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/xmlcache/CacheCreation.java b/geode-core/src/main/java/org/apache/geode/internal/cache/xmlcache/CacheCreation.java
index 2ee6126..9e9f9ed 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/xmlcache/CacheCreation.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/xmlcache/CacheCreation.java
@@ -119,6 +119,7 @@ import org.apache.geode.internal.cache.FilterProfile;
 import org.apache.geode.internal.cache.GemFireCacheImpl;
 import org.apache.geode.internal.cache.InitialImageOperation;
 import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.cache.InternalCacheForClientAccess;
 import org.apache.geode.internal.cache.InternalRegion;
 import org.apache.geode.internal.cache.InternalRegionArguments;
 import org.apache.geode.internal.cache.LocalRegion;
@@ -2407,7 +2408,7 @@ public class CacheCreation implements InternalCache {
   }
 
   @Override
-  public InternalCache getCacheForProcessingClientRequests() {
+  public InternalCacheForClientAccess getCacheForProcessingClientRequests() {
     throw new UnsupportedOperationException("Should not be invoked");
   }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/management/ManagementService.java b/geode-core/src/main/java/org/apache/geode/management/ManagementService.java
index eb2e808..d99961d 100755
--- a/geode-core/src/main/java/org/apache/geode/management/ManagementService.java
+++ b/geode-core/src/main/java/org/apache/geode/management/ManagementService.java
@@ -38,7 +38,8 @@ public abstract class ManagementService {
    * @param cache Cache for which to get the management service.
    */
   public static ManagementService getManagementService(Cache cache) {
-    return BaseManagementService.getManagementService((InternalCache) cache);
+    return BaseManagementService
+        .getManagementService(((InternalCache) cache).getCacheForProcessingClientRequests());
   }
 
   /**
diff --git a/geode-core/src/main/java/org/apache/geode/management/cli/GfshCommand.java b/geode-core/src/main/java/org/apache/geode/management/cli/GfshCommand.java
index c3f0665..bc5103b 100644
--- a/geode-core/src/main/java/org/apache/geode/management/cli/GfshCommand.java
+++ b/geode-core/src/main/java/org/apache/geode/management/cli/GfshCommand.java
@@ -76,7 +76,10 @@ public abstract class GfshCommand implements CommandMarker {
   }
 
   public Cache getCache() {
-    return cache;
+    if (cache == null) {
+      return null;
+    }
+    return cache.getCacheForProcessingClientRequests();
   }
 
   public <T extends ManagementService> T getManagementService() {
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/BaseManagementService.java b/geode-core/src/main/java/org/apache/geode/management/internal/BaseManagementService.java
index bd9e584..4f9ebcf 100755
--- a/geode-core/src/main/java/org/apache/geode/management/internal/BaseManagementService.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/BaseManagementService.java
@@ -24,6 +24,7 @@ import org.apache.logging.log4j.Logger;
 import org.apache.geode.distributed.DistributedSystemDisconnectedException;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.cache.InternalCacheForClientAccess;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.management.ManagementService;
 
@@ -69,7 +70,7 @@ public abstract class BaseManagementService extends ManagementService {
    *
    * @param cache defines the scope of resources to be managed
    */
-  public static ManagementService getManagementService(InternalCache cache) {
+  public static ManagementService getManagementService(InternalCacheForClientAccess cache) {
     synchronized (instances) {
       BaseManagementService service = instances.get(cache);
       if (service == null) {
@@ -83,7 +84,7 @@ public abstract class BaseManagementService extends ManagementService {
 
   public static ManagementService getExistingManagementService(InternalCache cache) {
     synchronized (instances) {
-      BaseManagementService service = (BaseManagementService) instances.get(cache);
+      BaseManagementService service = instances.get(cache.getCacheForProcessingClientRequests());
       return service;
     }
   }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/FederatingManager.java b/geode-core/src/main/java/org/apache/geode/management/internal/FederatingManager.java
index 8b231ad..801dd6b 100755
--- a/geode-core/src/main/java/org/apache/geode/management/internal/FederatingManager.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/FederatingManager.java
@@ -357,8 +357,9 @@ public class FederatingManager extends Manager {
         String monitoringRegionName = ManagementConstants.MONITORING_REGION + "_" + appender;
         String notificationRegionName = ManagementConstants.NOTIFICATION_REGION + "_" + appender;
 
-        if (cache.getRegion(monitoringRegionName) != null
-            && cache.getRegion(notificationRegionName) != null) {
+
+        if (cache.getInternalRegion(monitoringRegionName) != null
+            && cache.getInternalRegion(notificationRegionName) != null) {
           return member;
         }
 
@@ -415,7 +416,7 @@ public class FederatingManager extends Manager {
                 return null;
               }
               proxyMonitoringRegion =
-                  cache.createVMRegion(monitoringRegionName, monitoringRegionAttrs,
+                  cache.createInternalRegion(monitoringRegionName, monitoringRegionAttrs,
                       internalRegionArguments);
               proxyMonitoringRegionCreated = true;
 
@@ -434,7 +435,7 @@ public class FederatingManager extends Manager {
                 return null;
               }
               proxyNotificationRegion =
-                  cache.createVMRegion(notificationRegionName, notifRegionAttrs,
+                  cache.createInternalRegion(notificationRegionName, notifRegionAttrs,
                       internalRegionArguments);
               proxyNotificationRegionCreated = true;
             } catch (TimeoutException | RegionExistsException | IOException
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerAdvisee.java b/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerAdvisee.java
index 7f250ef..14a1149 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerAdvisee.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerAdvisee.java
@@ -24,7 +24,7 @@ import org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.distributed.internal.DistributionManager;
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.internal.admin.SSLConfig;
-import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.cache.InternalCacheForClientAccess;
 import org.apache.geode.internal.net.SSLConfigurationFactory;
 import org.apache.geode.internal.net.SocketCreator;
 import org.apache.geode.internal.security.SecurableCommunicationChannel;
@@ -37,10 +37,10 @@ import org.apache.geode.management.internal.JmxManagerAdvisor.JmxManagerProfile;
 public class JmxManagerAdvisee implements DistributionAdvisee {
 
   private final int serialNumber;
-  private final InternalCache cache;
+  private final InternalCacheForClientAccess cache;
   private JmxManagerProfile myMostRecentProfile;
 
-  public JmxManagerAdvisee(InternalCache cache) {
+  public JmxManagerAdvisee(InternalCacheForClientAccess cache) {
     this.serialNumber = DistributionAdvisor.createSerialNumber();
     this.cache = cache;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerLocator.java b/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerLocator.java
index a0c0202..f662e6d 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerLocator.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/JmxManagerLocator.java
@@ -21,8 +21,6 @@ import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.CancelException;
 import org.apache.geode.SystemFailure;
-import org.apache.geode.cache.Cache;
-import org.apache.geode.cache.CacheFactory;
 import org.apache.geode.cache.GemFireCache;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.execute.FunctionService;
@@ -32,6 +30,7 @@ import org.apache.geode.distributed.internal.membership.InternalDistributedMembe
 import org.apache.geode.distributed.internal.tcpserver.TcpHandler;
 import org.apache.geode.distributed.internal.tcpserver.TcpServer;
 import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.cache.InternalCacheForClientAccess;
 import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.management.AlreadyRunningException;
@@ -41,10 +40,10 @@ import org.apache.geode.management.internal.JmxManagerAdvisor.JmxManagerProfile;
 public class JmxManagerLocator implements TcpHandler {
   private static final Logger logger = LogService.getLogger();
 
-  private InternalCache cache;
+  private InternalCacheForClientAccess cache;
 
   public JmxManagerLocator(InternalCache internalCache) {
-    this.cache = internalCache;
+    this.cache = internalCache.getCacheForProcessingClientRequests();
   }
 
   @Override
@@ -71,7 +70,7 @@ public class JmxManagerLocator implements TcpHandler {
   @Override
   public void restarting(DistributedSystem ds, GemFireCache cache,
       InternalConfigurationPersistenceService sharedConfig) {
-    this.cache = (InternalCache) cache;
+    this.cache = ((InternalCache) cache).getCacheForProcessingClientRequests();
   }
 
   @Override
@@ -203,7 +202,8 @@ public class JmxManagerLocator implements TcpHandler {
     @Override
     public void execute(FunctionContext context) {
       try {
-        Cache cache = CacheFactory.getAnyInstance();
+        InternalCache cache =
+            ((InternalCache) context.getCache()).getCacheForProcessingClientRequests();
         if (cache != null) {
           ManagementService ms = ManagementService.getExistingManagementService(cache);
           if (ms != null) {
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/LocalManager.java b/geode-core/src/main/java/org/apache/geode/management/internal/LocalManager.java
index 95f656d..c36479e 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/LocalManager.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/LocalManager.java
@@ -151,7 +151,7 @@ public class LocalManager extends Manager {
 
         try {
           repo.setLocalMonitoringRegion(
-              cache.createVMRegion(ManagementConstants.MONITORING_REGION + "_" + appender,
+              cache.createInternalRegion(ManagementConstants.MONITORING_REGION + "_" + appender,
                   monitoringRegionAttrs, internalArgs));
           monitoringRegionCreated = true;
 
@@ -167,7 +167,7 @@ public class LocalManager extends Manager {
 
         try {
           repo.setLocalNotificationRegion(
-              cache.createVMRegion(ManagementConstants.NOTIFICATION_REGION + "_" + appender,
+              cache.createInternalRegion(ManagementConstants.NOTIFICATION_REGION + "_" + appender,
                   notifRegionAttrs, internalArgs));
           notifRegionCreated = true;
         } catch (TimeoutException e) {
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/ManagementAgent.java b/geode-core/src/main/java/org/apache/geode/management/internal/ManagementAgent.java
index 31737fe..ddd60a9 100755
--- a/geode-core/src/main/java/org/apache/geode/management/internal/ManagementAgent.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/ManagementAgent.java
@@ -55,6 +55,7 @@ import org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.internal.GemFireVersion;
 import org.apache.geode.internal.admin.SSLConfig;
 import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.cache.InternalCacheForClientAccess;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.internal.net.SSLConfigurationFactory;
 import org.apache.geode.internal.net.SocketCreator;
@@ -142,6 +143,14 @@ public class ManagementAgent {
         && !cache.isClient());
   }
 
+  public static InternalCacheForClientAccess getCache() {
+    InternalCache cache = (InternalCache) CacheFactory.getAnyInstance();
+    if (cache != null) {
+      return cache.getCacheForProcessingClientRequests();
+    }
+    return null;
+  }
+
   public synchronized void startAgent(InternalCache cache) {
     // Do not start Management REST service if developer REST service is already
     // started.
@@ -191,7 +200,7 @@ public class ManagementAgent {
 
   private void startHttpService(boolean isServer) {
     final SystemManagementService managementService = (SystemManagementService) ManagementService
-        .getManagementService(CacheFactory.getAnyInstance());
+        .getManagementService(getCache());
 
     final ManagerMXBean managerBean = managementService.getManagerMXBean();
 
@@ -305,7 +314,7 @@ public class ManagementAgent {
 
           // set cache property for developer REST service running
           if (isRestWebAppAdded) {
-            InternalCache cache = (InternalCache) CacheFactory.getAnyInstance();
+            InternalCache cache = getCache();
             cache.setRESTServiceRunning(true);
 
             // create region to hold query information (queryId, queryString).
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/ManagementFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/ManagementFunction.java
index aae18fc..35a1553 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/ManagementFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/ManagementFunction.java
@@ -24,7 +24,6 @@ import javax.management.ObjectName;
 import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.cache.execute.FunctionContext;
-import org.apache.geode.internal.cache.GemFireCacheImpl;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.logging.LogService;
@@ -72,7 +71,7 @@ public class ManagementFunction implements InternalFunction {
 
     boolean executedSuccessfully = false;
 
-    InternalCache cache = GemFireCacheImpl.getInstance();
+    InternalCache cache = ((InternalCache) fc.getCache()).getCacheForProcessingClientRequests();
 
     Object[] functionArguments = (Object[]) fc.getArguments();
 
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/Manager.java b/geode-core/src/main/java/org/apache/geode/management/internal/Manager.java
index 916cbd7..20ea590 100755
--- a/geode-core/src/main/java/org/apache/geode/management/internal/Manager.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/Manager.java
@@ -16,6 +16,7 @@ package org.apache.geode.management.internal;
 
 import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.cache.InternalCacheForClientAccess;
 
 /**
  * The Manager is a 7.0 JMX Agent which is hosted within a GemFire process. Only one instance is
@@ -26,7 +27,7 @@ import org.apache.geode.internal.cache.InternalCache;
  */
 public abstract class Manager {
 
-  protected InternalCache cache;
+  protected InternalCacheForClientAccess cache;
 
   /**
    * depicts whether this node is a Managing node or not
@@ -51,7 +52,7 @@ public abstract class Manager {
   public Manager(ManagementResourceRepo repo, InternalDistributedSystem system,
       InternalCache cache) {
     this.repo = repo;
-    this.cache = cache;
+    this.cache = cache.getCacheForProcessingClientRequests();
     this.system = system;
   }
 
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/SystemManagementService.java b/geode-core/src/main/java/org/apache/geode/management/internal/SystemManagementService.java
index 6e9028d..2f069d4 100755
--- a/geode-core/src/main/java/org/apache/geode/management/internal/SystemManagementService.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/SystemManagementService.java
@@ -33,6 +33,7 @@ import org.apache.geode.distributed.internal.InternalDistributedSystem;
 import org.apache.geode.distributed.internal.ResourceEvent;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.cache.InternalCacheForClientAccess;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.management.AlreadyRunningException;
 import org.apache.geode.management.AsyncEventQueueMXBean;
@@ -94,7 +95,7 @@ public class SystemManagementService extends BaseManagementService {
    */
   private MBeanJMXAdapter jmxAdapter;
 
-  private InternalCache cache;
+  private InternalCacheForClientAccess cache;
 
   private FederatingManager federatingManager;
 
@@ -116,11 +117,12 @@ public class SystemManagementService extends BaseManagementService {
 
   private UniversalListenerContainer universalListenerContainer = new UniversalListenerContainer();
 
-  public static BaseManagementService newSystemManagementService(InternalCache cache) {
+  public static BaseManagementService newSystemManagementService(
+      InternalCacheForClientAccess cache) {
     return new SystemManagementService(cache).init();
   }
 
-  protected SystemManagementService(InternalCache cache) {
+  protected SystemManagementService(InternalCacheForClientAccess cache) {
     this.cache = cache;
     this.system = (InternalDistributedSystem) cache.getDistributedSystem();
     // This is a safe check to ensure Management service does not start for a
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/beans/BeanUtilFuncs.java b/geode-core/src/main/java/org/apache/geode/management/internal/beans/BeanUtilFuncs.java
index fab0bbd..14d9005 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/beans/BeanUtilFuncs.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/beans/BeanUtilFuncs.java
@@ -26,11 +26,11 @@ import java.util.Set;
 import java.util.zip.GZIPInputStream;
 import java.util.zip.GZIPOutputStream;
 
-import org.apache.geode.cache.CacheFactory;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.management.GemFireProperties;
+import org.apache.geode.management.internal.ManagementAgent;
 import org.apache.geode.management.internal.cli.CliUtil;
 
 /**
@@ -123,7 +123,7 @@ public class BeanUtilFuncs {
     DistributedMember memberFound = null;
 
     if (memberNameOrId != null) {
-      InternalCache cache = (InternalCache) CacheFactory.getAnyInstance();
+      InternalCache cache = ManagementAgent.getCache();
       Set<DistributedMember> memberSet = CliUtil.getAllMembers(cache);
       for (DistributedMember member : memberSet) {
         if (memberNameOrId.equals(member.getId()) || memberNameOrId.equals(member.getName())) {
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/beans/CacheServerBridge.java b/geode-core/src/main/java/org/apache/geode/management/internal/beans/CacheServerBridge.java
index 36bc96e..89a36a1 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/beans/CacheServerBridge.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/beans/CacheServerBridge.java
@@ -24,7 +24,6 @@ import java.util.Map;
 
 import org.apache.logging.log4j.Logger;
 
-import org.apache.geode.cache.CacheFactory;
 import org.apache.geode.cache.Region;
 import org.apache.geode.cache.query.CqClosedException;
 import org.apache.geode.cache.query.CqException;
@@ -405,8 +404,6 @@ public class CacheServerBridge extends ServerBridge {
   }
 
   public Version getClientVersion(ClientConnInfo connInfo) {
-    InternalCache cache = (InternalCache) CacheFactory.getAnyInstance();
-
     if (cache.getCacheServers().size() == 0) {
       return null;
     }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/beans/QueryDataFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/beans/QueryDataFunction.java
index a8a5bfc..e265817 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/beans/QueryDataFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/beans/QueryDataFunction.java
@@ -30,7 +30,6 @@ import org.apache.commons.lang3.StringUtils;
 import org.apache.logging.log4j.Logger;
 
 import org.apache.geode.SystemFailure;
-import org.apache.geode.cache.CacheFactory;
 import org.apache.geode.cache.DataPolicy;
 import org.apache.geode.cache.Region;
 import org.apache.geode.cache.execute.Function;
@@ -57,6 +56,7 @@ import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.management.DistributedRegionMXBean;
 import org.apache.geode.management.ManagementService;
+import org.apache.geode.management.internal.ManagementAgent;
 import org.apache.geode.management.internal.ManagementConstants;
 import org.apache.geode.management.internal.SystemManagementService;
 import org.apache.geode.management.internal.cli.CliUtil;
@@ -126,7 +126,8 @@ public class QueryDataFunction implements Function, InternalEntity {
   private QueryDataFunctionResult selectWithType(final FunctionContext context, String queryString,
       final boolean showMember, final String regionName, final int limit,
       final int queryResultSetLimit, final int queryCollectionsDepth) throws Exception {
-    InternalCache cache = getCache();
+    InternalCache cache =
+        ((InternalCache) context.getCache()).getCacheForProcessingClientRequests();
     Function localQueryFunc = new LocalQueryFunction("LocalQueryFunction", regionName, showMember)
         .setOptimizeForWrite(true);
     queryString = applyLimitClause(queryString, limit, queryResultSetLimit);
@@ -346,7 +347,7 @@ public class QueryDataFunction implements Function, InternalEntity {
       }
     }
 
-    InternalCache cache = (InternalCache) CacheFactory.getAnyInstance();
+    InternalCache cache = ManagementAgent.getCache();
     try {
 
       SystemManagementService service =
@@ -434,10 +435,6 @@ public class QueryDataFunction implements Function, InternalEntity {
     }
   }
 
-  private InternalCache getCache() {
-    return (InternalCache) CacheFactory.getAnyInstance();
-  }
-
   private static class JsonisedErrorMessage {
 
     private static String message = "message";
@@ -525,7 +522,8 @@ public class QueryDataFunction implements Function, InternalEntity {
 
     @Override
     public void execute(final FunctionContext context) {
-      InternalCache cache = getCache();
+      InternalCache cache =
+          ((InternalCache) context.getCache()).getCacheForProcessingClientRequests();
       QueryService queryService = cache.getQueryService();
       String qstr = (String) context.getArguments();
       Region r = cache.getRegion(regionName);
@@ -545,10 +543,6 @@ public class QueryDataFunction implements Function, InternalEntity {
       }
     }
 
-    private InternalCache getCache() {
-      return (InternalCache) CacheFactory.getAnyInstance();
-    }
-
     @Override
     public String getId() {
       return this.id;
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DataCommandFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DataCommandFunction.java
index 8c8ca61..3da2b6a 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DataCommandFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DataCommandFunction.java
@@ -103,7 +103,8 @@ public class DataCommandFunction implements InternalFunction {
   @Override
   public void execute(FunctionContext functionContext) {
     try {
-      InternalCache cache = (InternalCache) functionContext.getCache();
+      InternalCache cache =
+          ((InternalCache) functionContext.getCache()).getCacheForProcessingClientRequests();
       DataCommandRequest request = (DataCommandRequest) functionContext.getArguments();
       if (logger.isDebugEnabled()) {
         logger.debug("Executing function : \n{}\n on member {}", request,
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DestroyIndexFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DestroyIndexFunction.java
index 326569f..914a7ef 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DestroyIndexFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/DestroyIndexFunction.java
@@ -23,6 +23,7 @@ import org.apache.geode.cache.configuration.RegionConfig;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.query.Index;
 import org.apache.geode.cache.query.QueryService;
+import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.management.cli.CliFunction;
 import org.apache.geode.management.internal.cli.i18n.CliStrings;
 
@@ -36,7 +37,7 @@ public class DestroyIndexFunction extends CliFunction {
 
     CliFunctionResult result;
     try {
-      Cache cache = context.getCache();
+      Cache cache = ((InternalCache) context.getCache()).getCacheForProcessingClientRequests();
       memberId = cache.getDistributedSystem().getDistributedMember().getId();
       QueryService queryService = cache.getQueryService();
       String indexName = indexInfo.getName();
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ExportDataFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ExportDataFunction.java
index 9758083..093130a 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ExportDataFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ExportDataFunction.java
@@ -22,6 +22,7 @@ import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.snapshot.RegionSnapshotService;
 import org.apache.geode.cache.snapshot.SnapshotOptions;
 import org.apache.geode.cache.snapshot.SnapshotOptions.SnapshotFormat;
+import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.cache.snapshot.SnapshotOptionsImpl;
 import org.apache.geode.management.internal.cli.i18n.CliStrings;
@@ -46,7 +47,7 @@ public class ExportDataFunction implements InternalFunction {
     final boolean parallel = Boolean.parseBoolean(args[2]);
 
     try {
-      Cache cache = context.getCache();
+      Cache cache = ((InternalCache) context.getCache()).getCacheForProcessingClientRequests();
       Region<?, ?> region = cache.getRegion(regionName);
       String hostName = cache.getDistributedSystem().getDistributedMember().getHost();
       if (region != null) {
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ExportLogsFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ExportLogsFunction.java
index 89c4010..ceecbed 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ExportLogsFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ExportLogsFunction.java
@@ -37,6 +37,7 @@ import org.apache.geode.cache.Scope;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.distributed.internal.DistributionConfig;
 import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.cache.InternalCacheForClientAccess;
 import org.apache.geode.internal.cache.InternalRegionArguments;
 import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.logging.LogService;
@@ -121,7 +122,8 @@ public class ExportLogsFunction implements InternalFunction {
   public static Region createOrGetExistingExportLogsRegion(boolean isInitiatingMember,
       InternalCache cache) throws IOException, ClassNotFoundException {
 
-    Region exportLogsRegion = cache.getRegion(EXPORT_LOGS_REGION);
+    InternalCacheForClientAccess cacheForClientAccess = cache.getCacheForProcessingClientRequests();
+    Region exportLogsRegion = cacheForClientAccess.getInternalRegion(EXPORT_LOGS_REGION);
     if (exportLogsRegion == null) {
       AttributesFactory<String, Configuration> regionAttrsFactory = new AttributesFactory<>();
       regionAttrsFactory.setDataPolicy(DataPolicy.EMPTY);
@@ -133,14 +135,16 @@ public class ExportLogsFunction implements InternalFunction {
       InternalRegionArguments internalArgs = new InternalRegionArguments();
       internalArgs.setIsUsedForMetaRegion(true);
       exportLogsRegion =
-          cache.createVMRegion(EXPORT_LOGS_REGION, regionAttrsFactory.create(), internalArgs);
+          cacheForClientAccess.createInternalRegion(EXPORT_LOGS_REGION, regionAttrsFactory.create(),
+              internalArgs);
     }
 
     return exportLogsRegion;
   }
 
   public static void destroyExportLogsRegion(InternalCache cache) {
-    Region exportLogsRegion = cache.getRegion(EXPORT_LOGS_REGION);
+    Region exportLogsRegion =
+        cache.getCacheForProcessingClientRequests().getInternalRegion(EXPORT_LOGS_REGION);
     if (exportLogsRegion == null) {
       return;
     }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GetRegionDescriptionFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GetRegionDescriptionFunction.java
index f483cc8..2e44980 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GetRegionDescriptionFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/GetRegionDescriptionFunction.java
@@ -18,6 +18,7 @@ package org.apache.geode.management.internal.cli.functions;
 import org.apache.geode.cache.Cache;
 import org.apache.geode.cache.Region;
 import org.apache.geode.cache.execute.FunctionContext;
+import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.management.internal.cli.domain.RegionDescriptionPerMember;
 
@@ -30,7 +31,7 @@ public class GetRegionDescriptionFunction implements InternalFunction {
   public void execute(FunctionContext context) {
     String regionPath = (String) context.getArguments();
     try {
-      Cache cache = context.getCache();
+      Cache cache = ((InternalCache) context.getCache()).getCacheForProcessingClientRequests();
       Region<?, ?> region = cache.getRegion(regionPath);
 
       if (region != null) {
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ImportDataFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ImportDataFunction.java
index 1d0248d..92dbd84 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ImportDataFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/ImportDataFunction.java
@@ -22,6 +22,7 @@ import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.snapshot.RegionSnapshotService;
 import org.apache.geode.cache.snapshot.SnapshotOptions;
 import org.apache.geode.cache.snapshot.SnapshotOptions.SnapshotFormat;
+import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.management.internal.cli.i18n.CliStrings;
 
@@ -46,7 +47,8 @@ public class ImportDataFunction implements InternalFunction {
     final boolean parallel = (boolean) args[3];
 
     try {
-      final Cache cache = context.getCache();
+      final Cache cache =
+          ((InternalCache) context.getCache()).getCacheForProcessingClientRequests();
       final Region<?, ?> region = cache.getRegion(regionName);
       final String hostName = cache.getDistributedSystem().getDistributedMember().getHost();
       if (region != null) {
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/RegionAlterFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/RegionAlterFunction.java
index cd2ff3e..fe53185 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/RegionAlterFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/RegionAlterFunction.java
@@ -32,6 +32,7 @@ import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.execute.ResultSender;
 import org.apache.geode.internal.ClassPathLoader;
 import org.apache.geode.internal.cache.AbstractRegion;
+import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.PartitionedRegion;
 import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.cache.partitioned.PRLocallyDestroyedException;
@@ -62,7 +63,7 @@ public class RegionAlterFunction implements InternalFunction {
   public void execute(FunctionContext context) {
     ResultSender<Object> resultSender = context.getResultSender();
 
-    Cache cache = context.getCache();
+    Cache cache = ((InternalCache) context.getCache()).getCacheForProcessingClientRequests();
     String memberNameOrId =
         CliUtil.getMemberNameOrId(cache.getDistributedSystem().getDistributedMember());
 
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/RegionCreateFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/RegionCreateFunction.java
index 91c164c..26ca760 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/RegionCreateFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/RegionCreateFunction.java
@@ -42,6 +42,7 @@ import org.apache.geode.cache.execute.ResultSender;
 import org.apache.geode.cache.util.ObjectSizer;
 import org.apache.geode.compression.Compressor;
 import org.apache.geode.internal.ClassPathLoader;
+import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.cache.xmlcache.CacheXml;
 import org.apache.geode.internal.logging.LogService;
@@ -75,7 +76,7 @@ public class RegionCreateFunction implements InternalFunction {
   public void execute(FunctionContext context) {
     ResultSender<Object> resultSender = context.getResultSender();
 
-    Cache cache = context.getCache();
+    Cache cache = ((InternalCache) context.getCache()).getCacheForProcessingClientRequests();
     String memberNameOrId = context.getMemberName();
 
     RegionFunctionArgs regionCreateArgs = (RegionFunctionArgs) context.getArguments();
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/RegionDestroyFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/RegionDestroyFunction.java
index b3d812a..029595a 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/RegionDestroyFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/RegionDestroyFunction.java
@@ -18,6 +18,7 @@ import org.apache.geode.cache.Cache;
 import org.apache.geode.cache.Region;
 import org.apache.geode.cache.RegionDestroyedException;
 import org.apache.geode.cache.execute.FunctionContext;
+import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.execute.InternalFunction;
 import org.apache.geode.internal.cache.xmlcache.CacheXml;
 import org.apache.geode.internal.logging.LogService;
@@ -55,7 +56,7 @@ public class RegionDestroyFunction implements InternalFunction {
       }
 
       regionPath = (String) arguments;
-      Cache cache = context.getCache();
+      Cache cache = ((InternalCache) context.getCache()).getCacheForProcessingClientRequests();
       Region<?, ?> region = cache.getRegion(regionPath);
       // the region is already destroyed by another member
       if (region == null) {
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/UserFunctionExecution.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/UserFunctionExecution.java
index 06f1647..7503502 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/UserFunctionExecution.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/UserFunctionExecution.java
@@ -57,7 +57,7 @@ public class UserFunctionExecution implements InternalFunction<Object[]> {
 
   @Override
   public void execute(FunctionContext<Object[]> context) {
-    Cache cache = context.getCache();
+    Cache cache = ((InternalCache) context.getCache()).getCacheForProcessingClientRequests();
     DistributedMember member = cache.getDistributedSystem().getDistributedMember();
 
     String[] functionArgs = null;
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/modes/CommandModes.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/modes/CommandModes.java
index c50fbf3..1163f5f 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/modes/CommandModes.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/modes/CommandModes.java
@@ -21,16 +21,17 @@ import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
 
+import org.apache.logging.log4j.Logger;
 import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
 
-import org.apache.geode.LogWriter;
-import org.apache.geode.cache.Cache;
-import org.apache.geode.cache.CacheFactory;
+import org.apache.geode.internal.logging.LogService;
 
 public class CommandModes {
 
+  private static final Logger logger = LogService.getLogger();
+
   public static final String DEFAULT_MODE = "default";
 
   public Map<String, Map<String, CommandMode>> getModeMap() {
@@ -86,9 +87,7 @@ public class CommandModes {
   }
 
   private void logException(Exception e) {
-    Cache cache = CacheFactory.getAnyInstance();
-    LogWriter logger = cache.getLogger();
-    logger.warning("Error parsing command mode descriptor", e);
+    logger.warn("Error parsing command mode descriptor", e);
   }
 
   private void addCommandMode(String commandName) throws JSONException, IOException {
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/XmlEntity.java b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/XmlEntity.java
index 9fa2e9d..dc38aeb 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/XmlEntity.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/domain/XmlEntity.java
@@ -90,7 +90,8 @@ public class XmlEntity implements VersionedDataSerializable {
   }
 
   private static CacheProvider createDefaultCacheProvider() {
-    return () -> (InternalCache) CacheFactory.getAnyInstance();
+    return () -> ((InternalCache) CacheFactory.getAnyInstance())
+        .getCacheForProcessingClientRequests();
   }
 
   /**
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/functions/GetRegionNamesFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/functions/GetRegionNamesFunction.java
index 4a123a5..8bb3b34 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/functions/GetRegionNamesFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/functions/GetRegionNamesFunction.java
@@ -19,7 +19,6 @@ import static java.util.stream.Collectors.toSet;
 import java.util.Set;
 
 import org.apache.geode.cache.execute.FunctionContext;
-import org.apache.geode.internal.cache.GemFireCacheImpl;
 import org.apache.geode.internal.cache.InternalCache;
 import org.apache.geode.internal.cache.InternalRegion;
 import org.apache.geode.internal.cache.execute.InternalFunction;
@@ -27,7 +26,7 @@ import org.apache.geode.internal.cache.execute.InternalFunction;
 public class GetRegionNamesFunction implements InternalFunction {
   @Override
   public void execute(FunctionContext context) {
-    InternalCache cache = GemFireCacheImpl.getInstance();
+    InternalCache cache = (InternalCache) context.getCache();
 
     Set<String> regions =
         cache.getApplicationRegions().stream().map(InternalRegion::getName).collect(toSet());
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ExportLogsCommandTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ExportLogsCommandTest.java
index ab21998..5a340dc 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ExportLogsCommandTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/commands/ExportLogsCommandTest.java
@@ -24,6 +24,7 @@ import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.eq;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
 
 import java.util.ArrayList;
 import java.util.HashSet;
@@ -40,6 +41,7 @@ import org.apache.geode.cache.execute.ResultCollector;
 import org.apache.geode.distributed.DistributedMember;
 import org.apache.geode.distributed.internal.membership.InternalDistributedMember;
 import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.cache.InternalCacheForClientAccess;
 import org.apache.geode.management.ManagementException;
 import org.apache.geode.management.cli.Result;
 import org.apache.geode.management.internal.cli.functions.SizeExportLogsFunction;
@@ -157,6 +159,8 @@ public class ExportLogsCommandTest {
   @Test
   public void testTotalEstimateSizeExceedsLocatorAvailableDisk() throws Exception {
     final InternalCache mockCache = mock(InternalCache.class);
+    final InternalCacheForClientAccess mockCacheFilter = mock(InternalCacheForClientAccess.class);
+    when(mockCache.getCacheForProcessingClientRequests()).thenReturn(mockCacheFilter);
     final ExportLogsCommand realCmd = new ExportLogsCommand();
     ExportLogsCommand spyCmd = spy(realCmd);
 
@@ -198,6 +202,8 @@ public class ExportLogsCommandTest {
   @Test
   public void testTotalEstimateSizeExceedsUserSpecifiedValue() throws Exception {
     final InternalCache mockCache = mock(InternalCache.class);
+    final InternalCacheForClientAccess mockCacheFilter = mock(InternalCacheForClientAccess.class);
+    when(mockCache.getCacheForProcessingClientRequests()).thenReturn(mockCacheFilter);
     final ExportLogsCommand realCmd = new ExportLogsCommand();
     ExportLogsCommand spyCmd = spy(realCmd);
 
@@ -239,6 +245,8 @@ public class ExportLogsCommandTest {
   @Test
   public void estimateLogSizeExceedsServerDisk() throws Exception {
     final InternalCache mockCache = mock(InternalCache.class);
+    final InternalCacheForClientAccess mockCacheFilter = mock(InternalCacheForClientAccess.class);
+    when(mockCache.getCacheForProcessingClientRequests()).thenReturn(mockCacheFilter);
     final ExportLogsCommand realCmd = new ExportLogsCommand();
     ExportLogsCommand spyCmd = spy(realCmd);
 
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/RegionDestroyFunctionTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/RegionDestroyFunctionTest.java
index 4bfcbd9..4eaea73 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/RegionDestroyFunctionTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/cli/functions/RegionDestroyFunctionTest.java
@@ -32,6 +32,7 @@ import org.apache.geode.cache.RegionDestroyedException;
 import org.apache.geode.cache.execute.FunctionContext;
 import org.apache.geode.cache.execute.ResultSender;
 import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.cache.InternalCacheForClientAccess;
 
 
 public class RegionDestroyFunctionTest {
@@ -39,6 +40,7 @@ public class RegionDestroyFunctionTest {
   private RegionDestroyFunction function;
   private FunctionContext context;
   private InternalCache cache;
+  private InternalCacheForClientAccess filterCache;
   private ResultSender resultSender;
   private ArgumentCaptor<CliFunctionResult> resultCaptor;
 
@@ -47,10 +49,12 @@ public class RegionDestroyFunctionTest {
     function = spy(RegionDestroyFunction.class);
     context = mock(FunctionContext.class);
     cache = mock(InternalCache.class);
+    filterCache = mock(InternalCacheForClientAccess.class);
     resultSender = mock(ResultSender.class);
     when(context.getCache()).thenReturn(cache);
     when(context.getResultSender()).thenReturn(resultSender);
     when(context.getArguments()).thenReturn("testRegion");
+    when(cache.getCacheForProcessingClientRequests()).thenReturn(filterCache);
     resultCaptor = ArgumentCaptor.forClass(CliFunctionResult.class);
   }
 
@@ -67,7 +71,7 @@ public class RegionDestroyFunctionTest {
   @Test
   public void regionAlreadyDestroyed() throws Exception {
     when(context.getFunctionId()).thenReturn(RegionDestroyFunction.class.getName());
-    when(cache.getRegion(any())).thenReturn(null);
+    when(filterCache.getRegion(any())).thenReturn(null);
     function.execute(context);
 
     verify(resultSender).lastResult(resultCaptor.capture());
@@ -82,7 +86,7 @@ public class RegionDestroyFunctionTest {
   public void regionAlreadyDestroyed_throwException() throws Exception {
     when(context.getFunctionId()).thenReturn(RegionDestroyFunction.class.getName());
     Region region = mock(Region.class);
-    when(cache.getRegion(any())).thenReturn(region);
+    when(filterCache.getRegion(any())).thenReturn(region);
     doThrow(mock(RegionDestroyedException.class)).when(region).destroyRegion();
     function.execute(context);
 
@@ -98,7 +102,7 @@ public class RegionDestroyFunctionTest {
   public void illegalStateExceptionWillNotThrowExceptionToCommand() throws Exception {
     when(context.getFunctionId()).thenReturn(RegionDestroyFunction.class.getName());
     Region region = mock(Region.class);
-    when(cache.getRegion(any())).thenReturn(region);
+    when(filterCache.getRegion(any())).thenReturn(region);
     doThrow(new IllegalStateException("message")).when(region).destroyRegion();
 
     function.execute(context);
diff --git a/geode-dunit/src/main/java/org/apache/geode/management/internal/security/GfshCommandsSecurityTestBase.java b/geode-dunit/src/main/java/org/apache/geode/management/internal/security/GfshCommandsSecurityTestBase.java
index 17c38fa..fb84691 100644
--- a/geode-dunit/src/main/java/org/apache/geode/management/internal/security/GfshCommandsSecurityTestBase.java
+++ b/geode-dunit/src/main/java/org/apache/geode/management/internal/security/GfshCommandsSecurityTestBase.java
@@ -44,7 +44,8 @@ public class GfshCommandsSecurityTestBase {
   public static ServerStarterRule serverStarter =
       new ServerStarterRule().withJMXManager().withHttpService()
           .withSecurityManager(SimpleTestSecurityManager.class)
-          .withRegion(RegionShortcut.REPLICATE_PERSISTENT, "persistentRegion");
+          .withRegion(RegionShortcut.REPLICATE_PERSISTENT, "persistentRegion")
+          .withEmbeddedLocator();
 
   @Rule
   public GfshCommandRule gfshConnection =
@@ -167,6 +168,15 @@ public class GfshCommandsSecurityTestBase {
   }
 
   @Test
+  @ConnectionConfiguration(user = "data,cluster", password = "data,cluster")
+  public void modifyInternalRegionSuperUser() {
+    CommandResult result =
+        gfshConnection.executeCommand("put --key=key1 --value=value1 --region=PdxTypes");
+    assertThat(result.getStatus()).isEqualTo(Result.Status.ERROR);
+    assertThat(result.getMessageFromContent()).contains("Unauthorized");
+  }
+
+  @Test
   @ConnectionConfiguration(user = "data", password = "data")
   public void testGetPostProcess() throws Exception {
     gfshConnection.executeCommand("put --region=region1 --key=key2 --value=value2");
diff --git a/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/controllers/CommonCrudController.java b/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/controllers/CommonCrudController.java
index 52737b3..6ffd726 100644
--- a/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/controllers/CommonCrudController.java
+++ b/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/controllers/CommonCrudController.java
@@ -77,10 +77,8 @@ public abstract class CommonCrudController extends AbstractBaseController {
     headers.setLocation(toUri());
     final Set<Region<?, ?>> regions = new HashSet<>();
     for (InternalRegion region : getCache().getApplicationRegions()) {
-      if (region instanceof Region) {
-        regions.add(region);
-      }
-    } ;
+      regions.add(region);
+    }
     String listRegionsAsJson = JSONUtils.formulateJsonForListRegions(regions, "regions");
     return new ResponseEntity<>(listRegionsAsJson, headers, HttpStatus.OK);
   }