GEODE-7194: simplify CMS 'get' return type (#4047)
diff --git a/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/GatewayReceiverManagementDUnitTest.java b/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/GatewayReceiverManagementDUnitTest.java
index 9b60f00..99ece35 100644
--- a/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/GatewayReceiverManagementDUnitTest.java
+++ b/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/GatewayReceiverManagementDUnitTest.java
@@ -15,6 +15,7 @@
package org.apache.geode.management.internal.rest;
+import static org.apache.geode.test.junit.assertions.ClusterManagementGetResultAssert.assertManagementGetResult;
import static org.apache.geode.test.junit.assertions.ClusterManagementListResultAssert.assertManagementListResult;
import static org.apache.geode.test.junit.assertions.ClusterManagementRealizationResultAssert.assertManagementResult;
import static org.assertj.core.api.Assertions.assertThat;
@@ -35,6 +36,7 @@
import org.apache.geode.management.runtime.GatewayReceiverInfo;
import org.apache.geode.test.dunit.rules.ClusterStartupRule;
import org.apache.geode.test.dunit.rules.MemberVM;
+import org.apache.geode.test.junit.assertions.ClusterManagementGetResultAssert;
import org.apache.geode.test.junit.assertions.ClusterManagementListResultAssert;
import org.apache.geode.test.junit.rules.MemberStarterRule;
@@ -116,6 +118,36 @@
assertThat(result.getRuntimeInfo()).hasSize(0);
}
}
- }
+ GatewayReceiver filter1 = new GatewayReceiver();
+ filter1.setGroup("group2");
+ listAssert = assertManagementListResult(cms.list(filter1)).isSuccessful();
+ listResult = listAssert.getResult();
+ assertThat(listResult).hasSize(1);
+ assertThat(listResult.get(0).getConfiguration().getGroup()).isEqualTo("group2");
+
+ GatewayReceiver filter2 = new GatewayReceiver();
+ filter2.setGroup("group3");
+ listAssert = assertManagementListResult(cms.list(filter2)).isSuccessful();
+ listResult = listAssert.getResult();
+ assertThat(listResult).hasSize(0);
+
+ GatewayReceiver filter = new GatewayReceiver();
+ filter.setGroup("group2");
+ ClusterManagementGetResultAssert<GatewayReceiver, GatewayReceiverInfo> getAssert =
+ assertManagementGetResult(cms.get(filter)).isSuccessful();
+ ConfigurationResult<GatewayReceiver, GatewayReceiverInfo> getResult = getAssert.getResult();
+ assertThat(getResult.getConfiguration().getId()).isEqualTo("group2");
+
+ GatewayReceiver clusterFilter = new GatewayReceiver();
+ assertThatThrownBy(() -> cms.get(clusterFilter))
+ .hasMessageContaining(
+ "ENTITY_NOT_FOUND: GatewayReceiver 'cluster' does not exist.");
+
+ GatewayReceiver noMatchesFilter = new GatewayReceiver();
+ noMatchesFilter.setGroup("groupNotFound");
+ assertThatThrownBy(() -> cms.get(noMatchesFilter))
+ .hasMessageContaining(
+ "ENTITY_NOT_FOUND: GatewayReceiver 'groupNotFound' does not exist.");
+ }
}
diff --git a/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/ListIndexManagementDUnitTest.java b/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/ListIndexManagementDUnitTest.java
index 044addd..fd56b7c 100644
--- a/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/ListIndexManagementDUnitTest.java
+++ b/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/ListIndexManagementDUnitTest.java
@@ -88,8 +88,8 @@
@Test
public void getRegion() {
regionConfig.setName("region1");
- List<Region> regions = cms.get(regionConfig).getConfigResult();
- assertThat(regions).hasSize(1);
+ Region region = cms.get(regionConfig).getConfigResult();
+ assertThat(region).isNotNull();
}
@Test
@@ -120,10 +120,7 @@
Index index = new Index();
index.setRegionPath("region1");
index.setName("index1");
- ClusterManagementListResult<Index, RuntimeInfo> list = cms.get(index);
- List<Index> result = list.getConfigResult();
- assertThat(result).hasSize(1);
- Index runtimeIndex = result.get(0);
+ Index runtimeIndex = cms.get(index).getConfigResult();
assertThat(runtimeIndex.getRegionName()).isEqualTo("region1");
assertThat(runtimeIndex.getName()).isEqualTo("index1");
assertThat(runtimeIndex.getRegionPath()).isEqualTo("/region1");
@@ -135,14 +132,14 @@
Index index = new Index();
index.setRegionPath("region1");
assertThatThrownBy(() -> cms.get(index)).isInstanceOf(IllegalArgumentException.class)
- .hasMessageContaining("unable to construct the uri ");
+ .hasMessageContaining("Unable to construct the URI ");
}
@Test
public void getIndexWithoutRegionNameAndIndexId() {
Index index = new Index();
assertThatThrownBy(() -> cms.get(index)).isInstanceOf(IllegalArgumentException.class)
- .hasMessageContaining("unable to construct the uri ");
+ .hasMessageContaining("Unable to construct the URI ");
}
@Test
diff --git a/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/MemberManagementServiceDunitTest.java b/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/MemberManagementServiceDunitTest.java
index 4784849..863526b 100644
--- a/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/MemberManagementServiceDunitTest.java
+++ b/geode-assembly/src/distributedTest/java/org/apache/geode/management/internal/rest/MemberManagementServiceDunitTest.java
@@ -16,16 +16,18 @@
package org.apache.geode.management.internal.rest;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Test;
+import org.apache.geode.management.api.ClusterManagementGetResult;
import org.apache.geode.management.api.ClusterManagementListResult;
import org.apache.geode.management.api.ClusterManagementResult;
import org.apache.geode.management.api.ClusterManagementService;
import org.apache.geode.management.client.ClusterManagementServiceBuilder;
-import org.apache.geode.management.configuration.MemberConfig;
+import org.apache.geode.management.configuration.Member;
import org.apache.geode.management.runtime.MemberInformation;
import org.apache.geode.test.dunit.rules.ClusterStartupRule;
import org.apache.geode.test.dunit.rules.MemberVM;
@@ -50,8 +52,8 @@
@Test
public void listAllMembers() {
- MemberConfig config = new MemberConfig();
- ClusterManagementListResult<MemberConfig, MemberInformation> result = cmsClient.list(config);
+ Member config = new Member();
+ ClusterManagementListResult<Member, MemberInformation> result = cmsClient.list(config);
assertThat(result.isSuccessful()).isTrue();
assertThat(result.getStatusCode()).isEqualTo(ClusterManagementResult.StatusCode.OK);
@@ -66,10 +68,10 @@
@Test
public void listOneMember() {
- MemberConfig config = new MemberConfig();
+ Member config = new Member();
config.setId("locator-0");
- ClusterManagementListResult<MemberConfig, MemberInformation> result = cmsClient.list(config);
+ ClusterManagementListResult<Member, MemberInformation> result = cmsClient.list(config);
assertThat(result.isSuccessful()).isTrue();
assertThat(result.getStatusCode()).isEqualTo(ClusterManagementResult.StatusCode.OK);
assertThat(result.getRuntimeResult().size()).isEqualTo(1);
@@ -81,10 +83,42 @@
}
@Test
+ public void getOneMember() {
+ Member config = new Member();
+ config.setId("locator-0");
+
+ ClusterManagementGetResult<Member, MemberInformation> result = cmsClient.get(config);
+ assertThat(result.isSuccessful()).isTrue();
+ assertThat(result.getStatusCode()).isEqualTo(ClusterManagementResult.StatusCode.OK);
+ assertThat(result.getRuntimeResult().size()).isEqualTo(1);
+
+ MemberInformation memberConfig = result.getRuntimeResult().get(0);
+ assertThat(memberConfig.isCoordinator()).isTrue();
+ assertThat(memberConfig.isServer()).isFalse();
+ assertThat(memberConfig.getLocatorPort()).isEqualTo(locator.getPort());
+ }
+
+ @Test
+ public void getNonExistentMember() {
+ Member config = new Member();
+ config.setId("locator-42");
+
+ assertThatThrownBy(() -> cmsClient.get(config))
+ .hasMessageContaining("ENTITY_NOT_FOUND: Member 'locator-42' does not exist.");
+ }
+
+ @Test
+ public void getImproperlySpecifiedMember() {
+ Member config = new Member();
+ assertThatThrownBy(() -> cmsClient.get(config))
+ .hasMessageContaining("Unable to construct the URI with the current configuration.");
+ }
+
+ @Test
public void listNonExistentMember() {
- MemberConfig config = new MemberConfig();
+ Member config = new Member();
config.setId("locator");
- ClusterManagementListResult<MemberConfig, MemberInformation> result = cmsClient.list(config);
+ ClusterManagementListResult<Member, MemberInformation> result = cmsClient.list(config);
assertThat(result.isSuccessful()).isTrue();
assertThat(result.getStatusCode())
.isEqualTo(ClusterManagementResult.StatusCode.OK);
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 769227c..0b10be3 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
@@ -99,10 +99,8 @@
config.setValueConstraint("java.lang.Integer");
cms.create(config);
- List<Region> result = cms.get(config).getConfigResult();
+ Region config1 = cms.get(config).getConfigResult();
- assertThat(result).hasSize(1);
- Region config1 = result.get(0);
assertThat(config1.getType()).isEqualTo(RegionType.PARTITION);
assertThat(config1.getValueConstraint()).isEqualTo("java.lang.Integer");
assertThat(config1.getKeyConstraint()).isEqualTo("java.lang.Boolean");
@@ -269,7 +267,7 @@
assertThat(attributes.getCustomEntryTimeToLive()).isNull();
});
- Region regionResult = cms.get(region).getConfigResult().get(0);
+ Region regionResult = cms.get(region).getConfigResult();
List<Region.Expiration> expirations = regionResult.getExpirations();
assertThat(expirations).hasSize(2);
assertThat(expirations.get(0).getTimeInSeconds()).isEqualTo(10000);
diff --git a/geode-assembly/src/integrationTest/resources/assembly_content.txt b/geode-assembly/src/integrationTest/resources/assembly_content.txt
index 0990e8e..09eb87c 100644
--- a/geode-assembly/src/integrationTest/resources/assembly_content.txt
+++ b/geode-assembly/src/integrationTest/resources/assembly_content.txt
@@ -677,6 +677,7 @@
javadoc/org/apache/geode/management/RegionMXBean.html
javadoc/org/apache/geode/management/ServerLoadData.html
javadoc/org/apache/geode/management/api/ClusterManagementException.html
+javadoc/org/apache/geode/management/api/ClusterManagementGetResult.html
javadoc/org/apache/geode/management/api/ClusterManagementListOperationsResult.html
javadoc/org/apache/geode/management/api/ClusterManagementListResult.html
javadoc/org/apache/geode/management/api/ClusterManagementOperation.html
@@ -726,7 +727,7 @@
javadoc/org/apache/geode/management/configuration/GatewayReceiver.html
javadoc/org/apache/geode/management/configuration/GroupableConfiguration.html
javadoc/org/apache/geode/management/configuration/Index.html
-javadoc/org/apache/geode/management/configuration/MemberConfig.html
+javadoc/org/apache/geode/management/configuration/Member.html
javadoc/org/apache/geode/management/configuration/Pdx.html
javadoc/org/apache/geode/management/configuration/Region.Expiration.html
javadoc/org/apache/geode/management/configuration/Region.ExpirationAction.html
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/api/LocatorClusterManagementService.java b/geode-core/src/main/java/org/apache/geode/management/internal/api/LocatorClusterManagementService.java
index c01a27c..4e38914 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/api/LocatorClusterManagementService.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/api/LocatorClusterManagementService.java
@@ -17,8 +17,6 @@
package org.apache.geode.management.internal.api;
-
-
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
@@ -48,6 +46,7 @@
import org.apache.geode.internal.cache.execute.AbstractExecution;
import org.apache.geode.internal.logging.LogService;
import org.apache.geode.management.api.ClusterManagementException;
+import org.apache.geode.management.api.ClusterManagementGetResult;
import org.apache.geode.management.api.ClusterManagementListOperationsResult;
import org.apache.geode.management.api.ClusterManagementListResult;
import org.apache.geode.management.api.ClusterManagementOperation;
@@ -63,7 +62,7 @@
import org.apache.geode.management.configuration.GatewayReceiver;
import org.apache.geode.management.configuration.GroupableConfiguration;
import org.apache.geode.management.configuration.Index;
-import org.apache.geode.management.configuration.MemberConfig;
+import org.apache.geode.management.configuration.Member;
import org.apache.geode.management.configuration.Pdx;
import org.apache.geode.management.configuration.Region;
import org.apache.geode.management.internal.CacheElementOperation;
@@ -287,7 +286,7 @@
List<T> resultList = new ArrayList<>();
- if (filter instanceof MemberConfig) {
+ if (filter instanceof Member) {
resultList.add(filter);
} else {
ConfigurationManager<T> manager = getConfigurationManager(filter);
@@ -330,7 +329,7 @@
Set<DistributedMember> members;
- if (filter instanceof MemberConfig) {
+ if (filter instanceof Member) {
members =
memberValidator.findMembers(filter.getId(), filter.getGroup());
} else {
@@ -359,21 +358,27 @@
}
@Override
- public <T extends AbstractConfiguration<R>, R extends RuntimeInfo> ClusterManagementListResult<T, R> get(
+ public <T extends AbstractConfiguration<R>, R extends RuntimeInfo> ClusterManagementGetResult<T, R> get(
T config) {
ClusterManagementListResult<T, R> list = list(config);
List<ConfigurationResult<T, R>> result = list.getResult();
- if (result.size() == 0) {
+ int size = result.size();
+ if (config instanceof Member) {
+ size = result.get(0).getRuntimeInfo().size();
+ }
+
+ if (size == 0) {
raise(StatusCode.ENTITY_NOT_FOUND,
config.getClass().getSimpleName() + " '" + config.getId() + "' does not exist.");
}
- if (result.size() > 1) {
+ if (size > 1) {
raise(StatusCode.ERROR,
"Expect only one matching " + config.getClass().getSimpleName() + ".");
}
- return assertSuccessful(list);
+
+ return assertSuccessful(new ClusterManagementGetResult<>(list));
}
@Override
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CacheRealizationFunction.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CacheRealizationFunction.java
index 0fad5e7..4f79c32 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CacheRealizationFunction.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/functions/CacheRealizationFunction.java
@@ -31,12 +31,12 @@
import org.apache.geode.management.api.RealizationResult;
import org.apache.geode.management.configuration.AbstractConfiguration;
import org.apache.geode.management.configuration.GatewayReceiver;
-import org.apache.geode.management.configuration.MemberConfig;
+import org.apache.geode.management.configuration.Member;
import org.apache.geode.management.configuration.Region;
import org.apache.geode.management.internal.CacheElementOperation;
import org.apache.geode.management.internal.configuration.realizers.ConfigurationRealizer;
import org.apache.geode.management.internal.configuration.realizers.GatewayReceiverRealizer;
-import org.apache.geode.management.internal.configuration.realizers.MemberConfigRealizer;
+import org.apache.geode.management.internal.configuration.realizers.MemberRealizer;
import org.apache.geode.management.internal.configuration.realizers.RegionConfigRealizer;
import org.apache.geode.management.runtime.RuntimeInfo;
@@ -48,7 +48,7 @@
static {
realizers.put(Region.class, new RegionConfigRealizer());
realizers.put(GatewayReceiver.class, new GatewayReceiverRealizer());
- realizers.put(MemberConfig.class, new MemberConfigRealizer());
+ realizers.put(Member.class, new MemberRealizer());
}
@Override
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/realizers/MemberConfigRealizer.java b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/realizers/MemberRealizer.java
similarity index 85%
rename from geode-core/src/main/java/org/apache/geode/management/internal/configuration/realizers/MemberConfigRealizer.java
rename to geode-core/src/main/java/org/apache/geode/management/internal/configuration/realizers/MemberRealizer.java
index 2abfdc9..a985ef3 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/configuration/realizers/MemberConfigRealizer.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/configuration/realizers/MemberRealizer.java
@@ -28,21 +28,21 @@
import org.apache.geode.internal.cache.InternalCache;
import org.apache.geode.internal.logging.LogService;
import org.apache.geode.management.api.RealizationResult;
-import org.apache.geode.management.configuration.MemberConfig;
+import org.apache.geode.management.configuration.Member;
import org.apache.geode.management.internal.cli.functions.GetMemberInformationFunction;
import org.apache.geode.management.runtime.MemberInformation;
-public class MemberConfigRealizer
- implements ConfigurationRealizer<MemberConfig, MemberInformation> {
+public class MemberRealizer
+ implements ConfigurationRealizer<Member, MemberInformation> {
private static final Logger logger = LogService.getLogger();
@Override
- public RealizationResult create(MemberConfig config, InternalCache cache) {
+ public RealizationResult create(Member config, InternalCache cache) {
throw new IllegalStateException("Not supported");
}
@Override
- public MemberInformation get(MemberConfig config, InternalCache cache) {
+ public MemberInformation get(Member config, InternalCache cache) {
GetMemberInformationFunction getMemberInfoFunction = new GetMemberInformationFunction();
InternalDistributedSystem system = (InternalDistributedSystem) cache.getDistributedSystem();
DistributedMember member = system.getDistributedMember();
@@ -61,12 +61,12 @@
}
@Override
- public RealizationResult update(MemberConfig config, InternalCache cache) {
+ public RealizationResult update(Member config, InternalCache cache) {
throw new IllegalStateException("Not supported");
}
@Override
- public RealizationResult delete(MemberConfig config, InternalCache cache) {
+ public RealizationResult delete(Member config, InternalCache cache) {
throw new IllegalStateException("Not supported");
}
diff --git a/geode-core/src/main/resources/org/apache/geode/internal/sanctioned-geode-management-serializables.txt b/geode-core/src/main/resources/org/apache/geode/internal/sanctioned-geode-management-serializables.txt
index 2e1810a..0e2d4f6 100644
--- a/geode-core/src/main/resources/org/apache/geode/internal/sanctioned-geode-management-serializables.txt
+++ b/geode-core/src/main/resources/org/apache/geode/internal/sanctioned-geode-management-serializables.txt
@@ -5,7 +5,7 @@
org/apache/geode/management/configuration/GatewayReceiver,false,endPort:java/lang/Integer,gatewayTransportFilters:java/util/List,manualStart:java/lang/Boolean,maximumTimeBetweenPings:java/lang/Integer,socketBufferSize:java/lang/Integer,startPort:java/lang/Integer
org/apache/geode/management/configuration/GroupableConfiguration,false,group:java/lang/String
org/apache/geode/management/configuration/Index,false,expression:java/lang/String,keyIndex:java/lang/Boolean,name:java/lang/String,regionPath:java/lang/String
-org/apache/geode/management/configuration/MemberConfig,false,id:java/lang/String
+org/apache/geode/management/configuration/Member,false,id:java/lang/String
org/apache/geode/management/configuration/Pdx,false,diskStoreName:java/lang/String,ignoreUnreadFields:java/lang/Boolean,pdxSerializer:org/apache/geode/management/configuration/ClassName,persistent:java/lang/Boolean,readSerialized:java/lang/Boolean
org/apache/geode/management/configuration/Region,false,diskStoreName:java/lang/String,expirations:java/util/List,keyConstraint:java/lang/String,name:java/lang/String,redundantCopies:java/lang/Integer,type:org/apache/geode/management/configuration/RegionType,valueConstraint:java/lang/String
org/apache/geode/management/configuration/Region$Expiration,false,action:org/apache/geode/management/configuration/Region$ExpirationAction,timeInSeconds:java/lang/Integer,type:org/apache/geode/management/configuration/Region$ExpirationType
diff --git a/geode-core/src/test/java/org/apache/geode/management/internal/api/LocatorClusterManagementServiceTest.java b/geode-core/src/test/java/org/apache/geode/management/internal/api/LocatorClusterManagementServiceTest.java
index bbebeea..89c2752 100644
--- a/geode-core/src/test/java/org/apache/geode/management/internal/api/LocatorClusterManagementServiceTest.java
+++ b/geode-core/src/test/java/org/apache/geode/management/internal/api/LocatorClusterManagementServiceTest.java
@@ -59,7 +59,7 @@
import org.apache.geode.management.api.ClusterManagementResult;
import org.apache.geode.management.api.RealizationResult;
import org.apache.geode.management.configuration.Index;
-import org.apache.geode.management.configuration.MemberConfig;
+import org.apache.geode.management.configuration.Member;
import org.apache.geode.management.configuration.Region;
import org.apache.geode.management.configuration.RegionType;
import org.apache.geode.management.internal.CacheElementOperation;
@@ -196,9 +196,9 @@
@Test
public void create_non_supportedConfigObject() {
- MemberConfig config = new MemberConfig();
+ Member config = new Member();
assertThatThrownBy(() -> service.create(config)).isInstanceOf(ClusterManagementException.class)
- .hasMessageContaining("ILLEGAL_ARGUMENT: MemberConfig is not supported.");
+ .hasMessageContaining("ILLEGAL_ARGUMENT: Member is not supported.");
}
@Test
diff --git a/geode-junit/src/main/java/org/apache/geode/test/junit/assertions/ClusterManagementGetResultAssert.java b/geode-junit/src/main/java/org/apache/geode/test/junit/assertions/ClusterManagementGetResultAssert.java
new file mode 100644
index 0000000..901a7fe
--- /dev/null
+++ b/geode-junit/src/main/java/org/apache/geode/test/junit/assertions/ClusterManagementGetResultAssert.java
@@ -0,0 +1,79 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package org.apache.geode.test.junit.assertions;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import org.assertj.core.api.AbstractAssert;
+import org.assertj.core.api.ListAssert;
+import org.assertj.core.api.ObjectAssert;
+
+import org.apache.geode.management.api.ClusterManagementGetResult;
+import org.apache.geode.management.api.ClusterManagementResult;
+import org.apache.geode.management.api.ConfigurationResult;
+import org.apache.geode.management.configuration.AbstractConfiguration;
+import org.apache.geode.management.runtime.RuntimeInfo;
+
+public class ClusterManagementGetResultAssert<T extends AbstractConfiguration<R>, R extends RuntimeInfo>
+ extends
+ AbstractAssert<ClusterManagementGetResultAssert<T, R>, ClusterManagementGetResult<T, R>> {
+ public ClusterManagementGetResultAssert(
+ ClusterManagementGetResult<T, R> clusterManagementResult, Class<?> selfType) {
+ super(clusterManagementResult, selfType);
+ }
+
+ public ClusterManagementGetResultAssert<T, R> isSuccessful() {
+ assertThat(actual.isSuccessful()).isTrue();
+ return this;
+ }
+
+ public ClusterManagementGetResultAssert<T, R> failed() {
+ assertThat(actual.isSuccessful()).isFalse();
+ return this;
+ }
+
+ public ClusterManagementGetResultAssert<T, R> hasStatusCode(
+ ClusterManagementResult.StatusCode... codes) {
+ assertThat(actual.getStatusCode()).isIn((Object[]) codes);
+ return this;
+ }
+
+ public ClusterManagementGetResultAssert<T, R> containsStatusMessage(String statusMessage) {
+ assertThat(actual.getStatusMessage()).contains(statusMessage);
+ return this;
+ }
+
+ public ConfigurationResult<T, R> getResult() {
+ return actual.getResult();
+ };
+
+ public ObjectAssert<T> hasConfiguration() {
+ return assertThat(getActual().getConfigResult());
+ }
+
+ public ListAssert<R> hasRuntimeInfos() {
+ return assertThat(getActual().getRuntimeResult());
+ }
+
+ public static <T extends AbstractConfiguration<R>, R extends RuntimeInfo> ClusterManagementGetResultAssert<T, R> assertManagementGetResult(
+ ClusterManagementGetResult<T, R> result) {
+ return new ClusterManagementGetResultAssert<>(result, ClusterManagementGetResultAssert.class);
+ }
+
+ public ClusterManagementGetResult<T, R> getActual() {
+ return actual;
+ }
+}
diff --git a/geode-management/src/main/java/org/apache/geode/management/api/ClusterManagementGetResult.java b/geode-management/src/main/java/org/apache/geode/management/api/ClusterManagementGetResult.java
new file mode 100644
index 0000000..4925cec
--- /dev/null
+++ b/geode-management/src/main/java/org/apache/geode/management/api/ClusterManagementGetResult.java
@@ -0,0 +1,77 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more contributor license
+ * agreements. See the NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
+ * or implied. See the License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package org.apache.geode.management.api;
+
+import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+
+import org.apache.geode.annotations.Experimental;
+import org.apache.geode.management.configuration.AbstractConfiguration;
+import org.apache.geode.management.runtime.RuntimeInfo;
+
+/**
+ *
+ * @param <T> the type of the static config, e.g. RegionConfig
+ * @param <R> the type of the corresponding runtime information, e.g. RuntimeRegionInfo
+ */
+@Experimental
+public class ClusterManagementGetResult<T extends AbstractConfiguration<R>, R extends RuntimeInfo>
+ extends ClusterManagementResult {
+ /**
+ * for internal use only
+ */
+ public ClusterManagementGetResult() {}
+
+ /**
+ * for internal use only
+ */
+ public ClusterManagementGetResult(ClusterManagementListResult<T, R> singletonListResult) {
+ super(singletonListResult);
+ setResult(singletonListResult.getResult().get(0));
+ }
+
+ private ConfigurationResult<T, R> result = null;
+
+ /**
+ * Returns the combined payload of the get call
+ */
+ public ConfigurationResult<T, R> getResult() {
+ return result;
+ }
+
+ /**
+ * Returns only the static config portion of the result
+ */
+ @JsonIgnore
+ public T getConfigResult() {
+ return result.getConfiguration();
+ }
+
+ /**
+ * Returns only the runtime information portion of the result
+ */
+ @JsonIgnore
+ public List<R> getRuntimeResult() {
+ return result.getRuntimeInfo();
+ }
+
+ /**
+ * for internal use only
+ */
+ public void setResult(ConfigurationResult<T, R> result) {
+ this.result = result;
+ }
+}
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 1fa51a4..84ba638 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
@@ -43,8 +43,7 @@
* This method will delete the element on all the applicable members in the cluster and update the
* configuration in the cluster configuration if persistence is enabled.
*
- * @param config this holds the configuration attributes of the element to be deleted on the
- * cluster
+ * @param config this holds the name or id of the element to be deleted on the cluster
* @return a {@link ClusterManagementRealizationResult} indicating the success of the deletion
* @throws ClusterManagementRealizationException if unsuccessful
*/
@@ -55,7 +54,7 @@
* the updated configuration in the cluster configuration if persistence is enabled.
*
* @param config this holds the configuration attributes of the element to be updated on the
- * cluster
+ * cluster, as well as the group this config belongs to
* @return a {@link ClusterManagementRealizationResult} indicating the success of the update
* @throws ClusterManagementRealizationException if unsuccessful
*/
@@ -75,19 +74,16 @@
T filter);
/**
- * This method will list a single instance of the element type in the cluster configuration, along
+ * This method will get a single instance of the element type in the cluster configuration, along
* with additional runtime information from cluster members
*
- * @param filter the filterable attributes are used to identify the element to return. Any
- * non-filterable attributes will be ignored. It is an error if the filter matches
- * more than one element.
- * @return a {@link ClusterManagementListResult} holding a single element in
- * {@link ClusterManagementListResult#getResult()}
+ * @param config this holds the name or id of the element to be retrieved
+ * @return a {@link ClusterManagementGetResult}
* @throws ClusterManagementException if unsuccessful or, no matching element is found, or
* multiple matches are found
*/
- <T extends AbstractConfiguration<R>, R extends RuntimeInfo> ClusterManagementListResult<T, R> get(
- T filter);
+ <T extends AbstractConfiguration<R>, R extends RuntimeInfo> ClusterManagementGetResult<T, R> get(
+ T config);
/**
* This method will launch a cluster management operation asynchronously.
diff --git a/geode-management/src/main/java/org/apache/geode/management/configuration/AbstractConfiguration.java b/geode-management/src/main/java/org/apache/geode/management/configuration/AbstractConfiguration.java
index 5d1a1ed..9ac4cd3 100644
--- a/geode-management/src/main/java/org/apache/geode/management/configuration/AbstractConfiguration.java
+++ b/geode-management/src/main/java/org/apache/geode/management/configuration/AbstractConfiguration.java
@@ -112,7 +112,7 @@
* @return {@link #getEndpoint()} + "/" + {@link #getId()}
*/
@JsonIgnore
- public String getIdentityEndPoint() {
+ public String getIdentityEndpoint() {
String id = getId();
if (StringUtils.isBlank(id))
return null;
@@ -132,14 +132,14 @@
* <p>
* Note that the result does not include the prefix: <code>http://hostname:port</code>
*
- * @return {@link #URI_CONTEXT} + {@link #URI_VERSION} + {@link #getIdentityEndPoint()}
+ * @return {@link #URI_CONTEXT} + {@link #URI_VERSION} + {@link #getIdentityEndpoint()}
*/
@JsonProperty(access = JsonProperty.Access.READ_ONLY)
public String getUri() {
- if (getIdentityEndPoint() == null) {
+ if (getIdentityEndpoint() == null) {
return null;
}
- return URI_CONTEXT + URI_VERSION + getIdentityEndPoint();
+ return URI_CONTEXT + URI_VERSION + getIdentityEndpoint();
}
/**
@@ -150,5 +150,4 @@
public boolean isGlobalRuntime() {
return false;
}
-
}
diff --git a/geode-management/src/main/java/org/apache/geode/management/configuration/MemberConfig.java b/geode-management/src/main/java/org/apache/geode/management/configuration/Member.java
similarity index 87%
rename from geode-management/src/main/java/org/apache/geode/management/configuration/MemberConfig.java
rename to geode-management/src/main/java/org/apache/geode/management/configuration/Member.java
index c5ec6cf..9a014c8 100644
--- a/geode-management/src/main/java/org/apache/geode/management/configuration/MemberConfig.java
+++ b/geode-management/src/main/java/org/apache/geode/management/configuration/Member.java
@@ -20,9 +20,9 @@
import org.apache.geode.management.runtime.MemberInformation;
@Experimental
-public class MemberConfig extends GroupableConfiguration<MemberInformation> {
+public class Member extends GroupableConfiguration<MemberInformation> {
- public static final String MEMBER_CONFIG_ENDPOINT = "/members";
+ public static final String MEMBER_ENDPOINT = "/members";
private String id;
@@ -40,6 +40,6 @@
@Override
public String getEndpoint() {
- return MEMBER_CONFIG_ENDPOINT;
+ return MEMBER_ENDPOINT;
}
}
diff --git a/geode-management/src/main/java/org/apache/geode/management/configuration/Pdx.java b/geode-management/src/main/java/org/apache/geode/management/configuration/Pdx.java
index 27d1a84..fce9448 100644
--- a/geode-management/src/main/java/org/apache/geode/management/configuration/Pdx.java
+++ b/geode-management/src/main/java/org/apache/geode/management/configuration/Pdx.java
@@ -50,7 +50,7 @@
}
@Override
- public String getIdentityEndPoint() {
+ public String getIdentityEndpoint() {
return PDX_ENDPOINT;
}
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 48661fe..8eedcc0 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
@@ -15,7 +15,6 @@
package org.apache.geode.management.internal;
-
import static org.apache.geode.management.configuration.AbstractConfiguration.URI_VERSION;
import static org.apache.geode.management.internal.Constants.INCLUDE_CLASS_HEADER;
@@ -32,6 +31,7 @@
import org.springframework.web.client.RestTemplate;
import org.apache.geode.management.api.ClusterManagementException;
+import org.apache.geode.management.api.ClusterManagementGetResult;
import org.apache.geode.management.api.ClusterManagementListOperationsResult;
import org.apache.geode.management.api.ClusterManagementListResult;
import org.apache.geode.management.api.ClusterManagementOperation;
@@ -48,10 +48,10 @@
* management service as used by a Java client.
* <p/>
* In order to manipulate Geode components (Regions, etc.) clients can construct instances of {@link
- * CacheElement}s and call the corresponding
- * {@link ClientClusterManagementService#create(CacheElement)},
- * {@link ClientClusterManagementService#delete(CacheElement)} or
- * {@link ClientClusterManagementService#update(CacheElement)} method. The returned {@link
+ * AbstractConfiguration}s and call the corresponding
+ * {@link ClientClusterManagementService#create(AbstractConfiguration)},
+ * {@link ClientClusterManagementService#delete(AbstractConfiguration)} or
+ * {@link ClientClusterManagementService#update(AbstractConfiguration)} method. The returned {@link
* ClusterManagementResult} will contain all necessary information about the outcome of the call.
* This will include the result of persisting the config as part of the cluster configuration as
* well as creating the actual component in the cluster.
@@ -74,7 +74,7 @@
@Override
@SuppressWarnings("unchecked")
public <T extends AbstractConfiguration<?>> ClusterManagementRealizationResult create(T config) {
- String endPoint = getEndpoint(config);
+ String endPoint = URI_VERSION + config.getEndpoint();
// the response status code info is represented by the ClusterManagementResult.errorCode already
return assertSuccessful(restTemplate
.exchange(endPoint, HttpMethod.POST, makeEntity(config),
@@ -92,7 +92,7 @@
@SuppressWarnings("unchecked")
public <T extends AbstractConfiguration<?>> ClusterManagementRealizationResult delete(
T config) {
- String uri = getIdentityEndPoint(config);
+ String uri = getIdentityEndpoint(config);
return assertSuccessful(restTemplate
.exchange(uri + "?group={group}",
HttpMethod.DELETE,
@@ -112,7 +112,7 @@
@SuppressWarnings("unchecked")
public <T extends AbstractConfiguration<R>, R extends RuntimeInfo> ClusterManagementListResult<T, R> list(
T config) {
- String endPoint = getEndpoint(config);
+ String endPoint = URI_VERSION + config.getEndpoint();
return assertSuccessful(restTemplate
.exchange(endPoint + "/?id={id}&group={group}", HttpMethod.GET, makeEntity(config),
ClusterManagementListResult.class, config.getId(), config.getGroup())
@@ -121,12 +121,12 @@
@Override
@SuppressWarnings("unchecked")
- public <T extends AbstractConfiguration<R>, R extends RuntimeInfo> ClusterManagementListResult<T, R> get(
+ public <T extends AbstractConfiguration<R>, R extends RuntimeInfo> ClusterManagementGetResult<T, R> get(
T config) {
return assertSuccessful(restTemplate
- .exchange(getIdentityEndPoint(config), HttpMethod.GET, makeEntity(config),
- ClusterManagementListResult.class)
+ .exchange(getIdentityEndpoint(config), HttpMethod.GET, makeEntity(config),
+ ClusterManagementGetResult.class)
.getBody());
}
@@ -183,26 +183,21 @@
return s;
}
- private String getEndpoint(AbstractConfiguration config) {
- String endpoint = config.getEndpoint();
- if (endpoint == null) {
- throw new IllegalArgumentException(
- "unable to construct the uri with the current configuration.");
- }
- return URI_VERSION + endpoint;
- }
-
- private String getIdentityEndPoint(AbstractConfiguration config) {
- String uri = config.getIdentityEndPoint();
+ private String getIdentityEndpoint(AbstractConfiguration config) {
+ String uri = config.getIdentityEndpoint();
if (uri == null) {
throw new IllegalArgumentException(
- "unable to construct the uri with the current configuration.");
+ "Unable to construct the URI with the current configuration.");
}
return URI_VERSION + uri;
}
private <T extends ClusterManagementResult> T assertSuccessful(T result) {
- if (!result.isSuccessful()) {
+ if (result == null) {
+ ClusterManagementResult somethingVeryBadHappened = new ClusterManagementResult(
+ ClusterManagementResult.StatusCode.ERROR, "Unable to parse server response.");
+ throw new ClusterManagementException(somethingVeryBadHappened);
+ } else if (!result.isSuccessful()) {
throw new ClusterManagementException(result);
}
return result;
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/MemberTest.java
similarity index 93%
rename from geode-management/src/test/java/org/apache/geode/management/configuration/MemberConfigTest.java
rename to geode-management/src/test/java/org/apache/geode/management/configuration/MemberTest.java
index aa54b27..857c2d8 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/MemberTest.java
@@ -20,11 +20,11 @@
import org.junit.Test;
-public class MemberConfigTest {
+public class MemberTest {
@Test
public void getUri() {
- MemberConfig config = new MemberConfig();
+ Member config = new Member();
config.setId("memberA");
assertThat(config.getEndpoint()).isEqualTo("/members");
assertThat(config.getUri())
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 a33f239..c84d317 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
@@ -39,7 +39,7 @@
import org.apache.geode.management.api.ClusterManagementListResult;
import org.apache.geode.management.api.ClusterManagementResult;
import org.apache.geode.management.api.ClusterManagementService;
-import org.apache.geode.management.configuration.MemberConfig;
+import org.apache.geode.management.configuration.Member;
import org.apache.geode.management.internal.rest.LocatorLauncherContextLoader;
import org.apache.geode.management.internal.rest.LocatorWebContext;
import org.apache.geode.management.runtime.MemberInformation;
@@ -72,8 +72,8 @@
@Test
@WithMockUser
public void listAllMembers() {
- MemberConfig memberConfig = new MemberConfig();
- ClusterManagementListResult<MemberConfig, MemberInformation> result = client.list(memberConfig);
+ Member member = new Member();
+ ClusterManagementListResult<Member, MemberInformation> result = client.list(member);
assertThat(result.isSuccessful()).isTrue();
assertThat(result.getStatusCode()).isEqualTo(ClusterManagementResult.StatusCode.OK);
@@ -105,9 +105,9 @@
@Test
@WithMockUser
public void getOneMember() {
- MemberConfig config = new MemberConfig();
+ Member config = new Member();
config.setId("server-1");
- ClusterManagementListResult<MemberConfig, MemberInformation> result = client.list(config);
+ ClusterManagementListResult<Member, MemberInformation> result = client.list(config);
assertThat(result.isSuccessful()).isTrue();
assertThat(result.getStatusCode()).isEqualTo(ClusterManagementResult.StatusCode.OK);
@@ -119,9 +119,9 @@
@Test
@WithMockUser
public void getMemberStatus() {
- MemberConfig config = new MemberConfig();
+ Member config = new Member();
config.setId("locator-0");
- ClusterManagementListResult<MemberConfig, MemberInformation> result = client.list(config);
+ ClusterManagementListResult<Member, MemberInformation> result = client.list(config);
assertThat(result.isSuccessful()).isTrue();
assertThat(result.getStatusCode()).isEqualTo(ClusterManagementResult.StatusCode.OK);
@@ -137,10 +137,10 @@
@Test
@WithMockUser
public void noMatchWithJavaAPI() {
- MemberConfig config = new MemberConfig();
+ Member config = new Member();
// look for a member with a non-existent id
config.setId("server");
- ClusterManagementListResult<MemberConfig, MemberInformation> result = client.list(config);
+ ClusterManagementListResult<Member, MemberInformation> result = client.list(config);
assertThat(result.isSuccessful()).isTrue();
assertThat(result.getStatusCode())
.isEqualTo(ClusterManagementResult.StatusCode.OK);
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 4b074a0..36fdce4 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
@@ -89,6 +89,8 @@
"CLUSTER:READ:QUERY"));
testContexts.add(new TestContext(get("/experimental/gateways/receivers"), "CLUSTER:READ"));
+ testContexts
+ .add(new TestContext(get("/experimental/gateways/receivers/receiver1"), "CLUSTER:READ"));
testContexts.add(new TestContext(post("/experimental/gateways/receivers"), "CLUSTER:MANAGE")
.setContent(mapper.writeValueAsString(new GatewayReceiverConfig())));
@@ -162,6 +164,10 @@
.andExpect(jsonPath("$.statusCode", is("OK")))
.andExpect(jsonPath("$.statusMessage",
is("Successfully updated configuration for cluster.")));
+ // cleanup in order to pass stressNew
+ context.perform(delete("/experimental/regions/" + REGION)
+ .with(httpBasic("dataManage", "dataManage")))
+ .andExpect(status().is2xxSuccessful());
}
private static class TestContext {
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 9e2eb31..e666ea3 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
@@ -84,6 +84,23 @@
}
@Test
+ public void getLocator() throws Exception {
+ webContext.perform(get("/experimental/members/locator-0"))
+ .andDo(print())
+ .andExpect(status().isOk())
+ .andExpect(jsonPath("$.memberStatuses").doesNotExist())
+ .andExpect(jsonPath("$.statusCode", is("OK")))
+ .andExpect(jsonPath("$.result.runtimeInfo[*].memberName", contains("locator-0")))
+ .andExpect(jsonPath("$.result.runtimeInfo[0].locatorPort", greaterThan(0)))
+ .andExpect(jsonPath("$.result.runtimeInfo[0].server", is(false)))
+ .andExpect(jsonPath("$.result.runtimeInfo[0].status", is("online")))
+ .andExpect(jsonPath("$.result.runtimeInfo[0].cacheServerInfo").doesNotExist())
+ .andExpect(jsonPath("$.result.runtimeInfo[0].logFilePath", endsWith("locator-0.log")))
+ .andExpect(jsonPath("$.result.runtimeInfo[0].workingDirPath", notNullValue()))
+ .andExpect(jsonPath("$.result.runtimeInfo[0].heapUsage", greaterThan(0)));
+ }
+
+ @Test
public void listServer() throws Exception {
webContext.perform(get("/experimental/members")
.param("id", "server-1"))
diff --git a/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/GatewayManagementController.java b/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/GatewayManagementController.java
index 2041103..c5ee42c 100644
--- a/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/GatewayManagementController.java
+++ b/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/GatewayManagementController.java
@@ -24,12 +24,14 @@
import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
+import org.apache.geode.management.api.ClusterManagementGetResult;
import org.apache.geode.management.api.ClusterManagementListResult;
import org.apache.geode.management.api.ClusterManagementResult;
import org.apache.geode.management.configuration.GatewayReceiver;
@@ -52,6 +54,17 @@
return clusterManagementService.list(filter);
}
+ @ApiOperation(value = "get gateway-receiver")
+ @PreAuthorize("@securityService.authorize('CLUSTER', 'READ')")
+ @RequestMapping(method = RequestMethod.GET, value = GATEWAY_RECEIVERS_ENDPOINTS + "/{id}")
+ @ResponseBody
+ public ClusterManagementGetResult<GatewayReceiver, GatewayReceiverInfo> getGatewayReceiver(
+ @PathVariable(name = "id") String id) {
+ GatewayReceiver config = new GatewayReceiver();
+ config.setGroup(id);
+ return clusterManagementService.get(config);
+ }
+
@ApiOperation(value = "create gateway-receiver")
@PreAuthorize("@securityService.authorize('CLUSTER', 'MANAGE')")
@RequestMapping(method = RequestMethod.POST, value = GATEWAY_RECEIVERS_ENDPOINTS)
@@ -59,7 +72,6 @@
@RequestBody GatewayReceiver gatewayReceiverConfig) {
ClusterManagementResult result =
clusterManagementService.create(gatewayReceiverConfig);
- return new ResponseEntity<>(result,
- result.isSuccessful() ? HttpStatus.CREATED : HttpStatus.INTERNAL_SERVER_ERROR);
+ return new ResponseEntity<>(result, HttpStatus.CREATED);
}
}
diff --git a/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/MemberManagementController.java b/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/MemberManagementController.java
index 83c8e4f..6683c4b 100644
--- a/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/MemberManagementController.java
+++ b/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/MemberManagementController.java
@@ -15,25 +15,22 @@
package org.apache.geode.management.internal.rest.controllers;
-import static org.apache.geode.management.configuration.MemberConfig.MEMBER_CONFIG_ENDPOINT;
+import static org.apache.geode.management.configuration.Member.MEMBER_ENDPOINT;
import static org.apache.geode.management.internal.rest.controllers.AbstractManagementController.MANAGEMENT_API_VERSION;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.StringUtils;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
-import org.apache.geode.management.api.ClusterManagementException;
+import org.apache.geode.management.api.ClusterManagementGetResult;
import org.apache.geode.management.api.ClusterManagementListResult;
-import org.apache.geode.management.api.ClusterManagementResult;
-import org.apache.geode.management.api.ClusterManagementResult.StatusCode;
-import org.apache.geode.management.configuration.MemberConfig;
+import org.apache.geode.management.configuration.Member;
import org.apache.geode.management.runtime.MemberInformation;
@Controller("members")
@@ -41,39 +38,28 @@
public class MemberManagementController extends AbstractManagementController {
@ApiOperation(value = "get member")
@PreAuthorize("@securityService.authorize('CLUSTER', 'READ')")
- @RequestMapping(method = RequestMethod.GET, value = MEMBER_CONFIG_ENDPOINT + "/{id}")
- public ResponseEntity<ClusterManagementListResult<MemberConfig, MemberInformation>> getMember(
+ @RequestMapping(method = RequestMethod.GET, value = MEMBER_ENDPOINT + "/{id}")
+ @ResponseBody
+ public ClusterManagementGetResult<Member, MemberInformation> getMember(
@PathVariable(name = "id") String id) {
- MemberConfig config = new MemberConfig();
+ Member config = new Member();
config.setId(id);
- ClusterManagementListResult<MemberConfig, MemberInformation> result =
- clusterManagementService.list(config);
- if (result.getRuntimeResult().size() == 0) {
- throw new ClusterManagementException(new ClusterManagementResult(StatusCode.ENTITY_NOT_FOUND,
- "Member '" + config.getId() + "' does not exist."));
- }
-
- return new ResponseEntity<>(result,
- result.isSuccessful() ? HttpStatus.OK : HttpStatus.INTERNAL_SERVER_ERROR);
+ return clusterManagementService.get(config);
}
@ApiOperation(value = "list members")
@PreAuthorize("@securityService.authorize('CLUSTER', 'READ')")
- @RequestMapping(method = RequestMethod.GET, value = MEMBER_CONFIG_ENDPOINT)
- public ResponseEntity<ClusterManagementListResult<MemberConfig, MemberInformation>> listMembers(
+ @RequestMapping(method = RequestMethod.GET, value = MEMBER_ENDPOINT)
+ @ResponseBody
+ public ClusterManagementListResult<Member, MemberInformation> listMembers(
@RequestParam(required = false) String id, @RequestParam(required = false) String group) {
- MemberConfig filter = new MemberConfig();
+ Member filter = new Member();
if (StringUtils.isNotBlank(id)) {
filter.setId(id);
}
if (StringUtils.isNotBlank(group)) {
filter.setGroup(group);
}
- ClusterManagementListResult<MemberConfig, MemberInformation> result =
- clusterManagementService.list(filter);
-
- return new ResponseEntity<>(result,
- result.isSuccessful() ? HttpStatus.OK : HttpStatus.INTERNAL_SERVER_ERROR);
+ return clusterManagementService.list(filter);
}
-
}
diff --git a/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/PdxManagementController.java b/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/PdxManagementController.java
index 4e310ed..34618dc 100644
--- a/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/PdxManagementController.java
+++ b/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/PdxManagementController.java
@@ -48,6 +48,6 @@
@RequestBody Pdx pdxType) {
ClusterManagementResult result = clusterManagementService.create(pdxType);
return new ResponseEntity<>(result,
- result.isSuccessful() ? HttpStatus.CREATED : HttpStatus.INTERNAL_SERVER_ERROR);
+ HttpStatus.CREATED);
}
}
diff --git a/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/RebalanceOperationController.java b/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/RebalanceOperationController.java
index 8ceff8a..aeb930c 100644
--- a/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/RebalanceOperationController.java
+++ b/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/RebalanceOperationController.java
@@ -50,8 +50,7 @@
@RequestBody RebalanceOperation operation) {
ClusterManagementOperationResult<RebalanceResult> result =
clusterManagementService.start(new RebalanceOperationWithOperator(operation));
- return new ResponseEntity<>(result,
- result.isSuccessful() ? HttpStatus.ACCEPTED : HttpStatus.INTERNAL_SERVER_ERROR);
+ return new ResponseEntity<>(result, HttpStatus.ACCEPTED);
}
@ApiOperation(value = "list rebalances")
diff --git a/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/RegionManagementController.java b/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/RegionManagementController.java
index 66a0c90..dcd705a 100644
--- a/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/RegionManagementController.java
+++ b/geode-web-management/src/main/java/org/apache/geode/management/internal/rest/controllers/RegionManagementController.java
@@ -18,8 +18,6 @@
import static org.apache.geode.management.configuration.Region.REGION_CONFIG_ENDPOINT;
import static org.apache.geode.management.internal.rest.controllers.AbstractManagementController.MANAGEMENT_API_VERSION;
-import java.util.List;
-
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
@@ -35,11 +33,9 @@
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
-import org.apache.geode.management.api.ClusterManagementException;
+import org.apache.geode.management.api.ClusterManagementGetResult;
import org.apache.geode.management.api.ClusterManagementListResult;
import org.apache.geode.management.api.ClusterManagementResult;
-import org.apache.geode.management.api.ClusterManagementResult.StatusCode;
-import org.apache.geode.management.api.ConfigurationResult;
import org.apache.geode.management.configuration.Index;
import org.apache.geode.management.configuration.Region;
import org.apache.geode.management.runtime.RuntimeInfo;
@@ -64,7 +60,7 @@
ClusterManagementResult result =
clusterManagementService.create(regionConfig);
return new ResponseEntity<>(result,
- result.isSuccessful() ? HttpStatus.CREATED : HttpStatus.INTERNAL_SERVER_ERROR);
+ HttpStatus.CREATED);
}
@ApiOperation(value = "list regions")
@@ -87,7 +83,7 @@
@ApiOperation(value = "get region")
@RequestMapping(method = RequestMethod.GET, value = REGION_CONFIG_ENDPOINT + "/{id}")
@ResponseBody
- public ClusterManagementListResult<Region, RuntimeRegionInfo> getRegion(
+ public ClusterManagementGetResult<Region, RuntimeRegionInfo> getRegion(
@PathVariable(name = "id") String id) {
securityService.authorize(Resource.CLUSTER, Operation.READ, id);
Region config = new Region();
@@ -145,23 +141,13 @@
value = REGION_CONFIG_ENDPOINT + "/{regionName}/indexes/{id}")
@ResponseBody
@PreAuthorize("@securityService.authorize('CLUSTER', 'READ', 'QUERY')")
- public ClusterManagementListResult<Index, RuntimeInfo> getIndex(
+ public ClusterManagementGetResult<Index, RuntimeInfo> getIndex(
@PathVariable String regionName,
@PathVariable String id) {
- ClusterManagementListResult<Index, RuntimeInfo> result = listIndex(regionName, id);
- List<ConfigurationResult<Index, RuntimeInfo>> indexList = result.getResult();
- if (indexList.size() == 0) {
- throw new ClusterManagementException(new ClusterManagementResult(StatusCode.ENTITY_NOT_FOUND,
- "Index '" + id + "' does not exist in region '" + regionName + "'."));
- }
-
- if (indexList.size() > 1) {
- throw new ClusterManagementException(
- new ClusterManagementResult(StatusCode.ERROR, "More than one index found."));
- }
-
- result.setResult(indexList);
- return result;
+ Index filter = new Index();
+ filter.setRegionPath(regionName);
+ filter.setName(id);
+ return clusterManagementService.get(filter);
}
}
diff --git a/geode-web-management/src/test/java/org/apache/geode/management/internal/rest/controllers/ManagementControllerAdviceTest.java b/geode-web-management/src/test/java/org/apache/geode/management/internal/rest/controllers/ManagementControllerAdviceTest.java
index 33ba293..80e1bba 100644
--- a/geode-web-management/src/test/java/org/apache/geode/management/internal/rest/controllers/ManagementControllerAdviceTest.java
+++ b/geode-web-management/src/test/java/org/apache/geode/management/internal/rest/controllers/ManagementControllerAdviceTest.java
@@ -25,7 +25,7 @@
@Test
public void removesClassAttributeWhenThereAreOtherAttributes() {
String before =
- "{\"statusCode\":\"OK\",\"statusMessage\":null,\"uri\":null,\"result\":[{\"configuration\":{\"class\":\"org.apache.geode.management.configuration.MemberConfig\",\"group\":null,\"id\":\"locator-0\",\"uri\":\"/management/experimental/members/locator-0\"},\"runtimeInfo\":[{\"class\":\"org.apache.geode.management.runtime.MemberInformation\",\"memberName\":\"locator-0\",\"id\":\"10.0.0.2(locator-0:81136:locator)<ec><v0>:41000\",\"workingDirPath\":\"/geode/geode-web-management\",\"groups\":\"\",\"logFilePath\":\"/private/var/folders/y_/d_csfs5966gdq5rgt_n6wy040000gn/T/junit8812600995087886644/locator-0.log\",\"statArchiveFilePath\":\"/geode/geode-web-management\",\"serverBindAddress\":\"\",\"locators\":\"10.0.0.2[51393]\",\"status\":\"online\",\"heapUsage\":304,\"maxHeapSize\":3641,\"initHeapSize\":256,\"cacheXmlFilePath\":\"/geode/geode-web-management\",\"host\":\"10.0.0.2\",\"processId\":81136,\"locatorPort\":51393,\"httpServicePort\":7070,\"httpServiceBindAddress\":\"\",\"clientCount\":0,\"cpuUsage\":0.0,\"hostedRegions\":[],\"offHeapMemorySize\":\"\",\"webSSL\":false,\"server\":false,\"cacheServerInfo\":[],\"coordinator\":true,\"secured\":false}]}]}";
+ "{\"statusCode\":\"OK\",\"statusMessage\":null,\"uri\":null,\"result\":[{\"configuration\":{\"class\":\"org.apache.geode.management.configuration.Member\",\"group\":null,\"id\":\"locator-0\",\"uri\":\"/management/experimental/members/locator-0\"},\"runtimeInfo\":[{\"class\":\"org.apache.geode.management.runtime.MemberInformation\",\"memberName\":\"locator-0\",\"id\":\"10.0.0.2(locator-0:81136:locator)<ec><v0>:41000\",\"workingDirPath\":\"/geode/geode-web-management\",\"groups\":\"\",\"logFilePath\":\"/private/var/folders/y_/d_csfs5966gdq5rgt_n6wy040000gn/T/junit8812600995087886644/locator-0.log\",\"statArchiveFilePath\":\"/geode/geode-web-management\",\"serverBindAddress\":\"\",\"locators\":\"10.0.0.2[51393]\",\"status\":\"online\",\"heapUsage\":304,\"maxHeapSize\":3641,\"initHeapSize\":256,\"cacheXmlFilePath\":\"/geode/geode-web-management\",\"host\":\"10.0.0.2\",\"processId\":81136,\"locatorPort\":51393,\"httpServicePort\":7070,\"httpServiceBindAddress\":\"\",\"clientCount\":0,\"cpuUsage\":0.0,\"hostedRegions\":[],\"offHeapMemorySize\":\"\",\"webSSL\":false,\"server\":false,\"cacheServerInfo\":[],\"coordinator\":true,\"secured\":false}]}]}";
String after =
"{\"statusCode\":\"OK\",\"statusMessage\":null,\"uri\":null,\"result\":[{\"configuration\":{\"group\":null,\"id\":\"locator-0\",\"uri\":\"/management/experimental/members/locator-0\"},\"runtimeInfo\":[{\"memberName\":\"locator-0\",\"id\":\"10.0.0.2(locator-0:81136:locator)<ec><v0>:41000\",\"workingDirPath\":\"/geode/geode-web-management\",\"groups\":\"\",\"logFilePath\":\"/private/var/folders/y_/d_csfs5966gdq5rgt_n6wy040000gn/T/junit8812600995087886644/locator-0.log\",\"statArchiveFilePath\":\"/geode/geode-web-management\",\"serverBindAddress\":\"\",\"locators\":\"10.0.0.2[51393]\",\"status\":\"online\",\"heapUsage\":304,\"maxHeapSize\":3641,\"initHeapSize\":256,\"cacheXmlFilePath\":\"/geode/geode-web-management\",\"host\":\"10.0.0.2\",\"processId\":81136,\"locatorPort\":51393,\"httpServicePort\":7070,\"httpServiceBindAddress\":\"\",\"clientCount\":0,\"cpuUsage\":0.0,\"hostedRegions\":[],\"offHeapMemorySize\":\"\",\"webSSL\":false,\"server\":false,\"cacheServerInfo\":[],\"coordinator\":true,\"secured\":false}]}]}";
assertThat(removeClassFromJsonText(before)).isEqualTo(after);
@@ -34,7 +34,7 @@
@Test
public void removesClassAttributeAndContainingObjectWhenThereAreNoOtherAttributes() {
String before =
- "{\"statusCode\":\"OK\",\"result\":[{\"configuration\":{\"class\":\"org.apache.geode.management.configuration.MemberConfig\"},\"runtimeInfo\":[{\"class\":\"org.apache.geode.management.runtime.MemberInformation\",\"memberName\":\"locator-0\",\"id\":\"10.0.0.2(locator-0:81569:locator)<ec><v0>:41000\",\"workingDirPath\":\"/geode/geode-web-management\",\"logFilePath\":\"/private/var/folders/y_/d_csfs5966gdq5rgt_n6wy040000gn/T/junit2892068854793149212/locator-0.log\",\"statArchiveFilePath\":\"/geode/geode-web-management\",\"locators\":\"10.0.0.2[51844]\",\"status\":\"online\",\"heapUsage\":171,\"maxHeapSize\":3641,\"initHeapSize\":256,\"cacheXmlFilePath\":\"/geode/geode-web-management\",\"host\":\"10.0.0.2\",\"processId\":81569,\"locatorPort\":51844,\"httpServicePort\":7070,\"clientCount\":0,\"cpuUsage\":0.0,\"webSSL\":false,\"coordinator\":true,\"server\":false,\"secured\":false},{\"class\":\"org.apache.geode.management.runtime.MemberInformation\",\"memberName\":\"server-1\",\"id\":\"10.0.0.2(server-1:81573)<v1>:41002\",\"workingDirPath\":\"/geode/geode-web-management/dunit/vm1\",\"groups\":\"group-1,group-2\",\"logFilePath\":\"/geode/geode-web-management/dunit/vm1/server-1.log\",\"statArchiveFilePath\":\"/geode/geode-web-management/dunit/vm1\",\"locators\":\"localhost[51844]\",\"heapUsage\":29,\"maxHeapSize\":455,\"initHeapSize\":256,\"cacheXmlFilePath\":\"/geode/geode-web-management/dunit/vm1/cache.xml\",\"host\":\"10.0.0.2\",\"processId\":81573,\"locatorPort\":0,\"httpServicePort\":0,\"clientCount\":0,\"cpuUsage\":0.0,\"webSSL\":false,\"coordinator\":false,\"server\":true,\"cacheServerInfo\":[{\"port\":51888,\"maxConnections\":800,\"maxThreads\":0,\"running\":true}],\"secured\":false}]}]}";
+ "{\"statusCode\":\"OK\",\"result\":[{\"configuration\":{\"class\":\"org.apache.geode.management.configuration.Member\"},\"runtimeInfo\":[{\"class\":\"org.apache.geode.management.runtime.MemberInformation\",\"memberName\":\"locator-0\",\"id\":\"10.0.0.2(locator-0:81569:locator)<ec><v0>:41000\",\"workingDirPath\":\"/geode/geode-web-management\",\"logFilePath\":\"/private/var/folders/y_/d_csfs5966gdq5rgt_n6wy040000gn/T/junit2892068854793149212/locator-0.log\",\"statArchiveFilePath\":\"/geode/geode-web-management\",\"locators\":\"10.0.0.2[51844]\",\"status\":\"online\",\"heapUsage\":171,\"maxHeapSize\":3641,\"initHeapSize\":256,\"cacheXmlFilePath\":\"/geode/geode-web-management\",\"host\":\"10.0.0.2\",\"processId\":81569,\"locatorPort\":51844,\"httpServicePort\":7070,\"clientCount\":0,\"cpuUsage\":0.0,\"webSSL\":false,\"coordinator\":true,\"server\":false,\"secured\":false},{\"class\":\"org.apache.geode.management.runtime.MemberInformation\",\"memberName\":\"server-1\",\"id\":\"10.0.0.2(server-1:81573)<v1>:41002\",\"workingDirPath\":\"/geode/geode-web-management/dunit/vm1\",\"groups\":\"group-1,group-2\",\"logFilePath\":\"/geode/geode-web-management/dunit/vm1/server-1.log\",\"statArchiveFilePath\":\"/geode/geode-web-management/dunit/vm1\",\"locators\":\"localhost[51844]\",\"heapUsage\":29,\"maxHeapSize\":455,\"initHeapSize\":256,\"cacheXmlFilePath\":\"/geode/geode-web-management/dunit/vm1/cache.xml\",\"host\":\"10.0.0.2\",\"processId\":81573,\"locatorPort\":0,\"httpServicePort\":0,\"clientCount\":0,\"cpuUsage\":0.0,\"webSSL\":false,\"coordinator\":false,\"server\":true,\"cacheServerInfo\":[{\"port\":51888,\"maxConnections\":800,\"maxThreads\":0,\"running\":true}],\"secured\":false}]}]}";
String after =
"{\"statusCode\":\"OK\",\"result\":[{\"runtimeInfo\":[{\"memberName\":\"locator-0\",\"id\":\"10.0.0.2(locator-0:81569:locator)<ec><v0>:41000\",\"workingDirPath\":\"/geode/geode-web-management\",\"logFilePath\":\"/private/var/folders/y_/d_csfs5966gdq5rgt_n6wy040000gn/T/junit2892068854793149212/locator-0.log\",\"statArchiveFilePath\":\"/geode/geode-web-management\",\"locators\":\"10.0.0.2[51844]\",\"status\":\"online\",\"heapUsage\":171,\"maxHeapSize\":3641,\"initHeapSize\":256,\"cacheXmlFilePath\":\"/geode/geode-web-management\",\"host\":\"10.0.0.2\",\"processId\":81569,\"locatorPort\":51844,\"httpServicePort\":7070,\"clientCount\":0,\"cpuUsage\":0.0,\"webSSL\":false,\"coordinator\":true,\"server\":false,\"secured\":false},{\"memberName\":\"server-1\",\"id\":\"10.0.0.2(server-1:81573)<v1>:41002\",\"workingDirPath\":\"/geode/geode-web-management/dunit/vm1\",\"groups\":\"group-1,group-2\",\"logFilePath\":\"/geode/geode-web-management/dunit/vm1/server-1.log\",\"statArchiveFilePath\":\"/geode/geode-web-management/dunit/vm1\",\"locators\":\"localhost[51844]\",\"heapUsage\":29,\"maxHeapSize\":455,\"initHeapSize\":256,\"cacheXmlFilePath\":\"/geode/geode-web-management/dunit/vm1/cache.xml\",\"host\":\"10.0.0.2\",\"processId\":81573,\"locatorPort\":0,\"httpServicePort\":0,\"clientCount\":0,\"cpuUsage\":0.0,\"webSSL\":false,\"coordinator\":false,\"server\":true,\"cacheServerInfo\":[{\"port\":51888,\"maxConnections\":800,\"maxThreads\":0,\"running\":true}],\"secured\":false}]}]}";
assertThat(removeClassFromJsonText(before)).isEqualTo(after);