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/14 23:20:35 UTC

[geode] branch feature/GEODE-5074 created (now f886b63)

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

bschuchardt pushed a change to branch feature/GEODE-5074
in repository https://gitbox.apache.org/repos/asf/geode.git.


      at f886b63  GEODE-5074 REST dev client should not access or modify internal regions

This branch includes the following new commits:

     new f886b63  GEODE-5074 REST dev client should not access or modify internal regions

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[geode] 01/01: GEODE-5074 REST dev client should not access or modify internal regions

Posted by bs...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

bschuchardt pushed a commit to branch feature/GEODE-5074
in repository https://gitbox.apache.org/repos/asf/geode.git

commit f886b63594e3cafc2757d272a8c6f597b8948ff2
Author: Bruce Schuchardt <bs...@pivotal.io>
AuthorDate: Wed Nov 14 15:14:56 2018 -0800

    GEODE-5074 REST dev client should not access or modify internal regions
    
    The Developer REST API was accessing a raw cache for all operations.
    I've switched it to use a filtered InternalCacheForClientAccess cache
    instead for most operations.  It needed to have the unfiltered cache in
    order to find the __ParameterizedQueries__ region for accessing saved
    queries.
---
 .../geode/rest/internal/web/RestServersIntegrationTest.java   |  7 +++++++
 .../rest/internal/web/controllers/AbstractBaseController.java |  9 ++++++++-
 .../rest/internal/web/controllers/CommonCrudController.java   |  9 ++++++++-
 .../rest/internal/web/controllers/QueryAccessController.java  |  2 +-
 .../rest/internal/web/controllers/support/CacheProvider.java  |  3 +++
 .../internal/web/controllers/support/CacheProviderImpl.java   | 11 +++++++++++
 6 files changed, 38 insertions(+), 3 deletions(-)

diff --git a/geode-assembly/src/integrationTest/java/org/apache/geode/rest/internal/web/RestServersIntegrationTest.java b/geode-assembly/src/integrationTest/java/org/apache/geode/rest/internal/web/RestServersIntegrationTest.java
index 25d5cb8..1804ad7 100644
--- a/geode-assembly/src/integrationTest/java/org/apache/geode/rest/internal/web/RestServersIntegrationTest.java
+++ b/geode-assembly/src/integrationTest/java/org/apache/geode/rest/internal/web/RestServersIntegrationTest.java
@@ -62,6 +62,13 @@ public class RestServersIntegrationTest {
   }
 
   @Test
