This is an automated email from the ASF dual-hosted git repository.
adoroszlai 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 b56350b2a27 HDDS-15326. Clamp outofservice.limit.factor to bounds
instead of resetting to default (#10373)
b56350b2a27 is described below
commit b56350b2a278994101daf80b021bf0ce60dd3ad1
Author: Chi-Hsuan Huang <[email protected]>
AuthorDate: Thu May 28 17:09:54 2026 +0800
HDDS-15326. Clamp outofservice.limit.factor to bounds instead of resetting
to default (#10373)
---
.../container/replication/ReplicationServer.java | 12 ++--
.../replication/TestReplicationConfig.java | 64 ++++++++++++++++++++--
2 files changed, 66 insertions(+), 10 deletions(-)
diff --git
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/replication/ReplicationServer.java
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/replication/ReplicationServer.java
index f2d06c2f6b1..fcbd3cc2519 100644
---
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/replication/ReplicationServer.java
+++
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/replication/ReplicationServer.java
@@ -182,10 +182,10 @@ public static final class ReplicationConfig {
public static final int REPLICATION_MAX_STREAMS_DEFAULT = 10;
private static final String OUTOFSERVICE_FACTOR_KEY =
"outofservice.limit.factor";
- private static final double OUTOFSERVICE_FACTOR_MIN = 1;
+ static final double OUTOFSERVICE_FACTOR_MIN = 1;
static final double OUTOFSERVICE_FACTOR_DEFAULT = 2;
private static final String OUTOFSERVICE_FACTOR_DEFAULT_VALUE = "2.0";
- private static final double OUTOFSERVICE_FACTOR_MAX = 10;
+ static final double OUTOFSERVICE_FACTOR_MAX = 10;
static final String REPLICATION_OUTOFSERVICE_FACTOR_KEY =
PREFIX + "." + OUTOFSERVICE_FACTOR_KEY;
@@ -274,14 +274,16 @@ public void validate() {
if (outOfServiceFactor < OUTOFSERVICE_FACTOR_MIN ||
outOfServiceFactor > OUTOFSERVICE_FACTOR_MAX) {
+ double clamped = Math.min(OUTOFSERVICE_FACTOR_MAX,
+ Math.max(OUTOFSERVICE_FACTOR_MIN, outOfServiceFactor));
LOG.warn(
- "{} must be between {} and {} but was set to {}. Defaulting to {}",
+ "{} must be between {} and {} but was set to {}. Clamping to {}",
REPLICATION_OUTOFSERVICE_FACTOR_KEY,
OUTOFSERVICE_FACTOR_MIN,
OUTOFSERVICE_FACTOR_MAX,
outOfServiceFactor,
- OUTOFSERVICE_FACTOR_DEFAULT);
- outOfServiceFactor = OUTOFSERVICE_FACTOR_DEFAULT;
+ clamped);
+ outOfServiceFactor = clamped;
}
}
diff --git
a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/replication/TestReplicationConfig.java
b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/replication/TestReplicationConfig.java
index 67c6eda84aa..f1f182f40a3 100644
---
a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/replication/TestReplicationConfig.java
+++
b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/replication/TestReplicationConfig.java
@@ -18,6 +18,8 @@
package org.apache.hadoop.ozone.container.replication;
import static
org.apache.hadoop.ozone.container.replication.ReplicationServer.ReplicationConfig.OUTOFSERVICE_FACTOR_DEFAULT;
+import static
org.apache.hadoop.ozone.container.replication.ReplicationServer.ReplicationConfig.OUTOFSERVICE_FACTOR_MAX;
+import static
org.apache.hadoop.ozone.container.replication.ReplicationServer.ReplicationConfig.OUTOFSERVICE_FACTOR_MIN;
import static
org.apache.hadoop.ozone.container.replication.ReplicationServer.ReplicationConfig.REPLICATION_MAX_STREAMS_DEFAULT;
import static
org.apache.hadoop.ozone.container.replication.ReplicationServer.ReplicationConfig.REPLICATION_OUTOFSERVICE_FACTOR_KEY;
import static
org.apache.hadoop.ozone.container.replication.ReplicationServer.ReplicationConfig.REPLICATION_STREAMS_LIMIT_KEY;
@@ -52,14 +54,11 @@ public void acceptsValidValues() {
}
@Test
- public void overridesInvalidValues() {
+ public void overridesInvalidReplicationLimit() {
// GIVEN
int invalidReplicationLimit = -5;
- double invalidOutOfServiceFactor = 0.5;
OzoneConfiguration conf = new OzoneConfiguration();
conf.setInt(REPLICATION_STREAMS_LIMIT_KEY, invalidReplicationLimit);
- conf.setDouble(REPLICATION_OUTOFSERVICE_FACTOR_KEY,
- invalidOutOfServiceFactor);
// WHEN
ReplicationConfig subject = conf.getObject(ReplicationConfig.class);
@@ -67,7 +66,62 @@ public void overridesInvalidValues() {
// THEN
assertEquals(REPLICATION_MAX_STREAMS_DEFAULT,
subject.getReplicationMaxStreams());
- assertEquals(OUTOFSERVICE_FACTOR_DEFAULT,
+ }
+
+ @Test
+ public void clampsOutOfServiceFactorBelowMinToMin() {
+ // GIVEN
+ OzoneConfiguration conf = new OzoneConfiguration();
+ conf.setDouble(REPLICATION_OUTOFSERVICE_FACTOR_KEY,
+ OUTOFSERVICE_FACTOR_MIN - 0.5);
+
+ // WHEN
+ ReplicationConfig subject = conf.getObject(ReplicationConfig.class);
+
+ // THEN
+ assertEquals(OUTOFSERVICE_FACTOR_MIN,
+ subject.getOutOfServiceFactor(), 0.001);
+ }
+
+ @Test
+ public void clampsOutOfServiceFactorAboveMaxToMax() {
+ // GIVEN
+ OzoneConfiguration conf = new OzoneConfiguration();
+ conf.setDouble(REPLICATION_OUTOFSERVICE_FACTOR_KEY,
+ OUTOFSERVICE_FACTOR_MAX + 10);
+
+ // WHEN
+ ReplicationConfig subject = conf.getObject(ReplicationConfig.class);
+
+ // THEN
+ assertEquals(OUTOFSERVICE_FACTOR_MAX,
+ subject.getOutOfServiceFactor(), 0.001);
+ }
+
+ @Test
+ public void acceptsOutOfServiceFactorBoundaryValues() {
+ // GIVEN
+ OzoneConfiguration conf = new OzoneConfiguration();
+ conf.setDouble(REPLICATION_OUTOFSERVICE_FACTOR_KEY,
+ OUTOFSERVICE_FACTOR_MIN);
+
+ // WHEN
+ ReplicationConfig subject = conf.getObject(ReplicationConfig.class);
+
+ // THEN
+ assertEquals(OUTOFSERVICE_FACTOR_MIN,
+ subject.getOutOfServiceFactor(), 0.001);
+
+ // GIVEN
+ conf = new OzoneConfiguration();
+ conf.setDouble(REPLICATION_OUTOFSERVICE_FACTOR_KEY,
+ OUTOFSERVICE_FACTOR_MAX);
+
+ // WHEN
+ subject = conf.getObject(ReplicationConfig.class);
+
+ // THEN
+ assertEquals(OUTOFSERVICE_FACTOR_MAX,
subject.getOutOfServiceFactor(), 0.001);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]