This is an automated email from the ASF dual-hosted git repository.
siddhant 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 b3ff67c4d5 HDDS-13068. Validate Container Balancer move timeout and
replication timeout configs (#8490)
b3ff67c4d5 is described below
commit b3ff67c4d546ee5872f4985012355b0b92bfe283
Author: Tejaskriya <[email protected]>
AuthorDate: Tue Jun 3 14:39:44 2025 +0530
HDDS-13068. Validate Container Balancer move timeout and replication
timeout configs (#8490)
---
.../scm/container/balancer/ContainerBalancer.java | 19 +++++++++++++++++++
.../scm/container/balancer/TestContainerBalancer.java | 19 +++++++++++++++++++
.../hadoop/ozone/TestContainerBalancerOperations.java | 4 ++--
3 files changed, 40 insertions(+), 2 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 872747f27e..6a35b7245c 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
@@ -19,7 +19,9 @@
import com.google.common.annotations.VisibleForTesting;
import java.io.IOException;
+import java.time.Duration;
import java.time.OffsetDateTime;
+import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.ReentrantLock;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
@@ -459,6 +461,23 @@ private void
validateConfiguration(ContainerBalancerConfiguration conf)
"hdds.container.balancer.move.replication.timeout should " +
"be less than hdds.container.balancer.move.timeout.");
}
+
+ // (move.timeout - move.replication.timeout -
event.timeout.datanode.offset)
+ // should be greater than or equal to 9 minutes
+ long datanodeOffset =
ozoneConfiguration.getTimeDuration("hdds.scm.replication.event.timeout.datanode.offset",
+ Duration.ofMinutes(6).toMillis(), TimeUnit.MILLISECONDS);
+ if ((conf.getMoveTimeout().toMillis() -
conf.getMoveReplicationTimeout().toMillis() - datanodeOffset)
+ < Duration.ofMinutes(9).toMillis()) {
+ String msg = String.format("(hdds.container.balancer.move.timeout (%sms)
- " +
+ "hdds.container.balancer.move.replication.timeout (%sms) - " +
+ "hdds.scm.replication.event.timeout.datanode.offset (%sms)) " +
+ "should be greater than or equal to 540000ms or 9 minutes.",
+ conf.getMoveTimeout().toMillis(),
+ conf.getMoveReplicationTimeout().toMillis(),
+ Duration.ofMillis(datanodeOffset).toMillis());
+ LOG.warn(msg);
+ throw new InvalidContainerBalancerConfigurationException(msg);
+ }
}
public ContainerBalancerMetrics getMetrics() {
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 c0897814b0..d7977771c0 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
@@ -205,6 +205,25 @@ public void testValidationOfConfigurations() {
() -> containerBalancer.startBalancer(balancerConfiguration),
"hdds.container.balancer.move.replication.timeout should " +
"be less than hdds.container.balancer.move.timeout.");
+ assertSame(ContainerBalancerTask.Status.STOPPED,
containerBalancer.getBalancerStatus());
+
+ conf.setTimeDuration("hdds.container.balancer.move.timeout", 60,
+ TimeUnit.MINUTES);
+ conf.setTimeDuration(
+ "hdds.container.balancer.move.replication.timeout", 50,
+ TimeUnit.MINUTES);
+
+ balancerConfiguration =
+ conf.getObject(ContainerBalancerConfiguration.class);
+ InvalidContainerBalancerConfigurationException ex =
+ assertThrowsExactly(
+ InvalidContainerBalancerConfigurationException.class,
+ () -> containerBalancer.startBalancer(balancerConfiguration),
+ "(hdds.container.balancer.move.timeout -
hdds.container.balancer.move.replication.timeout " +
+ "- hdds.scm.replication.event.timeout.datanode.offset) should
be greater than or equal to 9 minutes.");
+ assertTrue(ex.getMessage().contains("should be greater than or equal to
540000ms or 9 minutes"),
+ "Exception message should contain 'should be greater than or equal to
540000ms or 9 minutes'");
+ assertSame(ContainerBalancerTask.Status.STOPPED,
containerBalancer.getBalancerStatus());
}
/**
diff --git
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/TestContainerBalancerOperations.java
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/TestContainerBalancerOperations.java
index 77ac238ee4..37a4904039 100644
---
a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/TestContainerBalancerOperations.java
+++
b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/TestContainerBalancerOperations.java
@@ -82,7 +82,7 @@ public void testContainerBalancerCLIOperations() throws
Exception {
Optional<Long> maxSizeLeavingSourceInGB = Optional.of(6L);
Optional<Integer> balancingInterval = Optional.of(70);
Optional<Integer> moveTimeout = Optional.of(65);
- Optional<Integer> moveReplicationTimeout = Optional.of(55);
+ Optional<Integer> moveReplicationTimeout = Optional.of(50);
Optional<Boolean> networkTopologyEnable = Optional.of(false);
Optional<String> includeNodes = Optional.of("");
Optional<String> excludeNodes = Optional.of("");
@@ -147,7 +147,7 @@ public void testIfCBCLIOverridesConfigs() throws Exception {
Optional<Long> maxSizeEnteringTargetInGB = Optional.of(6L);
Optional<Long> maxSizeLeavingSourceInGB = Optional.of(6L);
Optional<Integer> moveTimeout = Optional.of(65);
- Optional<Integer> moveReplicationTimeout = Optional.of(55);
+ Optional<Integer> moveReplicationTimeout = Optional.of(50);
Optional<Boolean> networkTopologyEnable = Optional.of(true);
Optional<String> includeNodes = Optional.of("");
Optional<String> excludeNodes = Optional.of("");
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]