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]

Reply via email to