Skip to content

Commit f3cf2dd

Browse files
Correctly state cluster is in maintenance mode when maintenance znode is empty (#2559)
helix-rest maintenanceSignal detects cluster in maintenance mode when maintenance znode is empty
1 parent 4b180a5 commit f3cf2dd

File tree

2 files changed

+36
-5
lines changed

2 files changed

+36
-5
lines changed

helix-rest/src/main/java/org/apache/helix/rest/server/resources/helix/ClusterAccessor.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -765,12 +765,16 @@ public Response getClusterMaintenanceHistory(@PathParam("clusterId") String clus
765765
@GET
766766
@Path("{clusterId}/controller/maintenanceSignal")
767767
public Response getClusterMaintenanceSignal(@PathParam("clusterId") String clusterId) {
768-
HelixDataAccessor dataAccessor = getDataAccssor(clusterId);
769-
MaintenanceSignal maintenanceSignal =
770-
dataAccessor.getProperty(dataAccessor.keyBuilder().maintenance());
771-
if (maintenanceSignal != null) {
772-
Map<String, String> maintenanceInfo = maintenanceSignal.getRecord().getSimpleFields();
768+
boolean inMaintenanceMode = getHelixAdmin().isInMaintenanceMode(clusterId);
769+
770+
if (inMaintenanceMode) {
771+
HelixDataAccessor dataAccessor = getDataAccssor(clusterId);
772+
MaintenanceSignal maintenanceSignal = dataAccessor.getProperty(dataAccessor.keyBuilder().maintenance());
773+
774+
Map<String, String> maintenanceInfo = (maintenanceSignal != null) ?
775+
maintenanceSignal.getRecord().getSimpleFields() : new HashMap<>();
773776
maintenanceInfo.put(ClusterProperties.clusterName.name(), clusterId);
777+
774778
return JSONRepresentation(maintenanceInfo);
775779
}
776780
return notFound(String.format("Cluster %s is not in maintenance mode!", clusterId));

helix-rest/src/test/java/org/apache/helix/rest/server/TestClusterAccessor.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -523,6 +523,33 @@ public void testEnableDisableMaintenanceMode() throws IOException {
523523
}
524524

525525
@Test(dependsOnMethods = "testEnableDisableMaintenanceMode")
526+
public void testEmptyMaintenanceSignal() throws IOException {
527+
System.out.println("Start test :" + TestHelper.getTestMethodName());
528+
String cluster = _clusters.iterator().next();
529+
530+
// Create empty maintenance znode
531+
ZNRecord record = new ZNRecord("test_maintenance_node");
532+
ZKUtil.createOrUpdate(_gZkClient, "/"+cluster+"/CONTROLLER/MAINTENANCE", record, true, true);
533+
534+
// Verify maintenance mode enabled
535+
Assert.assertTrue(isMaintenanceModeEnabled(cluster));
536+
get("clusters/" + cluster + "/controller/maintenanceSignal", null,
537+
Response.Status.OK.getStatusCode(), true);
538+
539+
540+
// Disable maintenance mode
541+
post("clusters/" + cluster, ImmutableMap.of("command", "disableMaintenanceMode"),
542+
Entity.entity("", MediaType.APPLICATION_JSON_TYPE), Response.Status.OK.getStatusCode());
543+
544+
// Verify no longer in maintenance mode
545+
Assert.assertFalse(isMaintenanceModeEnabled(cluster));
546+
get("clusters/" + cluster + "/controller/maintenanceSignal", null,
547+
Response.Status.NOT_FOUND.getStatusCode(), false);
548+
System.out.println("End test :" + TestHelper.getTestMethodName());
549+
550+
}
551+
552+
@Test(dependsOnMethods = "testEmptyMaintenanceSignal")
526553
public void testGetControllerLeadershipHistory() throws IOException {
527554
System.out.println("Start test :" + TestHelper.getTestMethodName());
528555
String cluster = _clusters.iterator().next();

0 commit comments

Comments
 (0)