You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@helix.apache.org by jx...@apache.org on 2018/11/01 18:44:49 UTC
helix git commit: [HELIX-779] do not clean list field in maintenance
rebalancer for new resources
Repository: helix
Updated Branches:
refs/heads/master 89f351558 -> bfaa83995
[HELIX-779] do not clean list field in maintenance rebalancer for new resources
Project: http://git-wip-us.apache.org/repos/asf/helix/repo
Commit: http://git-wip-us.apache.org/repos/asf/helix/commit/bfaa8399
Tree: http://git-wip-us.apache.org/repos/asf/helix/tree/bfaa8399
Diff: http://git-wip-us.apache.org/repos/asf/helix/diff/bfaa8399
Branch: refs/heads/master
Commit: bfaa8399529b6e63b307c1fbe60903c3ca08fbb1
Parents: 89f3515
Author: Harry Zhang <hr...@linkedin.com>
Authored: Thu Oct 4 15:50:16 2018 -0700
Committer: Harry Zhang <hr...@linkedin.com>
Committed: Thu Nov 1 10:57:44 2018 -0700
----------------------------------------------------------------------
.../rebalancer/MaintenanceRebalancer.java | 7 ++++++-
.../controller/TestClusterMaintenanceMode.java | 22 ++++++++++++++++----
2 files changed, 24 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/helix/blob/bfaa8399/helix-core/src/main/java/org/apache/helix/controller/rebalancer/MaintenanceRebalancer.java
----------------------------------------------------------------------
diff --git a/helix-core/src/main/java/org/apache/helix/controller/rebalancer/MaintenanceRebalancer.java b/helix-core/src/main/java/org/apache/helix/controller/rebalancer/MaintenanceRebalancer.java
index 3de3a3d..8bcf999 100644
--- a/helix-core/src/main/java/org/apache/helix/controller/rebalancer/MaintenanceRebalancer.java
+++ b/helix-core/src/main/java/org/apache/helix/controller/rebalancer/MaintenanceRebalancer.java
@@ -24,7 +24,12 @@ public class MaintenanceRebalancer extends SemiAutoRebalancer {
if (currentStateMap == null || currentStateMap.size() == 0) {
LOG.warn(String
.format("No new partition will be assigned for %s in maintenance mode", resourceName));
- currentIdealState.setPreferenceLists(Collections.EMPTY_MAP);
+
+ // Clear all preference lists, if the resource has not yet been rebalanced,
+ // leave it as is
+ for (List<String> pList : currentIdealState.getPreferenceLists().values()) {
+ pList.clear();
+ }
return currentIdealState;
}
http://git-wip-us.apache.org/repos/asf/helix/blob/bfaa8399/helix-core/src/test/java/org/apache/helix/integration/controller/TestClusterMaintenanceMode.java
----------------------------------------------------------------------
diff --git a/helix-core/src/test/java/org/apache/helix/integration/controller/TestClusterMaintenanceMode.java b/helix-core/src/test/java/org/apache/helix/integration/controller/TestClusterMaintenanceMode.java
index 4e4771b..2eb8034 100644
--- a/helix-core/src/test/java/org/apache/helix/integration/controller/TestClusterMaintenanceMode.java
+++ b/helix-core/src/test/java/org/apache/helix/integration/controller/TestClusterMaintenanceMode.java
@@ -13,6 +13,8 @@ import org.testng.annotations.Test;
public class TestClusterMaintenanceMode extends TaskTestBase {
MockParticipantManager _newInstance;
+ private String newResourceAddedDuringMaintenanceMode =
+ String.format("%s_%s", WorkflowGenerator.DEFAULT_TGT_DB, 1);
@BeforeClass
public void beforeClass() throws Exception {
@@ -53,13 +55,13 @@ public class TestClusterMaintenanceMode extends TaskTestBase {
@Test (dependsOnMethods = "testMaintenanceModeAddNewInstance")
public void testMaintenanceModeAddNewResource() throws InterruptedException {
_gSetupTool.getClusterManagementTool()
- .addResource(CLUSTER_NAME, WorkflowGenerator.DEFAULT_TGT_DB + 1, 7, "MasterSlave",
+ .addResource(CLUSTER_NAME, newResourceAddedDuringMaintenanceMode, 7, "MasterSlave",
IdealState.RebalanceMode.FULL_AUTO.name());
_gSetupTool.getClusterManagementTool()
- .rebalance(CLUSTER_NAME, WorkflowGenerator.DEFAULT_TGT_DB + 1, 3);
+ .rebalance(CLUSTER_NAME, newResourceAddedDuringMaintenanceMode, 3);
Assert.assertTrue(_clusterVerifier.verifyByPolling());
ExternalView externalView = _gSetupTool.getClusterManagementTool()
- .getResourceExternalView(CLUSTER_NAME, WorkflowGenerator.DEFAULT_TGT_DB + 1);
+ .getResourceExternalView(CLUSTER_NAME, newResourceAddedDuringMaintenanceMode);
Assert.assertNull(externalView);
}
@@ -88,4 +90,16 @@ public class TestClusterMaintenanceMode extends TaskTestBase {
}
}
}
-}
\ No newline at end of file
+
+ @Test (dependsOnMethods = "testMaintenanceModeInstanceBack")
+ public void testExitMaintenanceModeNewResourceRecovery() throws InterruptedException {
+ _gSetupTool.getClusterManagementTool().enableMaintenanceMode(CLUSTER_NAME, false);
+ Assert.assertTrue(_clusterVerifier.verifyByPolling());
+ ExternalView externalView = _gSetupTool.getClusterManagementTool()
+ .getResourceExternalView(CLUSTER_NAME, newResourceAddedDuringMaintenanceMode);
+ Assert.assertEquals(externalView.getRecord().getMapFields().size(), 7);
+ for (Map<String, String> stateMap : externalView.getRecord().getMapFields().values()) {
+ Assert.assertTrue(stateMap.values().contains("MASTER"));
+ }
+ }
+}