This is an automated email from the ASF dual-hosted git repository. jxue pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/helix.git
commit a827f8fabd0eb6971aebe771c2d21c9b53c97214 Author: narendly <[email protected]> AuthorDate: Tue Feb 26 17:20:46 2019 -0800 [HELIX-807] REST: Add get maintenance signal endpoint Changelist: 1. Add get maintenance signal endpoint 2. Add a test --- .../rest/server/resources/AbstractResource.java | 1 - .../server/resources/helix/ClusterAccessor.java | 22 ++++++++++++++++++-- .../helix/rest/server/TestClusterAccessor.java | 24 +++++++++++++++++----- 3 files changed, 39 insertions(+), 8 deletions(-) diff --git a/helix-rest/src/main/java/org/apache/helix/rest/server/resources/AbstractResource.java b/helix-rest/src/main/java/org/apache/helix/rest/server/resources/AbstractResource.java index f5734a2..3b7d995 100644 --- a/helix-rest/src/main/java/org/apache/helix/rest/server/resources/AbstractResource.java +++ b/helix-rest/src/main/java/org/apache/helix/rest/server/resources/AbstractResource.java @@ -46,7 +46,6 @@ public class AbstractResource { id, disabled, history, - maintenanceHistory, count, error } diff --git a/helix-rest/src/main/java/org/apache/helix/rest/server/resources/helix/ClusterAccessor.java b/helix-rest/src/main/java/org/apache/helix/rest/server/resources/helix/ClusterAccessor.java index c81f467..4427d50 100644 --- a/helix-rest/src/main/java/org/apache/helix/rest/server/resources/helix/ClusterAccessor.java +++ b/helix-rest/src/main/java/org/apache/helix/rest/server/resources/helix/ClusterAccessor.java @@ -47,6 +47,7 @@ import org.apache.helix.model.ClusterConfig; import org.apache.helix.model.ControllerHistory; import org.apache.helix.model.HelixConfigScope; import org.apache.helix.model.LiveInstance; +import org.apache.helix.model.MaintenanceSignal; import org.apache.helix.model.Message; import org.apache.helix.model.StateModelDefinition; import org.apache.helix.model.builder.HelixConfigScopeBuilder; @@ -68,7 +69,10 @@ public class ClusterAccessor extends AbstractHelixResource { maintenance, messages, stateModelDefinitions, - clusters + clusters, + maintenanceSignal, + maintenanceHistory, + clusterName } @GET @@ -342,6 +346,20 @@ public class ClusterAccessor extends AbstractHelixResource { } @GET + @Path("{clusterId}/controller/maintenanceSignal") + public Response getClusterMaintenanceSignal(@PathParam("clusterId") String clusterId) { + HelixDataAccessor dataAccessor = getDataAccssor(clusterId); + MaintenanceSignal maintenanceSignal = + dataAccessor.getProperty(dataAccessor.keyBuilder().maintenance()); + if (maintenanceSignal != null) { + Map<String, String> maintenanceInfo = maintenanceSignal.getRecord().getSimpleFields(); + maintenanceInfo.put(ClusterProperties.clusterName.name(), clusterId); + return JSONRepresentation(maintenanceInfo); + } + return notFound(String.format("Cluster %s is not in maintenance mode!", clusterId)); + } + + @GET @Path("{clusterId}/controller/messages") public Response getClusterControllerMessages(@PathParam("clusterId") String clusterId) { HelixDataAccessor dataAccessor = getDataAccssor(clusterId); @@ -425,7 +443,7 @@ public class ClusterAccessor extends AbstractHelixResource { historyRecord != null ? historyRecord.getHistoryList() : Collections.emptyList()); break; case MAINTENANCE: - history.put(Properties.maintenanceHistory.name(), + history.put(ClusterProperties.maintenanceHistory.name(), historyRecord != null ? historyRecord.getMaintenanceHistoryList() : Collections.emptyList()); break; diff --git a/helix-rest/src/test/java/org/apache/helix/rest/server/TestClusterAccessor.java b/helix-rest/src/test/java/org/apache/helix/rest/server/TestClusterAccessor.java index 5506509..3d7577a 100644 --- a/helix-rest/src/test/java/org/apache/helix/rest/server/TestClusterAccessor.java +++ b/helix-rest/src/test/java/org/apache/helix/rest/server/TestClusterAccessor.java @@ -261,16 +261,29 @@ public class TestClusterAccessor extends AbstractTestClass { node.get(ClusterAccessor.ClusterProperties.maintenance.name()).getBooleanValue(); Assert.assertTrue(maintenance); + // Check that we could retrieve maintenance signal correctly + String signal = get("clusters/" + cluster + "/controller/maintenanceSignal", + Response.Status.OK.getStatusCode(), true); + Map<String, Object> maintenanceSignalMap = + OBJECT_MAPPER.readValue(signal, new TypeReference<HashMap<String, Object>>() { + }); + Assert.assertEquals(maintenanceSignalMap.get("TRIGGERED_BY"), "USER"); + Assert.assertEquals(maintenanceSignalMap.get("REASON"), reason); + Assert.assertNotNull(maintenanceSignalMap.get("TIMESTAMP")); + Assert.assertEquals(maintenanceSignalMap.get("clusterName"), cluster); + // disable maintenance mode post("clusters/" + cluster, ImmutableMap.of("command", "disableMaintenanceMode"), - Entity.entity("", MediaType.APPLICATION_JSON_TYPE), - Response.Status.OK.getStatusCode()); + Entity.entity("", MediaType.APPLICATION_JSON_TYPE), Response.Status.OK.getStatusCode()); // verify no longer in maintenance mode body = get("clusters/" + cluster + "/maintenance", Response.Status.OK.getStatusCode(), true); node = OBJECT_MAPPER.readTree(body); Assert.assertFalse( node.get(ClusterAccessor.ClusterProperties.maintenance.name()).getBooleanValue()); + + get("clusters/" + cluster + "/controller/maintenanceSignal", + Response.Status.NOT_FOUND.getStatusCode(), false); } @Test @@ -317,12 +330,13 @@ public class TestClusterAccessor extends AbstractTestClass { Entity.entity(reason, MediaType.APPLICATION_JSON_TYPE), Response.Status.OK.getStatusCode()); // Get the maintenance history JSON's last entry - String maintenanceHistory = - get("clusters/" + cluster + "/controller/maintenanceHistory", Response.Status.OK.getStatusCode(), true); + String maintenanceHistory = get("clusters/" + cluster + "/controller/maintenanceHistory", + Response.Status.OK.getStatusCode(), true); Map<String, Object> maintenanceHistoryMap = OBJECT_MAPPER.readValue(maintenanceHistory, new TypeReference<HashMap<String, Object>>() { }); - Object maintenanceHistoryList = maintenanceHistoryMap.get(AbstractResource.Properties.maintenanceHistory.name()); + Object maintenanceHistoryList = + maintenanceHistoryMap.get(ClusterAccessor.ClusterProperties.maintenanceHistory.name()); Assert.assertNotNull(maintenanceHistoryList); List<?> list = (List<?>) maintenanceHistoryList; Assert.assertTrue(list.size() > 0);
