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/07/23 19:45:17 UTC

[geode] branch develop updated: GEODE-7002: use enable-management-rest-service property to enable/disable CMS (#3827)

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 f54e0de   GEODE-7002: use enable-management-rest-service property to enable/disable CMS (#3827)
f54e0de is described below

commit f54e0ded1e1e4a8b29203d46f278cf293db6459d
Author: Jinmei Liao <ji...@pivotal.io>
AuthorDate: Tue Jul 23 12:45:01 2019 -0700

     GEODE-7002: use enable-management-rest-service property to enable/disable CMS (#3827)
    
    * change /v2 to /experimental
---
 .../rest/RegionManagementAcceptanceTest.java       |  2 +-
 ...ClusterManagementLocatorReconnectDunitTest.java |  3 +-
 ...va => GeodeManagementServiceFlagDUnitTest.java} | 15 +++++-----
 .../internal/rest/RegionManagementDunitTest.java   |  3 +-
 .../internal/DisabledClusterConfigTest.java        |  3 +-
 .../web/SwaggerVerificationIntegrationTest.java    |  3 +-
 .../geode/distributed/ConfigurationProperties.java | 20 +++++++++++++
 .../internal/AbstractDistributionConfig.java       |  3 ++
 .../distributed/internal/DistributionConfig.java   | 25 ++++++++++++++++
 .../internal/DistributionConfigImpl.java           | 15 ++++++++++
 .../distributed/internal/InternalLocator.java      | 11 +++----
 .../geode/internal/cache/GemFireCacheImpl.java     | 17 +++++++----
 .../cache/configuration/RegionConfigTest.java      |  2 +-
 .../internal/DistributionConfigJUnitTest.java      |  4 +--
 .../geode/test/junit/rules/LocatorStarterRule.java |  6 ++++
 .../geode/test/junit/rules/MemberStarterRule.java  |  2 --
 .../test/junit/rules/gfsh/DebuggableCommand.java   |  6 ----
 .../management/api/ClusterManagementOperation.java |  2 +-
 .../management/api/ClusterManagementService.java   |  3 --
 .../geode/management/api/RestfulEndpoint.java      |  6 ++--
 .../internal/ClientClusterManagementService.java   |  5 ++--
 .../configuration/GatewayReceiverConfigTest.java   |  4 +--
 .../geode/cache/configuration/PdxTypeTest.java     |  2 +-
 .../management/configuration/MemberConfigTest.java |  3 +-
 .../management/client/ConfigurePDXDUnitTest.java   |  2 +-
 .../client/MemberManagementServiceDUnitTest.java   |  4 +--
 ...usterManagementSecurityRestIntegrationTest.java | 35 ++++++++++++----------
 ...eneralManagementServiceRestIntegrationTest.java |  2 +-
 .../internal/rest/JsonSerializationTest.java       |  4 +--
 ...MemberManagementServiceRestIntegrationTest.java |  6 ++--
 .../internal/rest/PdxManagementTest.java           |  4 +--
 .../rest/RegionManagementIntegrationTest.java      |  2 +-
 .../controllers/AbstractManagementController.java  |  2 +-
 33 files changed, 150 insertions(+), 76 deletions(-)

diff --git a/geode-assembly/src/acceptanceTest/java/org/apache/geode/management/internal/rest/RegionManagementAcceptanceTest.java b/geode-assembly/src/acceptanceTest/java/org/apache/geode/management/internal/rest/RegionManagementAcceptanceTest.java
index 5919d9e..71ba25d 100644
--- a/geode-assembly/src/acceptanceTest/java/org/apache/geode/management/internal/rest/RegionManagementAcceptanceTest.java
+++ b/geode-assembly/src/acceptanceTest/java/org/apache/geode/management/internal/rest/RegionManagementAcceptanceTest.java
@@ -32,7 +32,7 @@ public class RegionManagementAcceptanceTest {
 
     // verify the management rest api is started correctly
     GeodeDevRestClient client =
-        new GeodeDevRestClient("/management/v2", "localhost", 7070, false);
+        new GeodeDevRestClient("/management/experimental", "localhost", 7070, false);
 
     client.doGetAndAssert("/ping").hasStatusCode(200).hasResponseBody().isEqualTo("pong");
   }
diff --git a/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/ClusterManagementLocatorReconnectDunitTest.java b/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/ClusterManagementLocatorReconnectDunitTest.java
index 765daf1..c1eede2 100644
--- a/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/ClusterManagementLocatorReconnectDunitTest.java
+++ b/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/ClusterManagementLocatorReconnectDunitTest.java
@@ -54,7 +54,8 @@ public class ClusterManagementLocatorReconnectDunitTest {
     locator = rule.startLocatorVM(0, l -> l.withHttpService());
     server = rule.startServerVM(1, locator.getPort());
     restClient =
-        new GeodeDevRestClient("/management/v2", "localhost", locator.getHttpPort(), false);
+        new GeodeDevRestClient("/management/experimental", "localhost", locator.getHttpPort(),
+            false);
 
     makeRestCallAndVerifyResult("customers");
 
diff --git a/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/GeodeManagementFeatureFlagDUnitTest.java b/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/GeodeManagementServiceFlagDUnitTest.java
similarity index 74%
rename from geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/GeodeManagementFeatureFlagDUnitTest.java
rename to geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/GeodeManagementServiceFlagDUnitTest.java
index a24eadc..fa3e807 100644
--- a/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/GeodeManagementFeatureFlagDUnitTest.java
+++ b/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/GeodeManagementServiceFlagDUnitTest.java
@@ -17,12 +17,11 @@ package org.apache.geode.management.internal.rest;
 import org.junit.Rule;
 import org.junit.Test;
 
-import org.apache.geode.management.api.ClusterManagementService;
 import org.apache.geode.test.dunit.rules.ClusterStartupRule;
 import org.apache.geode.test.dunit.rules.MemberVM;
 import org.apache.geode.test.junit.rules.GeodeDevRestClient;
 
-public class GeodeManagementFeatureFlagDUnitTest {
+public class GeodeManagementServiceFlagDUnitTest {
 
   @Rule
   public ClusterStartupRule cluster = new ClusterStartupRule();
@@ -32,20 +31,22 @@ public class GeodeManagementFeatureFlagDUnitTest {
   private GeodeDevRestClient restClient;
 
   @Test
-  public void geodeManagementShouldNotBeAvailableByDefault() throws Exception {
+  public void withOutService() throws Exception {
     locator = cluster.startLocatorVM(0,
-        l -> l.withSystemProperty(ClusterManagementService.FEATURE_FLAG, "false")
+        l -> l.withoutManagementRestService()
             .withHttpService());
     restClient =
-        new GeodeDevRestClient("/management/v2", "localhost", locator.getHttpPort(), false);
+        new GeodeDevRestClient("/management/experimental", "localhost", locator.getHttpPort(),
+            false);
     restClient.doGetAndAssert("/ping").hasStatusCode(404);
   }
 
   @Test
-  public void geodeManagementIsEnabledWithFeatureFlag() throws Exception {
+  public void withServiceByDefault() throws Exception {
     locator = cluster.startLocatorVM(0, l -> l.withHttpService());
     restClient =
-        new GeodeDevRestClient("/management/v2", "localhost", locator.getHttpPort(), false);
+        new GeodeDevRestClient("/management/experimental", "localhost", locator.getHttpPort(),
+            false);
     restClient.doGetAndAssert("/ping").hasStatusCode(200).hasResponseBody().isEqualTo("pong");
   }
 }
diff --git a/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/RegionManagementDunitTest.java b/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/RegionManagementDunitTest.java
index 2cbdf52..7859005 100644
--- a/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/RegionManagementDunitTest.java
+++ b/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/RegionManagementDunitTest.java
@@ -59,7 +59,8 @@ public class RegionManagementDunitTest {
     server3 = cluster.startServerVM(3, "group2,group3", locator.getPort());
 
     restClient =
-        new GeodeDevRestClient("/management/v2", "localhost", locator.getHttpPort(), false);
+        new GeodeDevRestClient("/management/experimental", "localhost", locator.getHttpPort(),
+            false);
     cms = ClusterManagementServiceBuilder.buildWithHostAddress()
         .setHostAddress("localhost", locator.getHttpPort())
         .build();
diff --git a/geode-assembly/src/integrationTest/java/org/apache/geode/management/internal/DisabledClusterConfigTest.java b/geode-assembly/src/integrationTest/java/org/apache/geode/management/internal/DisabledClusterConfigTest.java
index 15b0d23..8df37d2 100644
--- a/geode-assembly/src/integrationTest/java/org/apache/geode/management/internal/DisabledClusterConfigTest.java
+++ b/geode-assembly/src/integrationTest/java/org/apache/geode/management/internal/DisabledClusterConfigTest.java
@@ -39,7 +39,8 @@ public class DisabledClusterConfigTest {
     locator.withProperty(ConfigurationProperties.ENABLE_CLUSTER_CONFIGURATION, "false")
         .withHttpService().startLocator();
     GeodeDevRestClient restClient =
-        new GeodeDevRestClient("/management/v2", "localhost", locator.getHttpPort(), false);
+        new GeodeDevRestClient("/management/experimental", "localhost", locator.getHttpPort(),
+            false);
 
     ClusterManagementResult result =
         restClient.doPostAndAssert("/regions", "{\"name\":\"test\"}")
diff --git a/geode-assembly/src/integrationTest/java/org/apache/geode/rest/internal/web/SwaggerVerificationIntegrationTest.java b/geode-assembly/src/integrationTest/java/org/apache/geode/rest/internal/web/SwaggerVerificationIntegrationTest.java
index de14772..6eda1bb 100644
--- a/geode-assembly/src/integrationTest/java/org/apache/geode/rest/internal/web/SwaggerVerificationIntegrationTest.java
+++ b/geode-assembly/src/integrationTest/java/org/apache/geode/rest/internal/web/SwaggerVerificationIntegrationTest.java
@@ -52,7 +52,8 @@ public class SwaggerVerificationIntegrationTest {
 
     // Check the JSON
     JsonNode json =
-        assertResponse(client.get("/geode/v2/api-docs")).hasStatusCode(200).getJsonObject();
+        assertResponse(client.get("/geode/v2/api-docs")).hasStatusCode(200)
+            .getJsonObject();
     assertThat(json.get("swagger").asText(), is("2.0"));
 
     JsonNode info = json.get("info");
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/ConfigurationProperties.java b/geode-core/src/main/java/org/apache/geode/distributed/ConfigurationProperties.java
index 6efa630..e88eb09 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/ConfigurationProperties.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/ConfigurationProperties.java
@@ -456,6 +456,26 @@ public interface ConfigurationProperties {
    * <U>Since</U>: GemFire 8.0
    */
   String ENABLE_CLUSTER_CONFIGURATION = "enable-cluster-configuration";
+
+  /**
+   * The static String definition of the <i>"enable-management-rest-service"</i> property <a
+   * name="enable-management-rest-service"/a>
+   * </p>
+   * <U>Description</U>: "true" causes the cluster management rest service to be enabled. This
+   * service
+   * requires the cluster configuration service to be enabled. If "enable-cluster-configuration" is
+   * false and this is true, the management rest service would do nothing but report an error if you
+   * try to use it. Also even if this property is set to "true", The management rest service will
+   * only be started if "http-service-port" is not "0".
+   * </p>
+   * <U>Default</U>: "true"
+   * </p>
+   * <U>Allowed values</U>: true or false
+   * </p>
+   * <U>Since</U>: Geode 1.10
+   */
+  String ENABLE_MANAGEMENT_REST_SERVICE = "enable-management-rest-service";
+
   /**
    * The static String definition of the <i>"enable-network-partition-detection"</i> property <a
    * name="enable-network-partition-detection"/a>
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/AbstractDistributionConfig.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/AbstractDistributionConfig.java
index bfff6ac..71bf398 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/AbstractDistributionConfig.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/AbstractDistributionConfig.java
@@ -45,6 +45,7 @@ import static org.apache.geode.distributed.ConfigurationProperties.DISTRIBUTED_T
 import static org.apache.geode.distributed.ConfigurationProperties.DURABLE_CLIENT_ID;
 import static org.apache.geode.distributed.ConfigurationProperties.DURABLE_CLIENT_TIMEOUT;
 import static org.apache.geode.distributed.ConfigurationProperties.ENABLE_CLUSTER_CONFIGURATION;
+import static org.apache.geode.distributed.ConfigurationProperties.ENABLE_MANAGEMENT_REST_SERVICE;
 import static org.apache.geode.distributed.ConfigurationProperties.ENABLE_NETWORK_PARTITION_DETECTION;
 import static org.apache.geode.distributed.ConfigurationProperties.ENABLE_TIME_STATISTICS;
 import static org.apache.geode.distributed.ConfigurationProperties.ENFORCE_UNIQUE_HOST;
@@ -1309,6 +1310,8 @@ public abstract class AbstractDistributionConfig extends AbstractConfig
         "The password which client of GeodeRedisServer must use to authenticate themselves. The default is none and no authentication will be required.");
     m.put(ENABLE_CLUSTER_CONFIGURATION,
         "Enables cluster configuration support in dedicated locators.  This allows the locator to share configuration information amongst members and save configuration changes made using GFSH.");
+    m.put(ENABLE_MANAGEMENT_REST_SERVICE,
+        "Enables management rest service in dedicated locators.  This allows users to manage the cluster through rest api.");
     m.put(USE_CLUSTER_CONFIGURATION,
         "Boolean flag that allows the cache to use the cluster configuration provided by the cluster config service");
     m.put(LOAD_CLUSTER_CONFIGURATION_FROM_DIR,
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionConfig.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionConfig.java
index 415975f..e30d138 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionConfig.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionConfig.java
@@ -45,6 +45,7 @@ import static org.apache.geode.distributed.ConfigurationProperties.DISTRIBUTED_T
 import static org.apache.geode.distributed.ConfigurationProperties.DURABLE_CLIENT_ID;
 import static org.apache.geode.distributed.ConfigurationProperties.DURABLE_CLIENT_TIMEOUT;
 import static org.apache.geode.distributed.ConfigurationProperties.ENABLE_CLUSTER_CONFIGURATION;
+import static org.apache.geode.distributed.ConfigurationProperties.ENABLE_MANAGEMENT_REST_SERVICE;
 import static org.apache.geode.distributed.ConfigurationProperties.ENABLE_NETWORK_PARTITION_DETECTION;
 import static org.apache.geode.distributed.ConfigurationProperties.ENABLE_TIME_STATISTICS;
 import static org.apache.geode.distributed.ConfigurationProperties.ENFORCE_UNIQUE_HOST;
@@ -1746,6 +1747,30 @@ public interface DistributionConfig extends Config, LogConfig, StatisticsConfig
    */
   boolean DEFAULT_ENABLE_CLUSTER_CONFIGURATION = true;
 
+  /**
+   * Sets the value for {@link ConfigurationProperties#ENABLE_MANAGEMENT_REST_SERVICE}
+   */
+  @ConfigAttributeSetter(name = ENABLE_MANAGEMENT_REST_SERVICE)
+  void setEnableManagementRestService(boolean newValue);
+
+  /**
+   * Returns the value of {@link ConfigurationProperties#ENABLE_MANAGEMENT_REST_SERVICE} property
+   */
+  @ConfigAttributeGetter(name = ENABLE_MANAGEMENT_REST_SERVICE)
+  boolean getEnableManagementRestService();
+
+  /**
+   * the name of the {@link ConfigurationProperties#ENABLE_MANAGEMENT_REST_SERVICE} property
+   */
+  @ConfigAttribute(type = Boolean.class)
+  String ENABLE_MANAGEMENT_REST_SERVICE_NAME = ENABLE_MANAGEMENT_REST_SERVICE;
+
+  /**
+   * The default value of the {@link ConfigurationProperties#ENABLE_MANAGEMENT_REST_SERVICE}
+   * property
+   */
+  boolean DEFAULT_ENABLE_MANAGEMENT_REST_SERVICE = true;
+
   @ConfigAttribute(type = Boolean.class)
   String LOAD_CLUSTER_CONFIG_FROM_DIR_NAME = LOAD_CLUSTER_CONFIGURATION_FROM_DIR;
   boolean DEFAULT_LOAD_CLUSTER_CONFIG_FROM_DIR = false;
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionConfigImpl.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionConfigImpl.java
index a1bf171..2c9ac6e 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionConfigImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/DistributionConfigImpl.java
@@ -450,6 +450,8 @@ public class DistributionConfigImpl extends AbstractDistributionConfig implement
 
   private boolean enableSharedConfiguration =
       DistributionConfig.DEFAULT_ENABLE_CLUSTER_CONFIGURATION;
+  private boolean enableManagementRestService =
+      DistributionConfig.DEFAULT_ENABLE_MANAGEMENT_REST_SERVICE;
   private boolean useSharedConfiguration = DistributionConfig.DEFAULT_USE_CLUSTER_CONFIGURATION;
   private boolean loadSharedConfigurationFromDir =
       DistributionConfig.DEFAULT_LOAD_CLUSTER_CONFIG_FROM_DIR;
@@ -863,6 +865,9 @@ public class DistributionConfigImpl extends AbstractDistributionConfig implement
 
     validateSerializableObjects = other.getValidateSerializableObjects();
     serializableObjectFilter = other.getSerializableObjectFilter();
+
+    // following added for 9.9
+    enableManagementRestService = other.getEnableManagementRestService();
   }
 
   /**
@@ -3468,6 +3473,16 @@ public class DistributionConfigImpl extends AbstractDistributionConfig implement
   }
 
   @Override
+  public boolean getEnableManagementRestService() {
+    return enableManagementRestService;
+  }
+
+  @Override
+  public void setEnableManagementRestService(boolean enableManagementRestService) {
+    this.enableManagementRestService = enableManagementRestService;
+  }
+
+  @Override
   public boolean getUseSharedConfiguration() {
     return useSharedConfiguration;
   }
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalLocator.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalLocator.java
index 8e474a5..5a2b21c 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalLocator.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalLocator.java
@@ -53,6 +53,7 @@ import org.apache.geode.cache.client.internal.locator.LocatorListRequest;
 import org.apache.geode.cache.client.internal.locator.LocatorStatusRequest;
 import org.apache.geode.cache.client.internal.locator.QueueConnectionRequest;
 import org.apache.geode.cache.client.internal.locator.wan.LocatorMembershipListener;
+import org.apache.geode.distributed.ConfigurationProperties;
 import org.apache.geode.distributed.DistributedSystem;
 import org.apache.geode.distributed.Locator;
 import org.apache.geode.distributed.internal.InternalDistributedSystem.ConnectListener;
@@ -756,11 +757,11 @@ public class InternalLocator extends Locator implements ConnectListener, LogConf
         new ImmutablePair<>(HttpService.CLUSTER_MANAGEMENT_SERVICE_CONTEXT_PARAM,
             clusterManagementService);
 
-    if (Boolean.getBoolean(ClusterManagementService.FEATURE_FLAG)) {
-      logger.info("System Property {}=true Geode Management API is enabled.",
-          ClusterManagementService.FEATURE_FLAG);
+    if (distributionConfig.getEnableManagementRestService()) {
       internalCache.getHttpService().ifPresent(x -> {
         try {
+          logger.info("Geode Property {}=true Geode Management Rest Service is enabled.",
+              ConfigurationProperties.ENABLE_MANAGEMENT_REST_SERVICE);
           x.addWebApplication("/management", gemfireManagementWar, securityServiceAttribute,
               clusterManagementServiceAttribute);
         } catch (Throwable e) {
@@ -768,8 +769,8 @@ public class InternalLocator extends Locator implements ConnectListener, LogConf
         }
       });
     } else {
-      logger.info("System Property {}=false Geode Management API is disabled.",
-          ClusterManagementService.FEATURE_FLAG);
+      logger.info("Geode Property {}=false Geode Management Rest Service is disabled.",
+          ConfigurationProperties.ENABLE_MANAGEMENT_REST_SERVICE);
     }
   }
 
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 d9703a7..406837a 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
@@ -929,12 +929,17 @@ public class GemFireCacheImpl implements InternalCache, InternalClientCache, Has
       addRegionEntrySynchronizationListener(new GatewaySenderQueueEntrySynchronizationListener());
       backupService = new BackupService(this);
       if (!this.isClient) {
-        try {
-          httpService = Optional.of(new HttpService(systemConfig.getHttpServiceBindAddress(),
-              systemConfig.getHttpServicePort(), SSLConfigurationFactory
-                  .getSSLConfigForComponent(systemConfig, SecurableCommunicationChannel.WEB)));
-        } catch (Throwable ex) {
-          logger.warn("Could not enable HttpService: {}", ex.getMessage());
+        if (systemConfig.getHttpServicePort() == 0) {
+          logger.info("HttpService is disabled with http-serivce-port = 0");
+          httpService = Optional.empty();
+        } else {
+          try {
+            httpService = Optional.of(new HttpService(systemConfig.getHttpServiceBindAddress(),
+                systemConfig.getHttpServicePort(), SSLConfigurationFactory
+                    .getSSLConfigForComponent(systemConfig, SecurableCommunicationChannel.WEB)));
+          } catch (Throwable ex) {
+            logger.warn("Could not enable HttpService: {}", ex.getMessage());
+          }
         }
       }
     } // synchronized
diff --git a/geode-core/src/test/java/org/apache/geode/cache/configuration/RegionConfigTest.java b/geode-core/src/test/java/org/apache/geode/cache/configuration/RegionConfigTest.java
index af964be..d2a641d 100644
--- a/geode-core/src/test/java/org/apache/geode/cache/configuration/RegionConfigTest.java
+++ b/geode-core/src/test/java/org/apache/geode/cache/configuration/RegionConfigTest.java
@@ -268,7 +268,7 @@ public class RegionConfigTest {
     assertThat(regionConfig.getEndpoint()).isEqualTo("/regions");
 
     assertThat(regionConfig.getUri())
-        .isEqualTo(RestfulEndpoint.URI_CONTEXT + "/v2/regions/regionA");
+        .isEqualTo(RestfulEndpoint.URI_CONTEXT + "/experimental/regions/regionA");
   }
 
   @Test
diff --git a/geode-core/src/test/java/org/apache/geode/distributed/internal/DistributionConfigJUnitTest.java b/geode-core/src/test/java/org/apache/geode/distributed/internal/DistributionConfigJUnitTest.java
index 470a6ea..a482892 100644
--- a/geode-core/src/test/java/org/apache/geode/distributed/internal/DistributionConfigJUnitTest.java
+++ b/geode-core/src/test/java/org/apache/geode/distributed/internal/DistributionConfigJUnitTest.java
@@ -101,7 +101,7 @@ public class DistributionConfigJUnitTest {
   @Test
   public void testGetAttributeNames() {
     String[] attNames = AbstractDistributionConfig._getAttNames();
-    assertThat(attNames.length).isEqualTo(165);
+    assertThat(attNames.length).isEqualTo(166);
 
     List boolList = new ArrayList();
     List intList = new ArrayList();
@@ -135,7 +135,7 @@ public class DistributionConfigJUnitTest {
 
     // TODO - This makes no sense. One has no idea what the correct expected number of attributes
     // are.
-    assertEquals(34, boolList.size());
+    assertEquals(35, boolList.size());
     assertEquals(35, intList.size());
     assertEquals(87, stringList.size());
     assertEquals(5, fileList.size());
diff --git a/geode-dunit/src/main/java/org/apache/geode/test/junit/rules/LocatorStarterRule.java b/geode-dunit/src/main/java/org/apache/geode/test/junit/rules/LocatorStarterRule.java
index c6ace1a..c0e03ce 100644
--- a/geode-dunit/src/main/java/org/apache/geode/test/junit/rules/LocatorStarterRule.java
+++ b/geode-dunit/src/main/java/org/apache/geode/test/junit/rules/LocatorStarterRule.java
@@ -15,6 +15,7 @@
 package org.apache.geode.test.junit.rules;
 
 import static org.apache.geode.distributed.ConfigurationProperties.ENABLE_CLUSTER_CONFIGURATION;
+import static org.apache.geode.distributed.ConfigurationProperties.ENABLE_MANAGEMENT_REST_SERVICE;
 import static org.apache.geode.distributed.Locator.startLocatorAndDS;
 import static org.apache.geode.test.awaitility.GeodeAwaitility.await;
 import static org.junit.Assert.assertTrue;
@@ -107,6 +108,11 @@ public class LocatorStarterRule extends MemberStarterRule<LocatorStarterRule> im
     return this;
   }
 
+  public LocatorStarterRule withoutManagementRestService() {
+    properties.put(ENABLE_MANAGEMENT_REST_SERVICE, "false");
+    return this;
+  }
+
   @Override
   public InternalCache getCache() {
     return locator.getCache();
diff --git a/geode-dunit/src/main/java/org/apache/geode/test/junit/rules/MemberStarterRule.java b/geode-dunit/src/main/java/org/apache/geode/test/junit/rules/MemberStarterRule.java
index 8109e9f..e63c059 100644
--- a/geode-dunit/src/main/java/org/apache/geode/test/junit/rules/MemberStarterRule.java
+++ b/geode-dunit/src/main/java/org/apache/geode/test/junit/rules/MemberStarterRule.java
@@ -68,7 +68,6 @@ import org.apache.geode.management.CacheServerMXBean;
 import org.apache.geode.management.DistributedRegionMXBean;
 import org.apache.geode.management.DistributedSystemMXBean;
 import org.apache.geode.management.ManagementService;
-import org.apache.geode.management.api.ClusterManagementService;
 import org.apache.geode.management.internal.MBeanJMXAdapter;
 import org.apache.geode.management.internal.SystemManagementService;
 import org.apache.geode.management.internal.cli.CliUtil;
@@ -121,7 +120,6 @@ public abstract class MemberStarterRule<T> extends SerializableExternalResource
     properties.setProperty(MCAST_PORT, "0");
     properties.setProperty(LOCATORS, "");
     properties.setProperty(MAX_WAIT_TIME_RECONNECT, "5000");
-    systemProperties.setProperty(ClusterManagementService.FEATURE_FLAG, "true");
   }
 
   @Override
diff --git a/geode-junit/src/main/java/org/apache/geode/test/junit/rules/gfsh/DebuggableCommand.java b/geode-junit/src/main/java/org/apache/geode/test/junit/rules/gfsh/DebuggableCommand.java
index 95ac790..628838d 100644
--- a/geode-junit/src/main/java/org/apache/geode/test/junit/rules/gfsh/DebuggableCommand.java
+++ b/geode-junit/src/main/java/org/apache/geode/test/junit/rules/gfsh/DebuggableCommand.java
@@ -14,8 +14,6 @@
  */
 package org.apache.geode.test.junit.rules.gfsh;
 
-import org.apache.geode.management.api.ClusterManagementService;
-
 public class DebuggableCommand {
   final int debugPort;
   final String command;
@@ -25,10 +23,6 @@ public class DebuggableCommand {
   }
 
   public DebuggableCommand(String command, int debugPort) {
-
-    if (command.startsWith("start locator")) {
-      command += " --J=-D" + ClusterManagementService.FEATURE_FLAG + "=true ";
-    }
     this.command = command;
     this.debugPort = debugPort;
   }
diff --git a/geode-management/src/main/java/org/apache/geode/management/api/ClusterManagementOperation.java b/geode-management/src/main/java/org/apache/geode/management/api/ClusterManagementOperation.java
index eb20c10..b1d637e 100644
--- a/geode-management/src/main/java/org/apache/geode/management/api/ClusterManagementOperation.java
+++ b/geode-management/src/main/java/org/apache/geode/management/api/ClusterManagementOperation.java
@@ -31,7 +31,7 @@ public interface ClusterManagementOperation<V extends JsonSerializable> {
   /**
    * must match the REST controller's RequestMapping
    *
-   * @return the portion after /management/v2, e.g. /operations/name
+   * @return the portion after /management/experimental, e.g. /operations/name
    */
   String getEndpoint();
 }
diff --git a/geode-management/src/main/java/org/apache/geode/management/api/ClusterManagementService.java b/geode-management/src/main/java/org/apache/geode/management/api/ClusterManagementService.java
index 6e6b06a..add4691 100644
--- a/geode-management/src/main/java/org/apache/geode/management/api/ClusterManagementService.java
+++ b/geode-management/src/main/java/org/apache/geode/management/api/ClusterManagementService.java
@@ -27,9 +27,6 @@ import org.apache.geode.management.runtime.RuntimeInfo;
  */
 @Experimental
 public interface ClusterManagementService extends AutoCloseable {
-
-  String FEATURE_FLAG = "gemfire.enable-experimental-cluster-management-service";
-
   /**
    * This method will create the element on all the applicable members in the cluster and persist
    * the configuration in the cluster configuration if persistence is enabled.
diff --git a/geode-management/src/main/java/org/apache/geode/management/api/RestfulEndpoint.java b/geode-management/src/main/java/org/apache/geode/management/api/RestfulEndpoint.java
index 5936f18..76cfd69 100644
--- a/geode-management/src/main/java/org/apache/geode/management/api/RestfulEndpoint.java
+++ b/geode-management/src/main/java/org/apache/geode/management/api/RestfulEndpoint.java
@@ -33,11 +33,11 @@ import org.apache.geode.lang.Identifiable;
 @Experimental
 public interface RestfulEndpoint extends Identifiable<String> {
   String URI_CONTEXT = "/management";
-  String URI_VERSION = "/v2";
+  String URI_VERSION = "/experimental";
 
   /**
    * this returns the URI that display the list of entries.
-   * it should return URI the part after /v2
+   * it should return URI the part after /experimental
    *
    * @return e.g. /regions
    */
@@ -49,7 +49,7 @@ public interface RestfulEndpoint extends Identifiable<String> {
    * return the uri that points to a single entity. If the id is not available for the object,
    * this will return null
    *
-   * it should return the URI part after /v2
+   * it should return the URI part after /experimental
    *
    * @return e.g. /regions/regionA
    */
diff --git a/geode-management/src/main/java/org/apache/geode/management/internal/ClientClusterManagementService.java b/geode-management/src/main/java/org/apache/geode/management/internal/ClientClusterManagementService.java
index 3576964..1658fe8 100644
--- a/geode-management/src/main/java/org/apache/geode/management/internal/ClientClusterManagementService.java
+++ b/geode-management/src/main/java/org/apache/geode/management/internal/ClientClusterManagementService.java
@@ -52,7 +52,8 @@ import org.apache.geode.management.runtime.RuntimeInfo;
  */
 public class ClientClusterManagementService implements ClusterManagementService {
   // the restTemplate needs to have the context as the baseUrl, and request URI is the part after
-  // the context (including /v2), it needs to be set up this way so that spring test runner's
+  // the context (including /experimental), it needs to be set up this way so that spring test
+  // runner's
   // injected RequestFactory can work
   private final RestTemplate restTemplate;
   private final ScheduledExecutorService longRunningStatusPollingThreadPool;
@@ -122,7 +123,7 @@ public class ClientClusterManagementService implements ClusterManagementService
     result = restTemplate.postForEntity(RestfulEndpoint.URI_VERSION + op.getEndpoint(), op,
         ClusterManagementResult.class).getBody();
 
-    // our restTemplate requires the url to be modified to start from "/v2"
+    // our restTemplate requires the url to be modified to start from "/experimental"
     String uri = stripPrefix(RestfulEndpoint.URI_CONTEXT, result.getUri());
 
     // complete the future by polling the check-status REST endpoint
diff --git a/geode-management/src/test/java/org/apache/geode/cache/configuration/GatewayReceiverConfigTest.java b/geode-management/src/test/java/org/apache/geode/cache/configuration/GatewayReceiverConfigTest.java
index 3c9eea7..d790101 100644
--- a/geode-management/src/test/java/org/apache/geode/cache/configuration/GatewayReceiverConfigTest.java
+++ b/geode-management/src/test/java/org/apache/geode/cache/configuration/GatewayReceiverConfigTest.java
@@ -42,10 +42,10 @@ public class GatewayReceiverConfigTest {
   @Test
   public void getUri() throws Exception {
     assertThat(receiver.getUri())
-        .isEqualTo(RestfulEndpoint.URI_CONTEXT + "/v2/gateways/receivers/cluster");
+        .isEqualTo(RestfulEndpoint.URI_CONTEXT + "/experimental/gateways/receivers/cluster");
 
     receiver.setGroup("group");
     assertThat(receiver.getUri())
-        .isEqualTo(RestfulEndpoint.URI_CONTEXT + "/v2/gateways/receivers/group");
+        .isEqualTo(RestfulEndpoint.URI_CONTEXT + "/experimental/gateways/receivers/group");
   }
 }
diff --git a/geode-management/src/test/java/org/apache/geode/cache/configuration/PdxTypeTest.java b/geode-management/src/test/java/org/apache/geode/cache/configuration/PdxTypeTest.java
index 605c1bc..570f1d4 100644
--- a/geode-management/src/test/java/org/apache/geode/cache/configuration/PdxTypeTest.java
+++ b/geode-management/src/test/java/org/apache/geode/cache/configuration/PdxTypeTest.java
@@ -38,7 +38,7 @@ public class PdxTypeTest {
     assertThat(config.getEndpoint())
         .isEqualTo("/configurations/pdx");
     assertThat(config.getUri())
-        .isEqualTo(RestfulEndpoint.URI_CONTEXT + "/v2/configurations/pdx");
+        .isEqualTo(RestfulEndpoint.URI_CONTEXT + "/experimental/configurations/pdx");
   }
 
 }
diff --git a/geode-management/src/test/java/org/apache/geode/management/configuration/MemberConfigTest.java b/geode-management/src/test/java/org/apache/geode/management/configuration/MemberConfigTest.java
index cc67ab4..17665ae 100644
--- a/geode-management/src/test/java/org/apache/geode/management/configuration/MemberConfigTest.java
+++ b/geode-management/src/test/java/org/apache/geode/management/configuration/MemberConfigTest.java
@@ -29,6 +29,7 @@ public class MemberConfigTest {
     MemberConfig config = new MemberConfig();
     config.setId("memberA");
     assertThat(config.getEndpoint()).isEqualTo("/members");
-    assertThat(config.getUri()).isEqualTo(RestfulEndpoint.URI_CONTEXT + "/v2/members/memberA");
+    assertThat(config.getUri())
+        .isEqualTo(RestfulEndpoint.URI_CONTEXT + "/experimental/members/memberA");
   }
 }
diff --git a/geode-web-management/src/distributedTest/java/org/apache/geode/management/client/ConfigurePDXDUnitTest.java b/geode-web-management/src/distributedTest/java/org/apache/geode/management/client/ConfigurePDXDUnitTest.java
index 8c957b0..28a4856 100644
--- a/geode-web-management/src/distributedTest/java/org/apache/geode/management/client/ConfigurePDXDUnitTest.java
+++ b/geode-web-management/src/distributedTest/java/org/apache/geode/management/client/ConfigurePDXDUnitTest.java
@@ -85,7 +85,7 @@ public class ConfigurePDXDUnitTest {
 
     assertThat(result.isSuccessful()).isTrue();
     assertThat(result.getStatusCode()).isEqualTo(ClusterManagementResult.StatusCode.OK);
-    assertThat(result.getUri()).isEqualTo("/management/v2/configurations/pdx");
+    assertThat(result.getUri()).isEqualTo("/management/experimental/configurations/pdx");
 
     RealizationResult status = result.getMemberStatuses().get(0);
     assertThat(status.getMemberName()).isEqualTo("server-1");
diff --git a/geode-web-management/src/distributedTest/java/org/apache/geode/management/client/MemberManagementServiceDUnitTest.java b/geode-web-management/src/distributedTest/java/org/apache/geode/management/client/MemberManagementServiceDUnitTest.java
index 31d3aaa..f2c3ee3 100644
--- a/geode-web-management/src/distributedTest/java/org/apache/geode/management/client/MemberManagementServiceDUnitTest.java
+++ b/geode-web-management/src/distributedTest/java/org/apache/geode/management/client/MemberManagementServiceDUnitTest.java
@@ -151,7 +151,7 @@ public class MemberManagementServiceDUnitTest {
   @Test
   @WithMockUser
   public void noMatchWithFilter() throws Exception {
-    webContext.perform(get("/v2/members?id=server"))
+    webContext.perform(get("/experimental/members?id=server"))
         .andExpect(status().isOk())
         .andExpect(jsonPath("$.statusCode", is("OK")));
   }
@@ -159,7 +159,7 @@ public class MemberManagementServiceDUnitTest {
   @Test
   @WithMockUser
   public void noMatchWithUriVariable() throws Exception {
-    webContext.perform(get("/v2/members/server"))
+    webContext.perform(get("/experimental/members/server"))
         .andExpect(status().isNotFound())
         .andExpect(jsonPath("$.statusCode", is("ENTITY_NOT_FOUND")))
         .andExpect(jsonPath("$.statusMessage",
diff --git a/geode-web-management/src/integrationTest/java/org/apache/geode/management/internal/rest/ClusterManagementSecurityRestIntegrationTest.java b/geode-web-management/src/integrationTest/java/org/apache/geode/management/internal/rest/ClusterManagementSecurityRestIntegrationTest.java
index 6807699..767fe77 100644
--- a/geode-web-management/src/integrationTest/java/org/apache/geode/management/internal/rest/ClusterManagementSecurityRestIntegrationTest.java
+++ b/geode-web-management/src/integrationTest/java/org/apache/geode/management/internal/rest/ClusterManagementSecurityRestIntegrationTest.java
@@ -67,31 +67,34 @@ public class ClusterManagementSecurityRestIntegrationTest {
     regionConfig.setName(REGION);
     regionConfig.setType(RegionType.REPLICATE);
 
-    testContexts.add(new TestContext(post("/v2/regions"), "DATA:MANAGE")
+    testContexts.add(new TestContext(post("/experimental/regions"), "DATA:MANAGE")
         .setContent(mapper.writeValueAsString(regionConfig)));
 
     // additional credentials needed to create persistent regions
     regionConfig.setType(RegionType.REPLICATE_PERSISTENT);
-    testContexts.add(new TestContext(post("/v2/regions"), "CLUSTER:WRITE:DISK")
+    testContexts.add(new TestContext(post("/experimental/regions"), "CLUSTER:WRITE:DISK")
         .setCredentials("dataManage", "dataManage")
         .setContent(mapper.writeValueAsString(regionConfig)));
 
-    testContexts.add(new TestContext(get("/v2/regions"), "CLUSTER:READ"));
-    testContexts.add(new TestContext(get("/v2/regions/regionA"), "CLUSTER:READ:regionA"));
-    testContexts.add(new TestContext(delete("/v2/regions/regionA"), "DATA:MANAGE"));
-    testContexts.add(new TestContext(get("/v2/regions/regionA/indexes"), "CLUSTER:READ:QUERY"));
-    testContexts.add(new TestContext(get("/v2/regions/regionA/indexes"), "CLUSTER:READ:QUERY"));
+    testContexts.add(new TestContext(get("/experimental/regions"), "CLUSTER:READ"));
+    testContexts.add(new TestContext(get("/experimental/regions/regionA"), "CLUSTER:READ:regionA"));
+    testContexts.add(new TestContext(delete("/experimental/regions/regionA"), "DATA:MANAGE"));
     testContexts
-        .add(new TestContext(get("/v2/regions/regionA/indexes/index1"), "CLUSTER:READ:QUERY"));
+        .add(new TestContext(get("/experimental/regions/regionA/indexes"), "CLUSTER:READ:QUERY"));
+    testContexts
+        .add(new TestContext(get("/experimental/regions/regionA/indexes"), "CLUSTER:READ:QUERY"));
+    testContexts
+        .add(new TestContext(get("/experimental/regions/regionA/indexes/index1"),
+            "CLUSTER:READ:QUERY"));
 
-    testContexts.add(new TestContext(get("/v2/gateways/receivers"), "CLUSTER:READ"));
-    testContexts.add(new TestContext(post("/v2/gateways/receivers"), "CLUSTER:MANAGE")
+    testContexts.add(new TestContext(get("/experimental/gateways/receivers"), "CLUSTER:READ"));
+    testContexts.add(new TestContext(post("/experimental/gateways/receivers"), "CLUSTER:MANAGE")
         .setContent(mapper.writeValueAsString(new GatewayReceiverConfig())));
 
-    testContexts.add(new TestContext(get("/v2/members"), "CLUSTER:READ"));
-    testContexts.add(new TestContext(get("/v2/members/server1"), "CLUSTER:READ"));
+    testContexts.add(new TestContext(get("/experimental/members"), "CLUSTER:READ"));
+    testContexts.add(new TestContext(get("/experimental/members/server1"), "CLUSTER:READ"));
 
-    testContexts.add(new TestContext(post("/v2/configurations/pdx"), "CLUSTER:MANAGE")
+    testContexts.add(new TestContext(post("/experimental/configurations/pdx"), "CLUSTER:MANAGE")
         .setContent(mapper.writeValueAsString(new PdxType())));
   }
 
@@ -119,7 +122,7 @@ public class ClusterManagementSecurityRestIntegrationTest {
 
   @Test
   public void noCredentials() throws Exception {
-    context.perform(post("/v2/regions"))
+    context.perform(post("/experimental/regions"))
         .andExpect(status().isUnauthorized())
         .andExpect(jsonPath("$.statusCode", is("UNAUTHENTICATED")))
         .andExpect(jsonPath("$.statusMessage",
@@ -128,7 +131,7 @@ public class ClusterManagementSecurityRestIntegrationTest {
 
   @Test
   public void wrongCredentials() throws Exception {
-    context.perform(post("/v2/regions")
+    context.perform(post("/experimental/regions")
         .with(httpBasic("user", "wrong_password")))
         .andExpect(status().isUnauthorized())
         .andExpect(jsonPath("$.statusCode", is("UNAUTHENTICATED")))
@@ -141,7 +144,7 @@ public class ClusterManagementSecurityRestIntegrationTest {
     RegionConfig regionConfig = new RegionConfig();
     regionConfig.setName(REGION);
     regionConfig.setType(RegionType.REPLICATE);
-    context.perform(post("/v2/regions")
+    context.perform(post("/experimental/regions")
         .with(httpBasic("dataManage", "dataManage"))
         .content(mapper.writeValueAsString(regionConfig)))
         .andExpect(status().isCreated())
diff --git a/geode-web-management/src/integrationTest/java/org/apache/geode/management/internal/rest/GeneralManagementServiceRestIntegrationTest.java b/geode-web-management/src/integrationTest/java/org/apache/geode/management/internal/rest/GeneralManagementServiceRestIntegrationTest.java
index 17f83d3..a01a873 100644
--- a/geode-web-management/src/integrationTest/java/org/apache/geode/management/internal/rest/GeneralManagementServiceRestIntegrationTest.java
+++ b/geode-web-management/src/integrationTest/java/org/apache/geode/management/internal/rest/GeneralManagementServiceRestIntegrationTest.java
@@ -56,7 +56,7 @@ public class GeneralManagementServiceRestIntegrationTest {
 
   @Test
   public void noResultsShowsEmptyResultsListAndNoStatuses() throws Exception {
-    webContext.perform(get("/v2/regions"))
+    webContext.perform(get("/experimental/regions"))
         .andDo(print())
         .andExpect(status().isOk())
         .andExpect(jsonPath("$.result").isArray())
diff --git a/geode-web-management/src/integrationTest/java/org/apache/geode/management/internal/rest/JsonSerializationTest.java b/geode-web-management/src/integrationTest/java/org/apache/geode/management/internal/rest/JsonSerializationTest.java
index 44ce001..f10d958 100644
--- a/geode-web-management/src/integrationTest/java/org/apache/geode/management/internal/rest/JsonSerializationTest.java
+++ b/geode-web-management/src/integrationTest/java/org/apache/geode/management/internal/rest/JsonSerializationTest.java
@@ -68,7 +68,7 @@ public class JsonSerializationTest {
   public void invalidAttributes() throws Exception {
     String json = "{'name':'test','Group1':'group1','Group2':'group2'}";
     when(cms.create(any())).thenReturn(new ClusterManagementResult());
-    context.perform(post("/v2/regions").content(json))
+    context.perform(post("/experimental/regions").content(json))
         .andExpect(status().isBadRequest())
         .andExpect(jsonPath("$.statusCode", Matchers.is("ILLEGAL_ARGUMENT")))
         .andExpect(jsonPath("$.statusMessage",
@@ -80,7 +80,7 @@ public class JsonSerializationTest {
   public void validAttributes() throws Exception {
     String json = "{'name':'test','group':'group1'}";
     when(cms.create(any())).thenReturn(new ClusterManagementResult());
-    context.perform(post("/v2/regions").content(json))
+    context.perform(post("/experimental/regions").content(json))
         .andExpect(status().isCreated());
     verify(cms, atLeastOnce()).create(regionConfigCaptor.capture());
     RegionConfig value = regionConfigCaptor.getValue();
diff --git a/geode-web-management/src/integrationTest/java/org/apache/geode/management/internal/rest/MemberManagementServiceRestIntegrationTest.java b/geode-web-management/src/integrationTest/java/org/apache/geode/management/internal/rest/MemberManagementServiceRestIntegrationTest.java
index bd0cc72..9e2eb31 100644
--- a/geode-web-management/src/integrationTest/java/org/apache/geode/management/internal/rest/MemberManagementServiceRestIntegrationTest.java
+++ b/geode-web-management/src/integrationTest/java/org/apache/geode/management/internal/rest/MemberManagementServiceRestIntegrationTest.java
@@ -67,7 +67,7 @@ public class MemberManagementServiceRestIntegrationTest {
 
   @Test
   public void listLocator() throws Exception {
-    webContext.perform(get("/v2/members")
+    webContext.perform(get("/experimental/members")
         .param("id", "locator-0"))
         .andDo(print())
         .andExpect(status().isOk())
@@ -85,7 +85,7 @@ public class MemberManagementServiceRestIntegrationTest {
 
   @Test
   public void listServer() throws Exception {
-    webContext.perform(get("/v2/members")
+    webContext.perform(get("/experimental/members")
         .param("id", "server-1"))
         .andDo(print())
         .andExpect(status().isOk())
@@ -107,7 +107,7 @@ public class MemberManagementServiceRestIntegrationTest {
 
   @Test
   public void listAllMembers() throws Exception {
-    webContext.perform(get("/v2/members"))
+    webContext.perform(get("/experimental/members"))
         .andDo(print())
         .andExpect(status().isOk())
         .andExpect(jsonPath("$.memberStatuses").doesNotExist())
diff --git a/geode-web-management/src/integrationTest/java/org/apache/geode/management/internal/rest/PdxManagementTest.java b/geode-web-management/src/integrationTest/java/org/apache/geode/management/internal/rest/PdxManagementTest.java
index 68d7028..017dbde 100644
--- a/geode-web-management/src/integrationTest/java/org/apache/geode/management/internal/rest/PdxManagementTest.java
+++ b/geode-web-management/src/integrationTest/java/org/apache/geode/management/internal/rest/PdxManagementTest.java
@@ -57,7 +57,7 @@ public class PdxManagementTest {
   public void success() throws Exception {
     Pdx pdx = new Pdx();
     pdx.setReadSerialized(true);
-    context.perform(post("/v2/configurations/pdx")
+    context.perform(post("/experimental/configurations/pdx")
         .with(httpBasic("clusterManage", "clusterManage"))
         .content(mapper.writeValueAsString(pdx)))
         .andExpect(status().isCreated())
@@ -65,6 +65,6 @@ public class PdxManagementTest {
         .andExpect(
             jsonPath("$.statusMessage", containsString("Successfully updated config for cluster")))
         .andExpect(jsonPath("$.statusCode", is("OK")))
-        .andExpect(jsonPath("$.uri", is("/management/v2/configurations/pdx")));
+        .andExpect(jsonPath("$.uri", is("/management/experimental/configurations/pdx")));
   }
 }
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 82d885d..99151e8 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
@@ -97,7 +97,7 @@ public class RegionManagementIntegrationTest {
   @Test
   @WithMockUser
   public void ping() throws Exception {
-    context.perform(get("/v2/ping"))
+    context.perform(get("/experimental/ping"))
         .andExpect(content().string("pong"));
   }
 }
diff --git a/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/AbstractManagementController.java b/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/AbstractManagementController.java
index 4cba54a..0ce4919 100644
--- a/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/AbstractManagementController.java
+++ b/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/AbstractManagementController.java
@@ -28,7 +28,7 @@ import org.apache.geode.management.internal.api.LocatorClusterManagementService;
 
 public class AbstractManagementController implements ServletContextAware {
 
-  protected static final String MANAGEMENT_API_VERSION = "/v2";
+  protected static final String MANAGEMENT_API_VERSION = "/experimental";
   protected SecurityService securityService;
   protected LocatorClusterManagementService clusterManagementService;