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);

Reply via email to