You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by ji...@apache.org on 2019/04/09 05:56:10 UTC

[geode] branch develop updated: GEODE-6505: add more RegionType and type validation (#3416)

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

jinmeiliao 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 2ad6695  GEODE-6505: add more RegionType and type validation (#3416)
2ad6695 is described below

commit 2ad6695355a961c5b1d078fb4b2f64862d8bbbac
Author: jinmeiliao <ji...@pivotal.io>
AuthorDate: Mon Apr 8 22:55:52 2019 -0700

    GEODE-6505: add more RegionType and type validation (#3416)
---
 .../validators/RegionConfigValidator.java           | 11 +++++++++++
 .../validators/RegionConfigValidatorTest.java       |  9 +++++++++
 .../geode/cache/configuration/RegionType.java       | 21 ++++++++++++---------
 .../rest/RegionManagementIntegrationTest.java       | 17 +++++++++++++++++
 4 files changed, 49 insertions(+), 9 deletions(-)

diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/validators/RegionConfigValidator.java b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/validators/RegionConfigValidator.java
index 63bc3c8..1b411e8 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/validators/RegionConfigValidator.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/validators/RegionConfigValidator.java
@@ -35,7 +35,18 @@ public class RegionConfigValidator implements ConfigurationValidator<RegionConfi
     if (config.getType() == null) {
       RegionType defaultRegion = RegionType.PARTITION;
       config.setType(defaultRegion);
+    } else {
+      String type = config.getType();
+      // validate if the type is a valid RegionType. Only types defined in RegionType are supported
+      // by management v2 api.
+      try {
+        RegionType.valueOf(type);
+      } catch (IllegalArgumentException e) {
+        throw new IllegalArgumentException(
+            String.format("Type %s is not supported in Management V2 API.", type));
+      }
     }
+
   }
 
   @Override
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/configuration/validators/RegionConfigValidatorTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/configuration/validators/RegionConfigValidatorTest.java
index c586a2a..e235653 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/configuration/validators/RegionConfigValidatorTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/configuration/validators/RegionConfigValidatorTest.java
@@ -46,6 +46,15 @@ public class RegionConfigValidatorTest {
   }
 
   @Test
+  public void invalidType() throws Exception {
+    config.setName("regionName");
+    config.setType("LOCAL");
+    assertThatThrownBy(() -> validator.validate(config))
+        .isInstanceOf(IllegalArgumentException.class)
+        .hasMessage("Type LOCAL is not supported in Management V2 API.");
+  }
+
+  @Test
   public void defaultsTypeToPartitioned() {
     config.setName("regionName");
     validator.validate(config);
diff --git a/geode-management/src/main/java/org/apache/geode/cache/configuration/RegionType.java b/geode-management/src/main/java/org/apache/geode/cache/configuration/RegionType.java
index 5a382f0..f192403 100644
--- a/geode-management/src/main/java/org/apache/geode/cache/configuration/RegionType.java
+++ b/geode-management/src/main/java/org/apache/geode/cache/configuration/RegionType.java
@@ -15,18 +15,21 @@
 
 package org.apache.geode.cache.configuration;
 
+import org.apache.geode.annotations.Experimental;
+
 /**
- * Cluster Management V2 API supports all region shortcuts and attributes, but these are the
- * recommended types by the Cluster Management V2 API
+ * these are the region types supported by Cluster Management V2 API. The attributes of these
+ * region types are the same as their namesakes in RegionShortcut
  */
+@Experimental
 public enum RegionType {
-  /**
-   * Same as RegionShortCut.PARTITION
-   */
   PARTITION,
-
-  /**
-   * Same as RegionShortCut.REPLICATE
-   */
+  PARTITION_PROXY,
+  PARTITION_PROXY_REDUNDANT,
+  PARTITION_HEAP_LRU,
+  PARTITION_OVERFLOW,
   REPLICATE,
+  REPLICATE_PROXY,
+  REPLICATE_HEAP_LRU,
+  REPLICATE_OVERFLOW
 }
diff --git a/geode-web-management/src/integrationTest/java/org/apache/geode/management/internal/rest/RegionManagementIntegrationTest.java b/geode-web-management/src/integrationTest/java/org/apache/geode/management/internal/rest/RegionManagementIntegrationTest.java
index 713d6a4..1036f23 100644
--- a/geode-web-management/src/integrationTest/java/org/apache/geode/management/internal/rest/RegionManagementIntegrationTest.java
+++ b/geode-web-management/src/integrationTest/java/org/apache/geode/management/internal/rest/RegionManagementIntegrationTest.java
@@ -72,6 +72,23 @@ public class RegionManagementIntegrationTest {
 
   @Test
   @WithMockUser
+  public void invalidType() throws Exception {
+    RegionConfig regionConfig = new RegionConfig();
+    regionConfig.setName("customers");
+    regionConfig.setType("LOCAL");
+
+    ObjectMapper mapper = new ObjectMapper();
+    String json = mapper.writeValueAsString(regionConfig);
+
+    context.perform(post("/v2/regions").content(json))
+        .andExpect(status().isBadRequest())
+        .andExpect(jsonPath("$.statusCode", is("ILLEGAL_ARGUMENT")))
+        .andExpect(jsonPath("$.statusMessage",
+            is("Type LOCAL is not supported in Management V2 API.")));
+  }
+
+  @Test
+  @WithMockUser
   public void ping() throws Exception {
     context.perform(get("/v2/ping"))
         .andExpect(content().string("pong"));