This is an automated email from the ASF dual-hosted git repository.
ferhui pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/master by this push:
new a31b79a HDDS-6148. Validate ContainerBalancerConfiguration before
start ContainerBalancer (#2957)
a31b79a is described below
commit a31b79a0cf0677a11dda1e9d3de70cf22f7b045a
Author: Symious <[email protected]>
AuthorDate: Mon Jan 10 18:36:23 2022 +0800
HDDS-6148. Validate ContainerBalancerConfiguration before start
ContainerBalancer (#2957)
---
.../scm/container/balancer/ContainerBalancer.java | 12 ++++++++---
.../container/balancer/TestContainerBalancer.java | 23 ++++++----------------
2 files changed, 15 insertions(+), 20 deletions(-)
diff --git
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/balancer/ContainerBalancer.java
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/balancer/ContainerBalancer.java
index d7d3b66..cf3781f 100644
---
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/balancer/ContainerBalancer.java
+++
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/balancer/ContainerBalancer.java
@@ -155,9 +155,11 @@ public class ContainerBalancer {
return false;
}
- balancerRunning = true;
this.config = balancerConfiguration;
- validateConfiguration(config);
+ if (!validateConfiguration(config)) {
+ return false;
+ }
+ balancerRunning = true;
LOG.info("Starting Container Balancer...{}", this);
//we should start a new balancer thread async
@@ -766,7 +768,7 @@ public class ContainerBalancer {
LOG.info("Container Balancer stopped successfully.");
}
- private void validateConfiguration(ContainerBalancerConfiguration conf) {
+ private boolean validateConfiguration(ContainerBalancerConfiguration conf) {
// maxSizeEnteringTarget and maxSizeLeavingSource should by default be
// greater than container size
long size = (long) ozoneConfiguration.getStorageSize(
@@ -776,10 +778,12 @@ public class ContainerBalancer {
if (conf.getMaxSizeEnteringTarget() <= size) {
LOG.info("MaxSizeEnteringTarget should be larger than " +
"ozone.scm.container.size");
+ return false;
}
if (conf.getMaxSizeLeavingSource() <= size) {
LOG.info("MaxSizeLeavingSource should be larger than " +
"ozone.scm.container.size");
+ return false;
}
// balancing interval should be greater than DUFactory refresh period
@@ -788,7 +792,9 @@ public class ContainerBalancer {
if (conf.getBalancingInterval().toMillis() <= balancingInterval) {
LOG.info("balancing.iteration.interval should be larger than " +
"hdds.datanode.du.refresh.period.");
+ return false;
}
+ return true;
}
public void setNodeManager(NodeManager nodeManager) {
diff --git
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/balancer/TestContainerBalancer.java
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/balancer/TestContainerBalancer.java
index a4776e9..3ad6269 100644
---
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/balancer/TestContainerBalancer.java
+++
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/balancer/TestContainerBalancer.java
@@ -109,7 +109,7 @@ public class TestContainerBalancer {
balancerConfiguration.setIdleIteration(1);
balancerConfiguration.setMaxDatanodesRatioToInvolvePerIteration(1.0d);
balancerConfiguration.setMaxSizeToMovePerIteration(50 * OzoneConsts.GB);
- balancerConfiguration.setMaxSizeEnteringTarget(5 * OzoneConsts.GB);
+ balancerConfiguration.setMaxSizeEnteringTarget(50 * OzoneConsts.GB);
conf.setFromObject(balancerConfiguration);
GenericTestUtils.setLogLevel(ContainerBalancer.LOG, Level.DEBUG);
@@ -390,7 +390,7 @@ public class TestContainerBalancer {
balancerConfiguration.setThreshold(0.1);
balancerConfiguration.setMaxDatanodesRatioToInvolvePerIteration(1.0d);
balancerConfiguration.setMaxSizeToMovePerIteration(50 * OzoneConsts.GB);
- balancerConfiguration.setMaxSizeEnteringTarget(5 * OzoneConsts.GB);
+ balancerConfiguration.setMaxSizeEnteringTarget(50 * OzoneConsts.GB);
containerBalancer.start(balancerConfiguration);
// waiting for balance completed.
@@ -417,7 +417,7 @@ public class TestContainerBalancer {
balancerConfiguration.setThreshold(0.1);
balancerConfiguration.setMaxDatanodesRatioToInvolvePerIteration(1.0d);
balancerConfiguration.setMaxSizeToMovePerIteration(50 * OzoneConsts.GB);
- balancerConfiguration.setMaxSizeEnteringTarget(5 * OzoneConsts.GB);
+ balancerConfiguration.setMaxSizeEnteringTarget(50 * OzoneConsts.GB);
containerBalancer.start(balancerConfiguration);
@@ -443,7 +443,7 @@ public class TestContainerBalancer {
balancerConfiguration.setThreshold(0.1);
balancerConfiguration.setMaxDatanodesRatioToInvolvePerIteration(1.0d);
balancerConfiguration.setMaxSizeToMovePerIteration(50 * OzoneConsts.GB);
- balancerConfiguration.setMaxSizeEnteringTarget(5 * OzoneConsts.GB);
+ balancerConfiguration.setMaxSizeEnteringTarget(50 * OzoneConsts.GB);
balancerConfiguration.setExcludeContainers("1, 4, 5");
containerBalancer.start(balancerConfiguration);
@@ -473,20 +473,9 @@ public class TestContainerBalancer {
// no containers should be selected when the limit is zero
balancerConfiguration.setMaxSizeEnteringTarget(0);
- containerBalancer.start(balancerConfiguration);
+ boolean startResult = containerBalancer.start(balancerConfiguration);
- // waiting for balance completed.
- // TODO: this is a temporary implementation for now
- // modify this after balancer is fully completed
- try {
- Thread.sleep(500);
- } catch (InterruptedException e) {}
-
- containerBalancer.stop();
- // balancer should have identified unbalanced nodes
- Assert.assertFalse(containerBalancer.getUnBalancedNodes().isEmpty());
- // no container should have been selected
- Assert.assertTrue(containerBalancer.getSourceToTargetMap().isEmpty());
+ Assert.assertFalse(startResult);
// some containers should be selected when using default values
OzoneConfiguration ozoneConfiguration = new OzoneConfiguration();
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]