+  public void testGetOnInternalRegion() {
+    assertResponse(
+        restClient.doGet("/__PR", null, null))
+            .hasStatusCode(HttpStatus.SC_NOT_FOUND);
+  }
+
+  @Test
   public void testServerStartedOnDefaultPort() throws Exception {
     JsonNode jsonArray = assertResponse(restClient.doGet("/servers", null, null))
         .hasStatusCode(HttpStatus.SC_OK).getJsonObject();
diff --git a/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/controllers/AbstractBaseController.java b/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/controllers/AbstractBaseController.java
index 568a7b2..2135747 100644
--- a/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/controllers/AbstractBaseController.java
+++ b/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/controllers/AbstractBaseController.java
@@ -62,6 +62,7 @@ import org.apache.geode.distributed.LeaseExpiredException;
 import org.apache.geode.distributed.internal.ClusterDistributionManager;
 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.pdx.JSONFormatter;
 import org.apache.geode.pdx.JSONFormatterException;
@@ -110,6 +111,12 @@ public abstract class AbstractBaseController implements InitializingBean {
   }
 
   protected InternalCache getCache() {
+    InternalCache cache = cacheProvider.getCacheForClientAccess();
+    Assert.state(cache != null, "The Gemfire Cache reference was not properly initialized");
+    return cache;
+  }
+
+  protected InternalCache getCacheForServerAccess() {
     InternalCache cache = cacheProvider.getInternalCache();
     Assert.state(cache != null, "The Gemfire Cache reference was not properly initialized");
     return cache;
@@ -402,7 +409,7 @@ public abstract class AbstractBaseController implements InitializingBean {
   }
 
   Region<String, String> getQueryStore(final String namePath) {
-    return ValidationUtils.returnValueThrowOnNull(getCache().<String, String>getRegion(namePath),
+    return ValidationUtils.returnValueThrowOnNull(getCacheForServerAccess().<String, String>getRegion(namePath),
         new GemfireRestException(String.format("Query store does not exist!", namePath)));
   }
 
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 c5de53b..52737b3 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
@@ -15,6 +15,7 @@
 package org.apache.geode.rest.internal.web.controllers;
 
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 
@@ -38,6 +39,7 @@ import org.apache.geode.cache.execute.Execution;
 import org.apache.geode.cache.execute.FunctionException;
 import org.apache.geode.cache.execute.FunctionService;
 import org.apache.geode.cache.execute.ResultCollector;
+import org.apache.geode.internal.cache.InternalRegion;
 import org.apache.geode.internal.cache.execute.util.FindRestEnabledServersFunction;
 import org.apache.geode.internal.logging.LogService;
 import org.apache.geode.rest.internal.web.controllers.support.RestServersResultCollector;
@@ -73,7 +75,12 @@ public abstract class CommonCrudController extends AbstractBaseController {
     logger.debug("Listing all resources (Regions) in Geode...");
     final HttpHeaders headers = new HttpHeaders();
     headers.setLocation(toUri());
-    final Set<Region<?, ?>> regions = getCache().rootRegions();
+    final Set<Region<?, ?>> regions = new HashSet<>();
+    for (InternalRegion region : getCache().getApplicationRegions()) {
+      if (region instanceof Region) {
+        regions.add(region);
+      }
+    } ;
     String listRegionsAsJson = JSONUtils.formulateJsonForListRegions(regions, "regions");
     return new ResponseEntity<>(listRegionsAsJson, headers, HttpStatus.OK);
   }
diff --git a/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/controllers/QueryAccessController.java b/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/controllers/QueryAccessController.java
index 18d0f81..a8c7038 100644
--- a/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/controllers/QueryAccessController.java
+++ b/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/controllers/QueryAccessController.java
@@ -244,7 +244,7 @@ public class QueryAccessController extends AbstractBaseController {
       Query compiledQuery = compiledQueries.get(queryId);
       if (compiledQuery == null) {
         // This is first time the query is seen by this server.
-        final String oql = getValue(PARAMETERIZED_QUERIES_REGION, queryId, false);
+        final String oql = getQueryStore(PARAMETERIZED_QUERIES_REGION).get(queryId);
 
         ValidationUtils.returnValueThrowOnNull(oql, new ResourceNotFoundException(
             String.format("No Query with ID (%1$s) was found!", queryId)));
diff --git a/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/controllers/support/CacheProvider.java b/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/controllers/support/CacheProvider.java
index 19d2755..c99b5f7 100644
--- a/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/controllers/support/CacheProvider.java
+++ b/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/controllers/support/CacheProvider.java
@@ -14,9 +14,12 @@
  */
 package org.apache.geode.rest.internal.web.controllers.support;
 
+import org.apache.geode.cache.Cache;
 import org.apache.geode.internal.cache.InternalCache;
 
 public interface CacheProvider {
 
   InternalCache getInternalCache();
+
+  InternalCache getCacheForClientAccess();
 }
diff --git a/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/controllers/support/CacheProviderImpl.java b/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/controllers/support/CacheProviderImpl.java
index 8c00923..f3e39fb 100644
--- a/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/controllers/support/CacheProviderImpl.java
+++ b/geode-web-api/src/main/java/org/apache/geode/rest/internal/web/controllers/support/CacheProviderImpl.java
@@ -16,8 +16,10 @@ package org.apache.geode.rest.internal.web.controllers.support;
 
 import org.springframework.stereotype.Component;
 
+import org.apache.geode.cache.Cache;
 import org.apache.geode.internal.cache.GemFireCacheImpl;
 import org.apache.geode.internal.cache.InternalCache;
+import org.apache.geode.internal.cache.InternalCacheForClientAccess;
 
 @Component("cacheProvider")
 public class CacheProviderImpl implements CacheProvider {
@@ -26,4 +28,13 @@ public class CacheProviderImpl implements CacheProvider {
   public InternalCache getInternalCache() {
     return GemFireCacheImpl.getExisting();
   }
+
+  @Override
+  public InternalCache getCacheForClientAccess() {
+    InternalCache result = getInternalCache();
+    if (result == null) {
+      return null;
+    }
+    return new InternalCacheForClientAccess(result);
+  }
 }