This is an automated email from the ASF dual-hosted git repository.

ChenSammi 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 0db87048e87 HDDS-15278. DiskBalancer should validate persisted config 
before applying. (#10271)
0db87048e87 is described below

commit 0db87048e87410ca9b58d8190ecc6f0d646938f6
Author: slfan1989 <[email protected]>
AuthorDate: Fri May 15 16:17:52 2026 +0800

    HDDS-15278. DiskBalancer should validate persisted config before applying. 
(#10271)
---
 .../diskbalancer/DiskBalancerService.java          | 12 ++++----
 .../diskbalancer/TestDiskBalancerService.java      | 32 ++++++++++++++++++++++
 2 files changed, 37 insertions(+), 7 deletions(-)

diff --git 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/DiskBalancerService.java
 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/DiskBalancerService.java
index b1bac677178..c68e63b3b71 100644
--- 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/DiskBalancerService.java
+++ 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/DiskBalancerService.java
@@ -243,18 +243,16 @@ private void loadDiskBalancerInfo() throws IOException {
 
   private void applyDiskBalancerInfo(DiskBalancerInfo diskBalancerInfo)
       throws IOException {
-    // verify ContainerStates first
-    DiskBalancerConfiguration validated = new DiskBalancerConfiguration();
-    validated.setContainerStates(diskBalancerInfo.getContainerStates());
+    DiskBalancerConfiguration validated = diskBalancerInfo.toConfiguration();
     // First store in local file, then update in memory variables
     writeDiskBalancerInfoTo(diskBalancerInfo, diskBalancerInfoFile);
 
     updateOperationalStateFromInfo(diskBalancerInfo);
 
-    setThreshold(diskBalancerInfo.getThreshold());
-    setBandwidthInMB(diskBalancerInfo.getBandwidthInMB());
-    setParallelThread(diskBalancerInfo.getParallelThread());
-    setStopAfterDiskEven(diskBalancerInfo.isStopAfterDiskEven());
+    setThreshold(validated.getThreshold());
+    setBandwidthInMB(validated.getDiskBandwidthInMB());
+    setParallelThread(validated.getParallelThread());
+    setStopAfterDiskEven(validated.isStopAfterDiskEven());
     setVersion(diskBalancerInfo.getVersion());
     setContainerStates(validated.getMovableContainerStates());
 
diff --git 
a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/diskbalancer/TestDiskBalancerService.java
 
b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/diskbalancer/TestDiskBalancerService.java
index 425733cb9e2..f50cd1043b0 100644
--- 
a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/diskbalancer/TestDiskBalancerService.java
+++ 
b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/diskbalancer/TestDiskBalancerService.java
@@ -199,6 +199,38 @@ public void testUpdateService(ContainerTestVersionInfo 
versionInfo) throws Excep
     svc.shutdown();
   }
 
+  @ParameterizedTest
+  @MethodSource("invalidDiskBalancerInfo")
+  public void testRefreshRejectsInvalidDiskBalancerInfo(
+      ContainerTestVersionInfo versionInfo, DiskBalancerInfo diskBalancerInfo)
+      throws Exception {
+    setLayoutAndSchemaForTest(versionInfo);
+    ContainerSet containerSet = ContainerSet.newReadOnlyContainerSet(1000);
+    ContainerMetrics metrics = ContainerMetrics.create(conf);
+    KeyValueHandler keyValueHandler =
+        new KeyValueHandler(conf, datanodeUuid, containerSet, volumeSet,
+            metrics, c -> {
+        }, new ContainerChecksumTreeManager(conf));
+    DiskBalancerServiceTestImpl svc =
+        getDiskBalancerService(containerSet, conf, keyValueHandler, null, 1);
+
+    assertThrows(IllegalArgumentException.class,
+        () -> svc.refresh(diskBalancerInfo));
+
+    svc.shutdown();
+  }
+
+  public static Stream<Arguments> invalidDiskBalancerInfo() {
+    return ContainerTestVersionInfo.getLayoutList().stream()
+        .flatMap(versionInfo -> Stream.of(
+            Arguments.arguments(versionInfo, new DiskBalancerInfo(
+                DiskBalancerRunningStatus.RUNNING, 0.0d, 100L, 5, true)),
+            Arguments.arguments(versionInfo, new DiskBalancerInfo(
+                DiskBalancerRunningStatus.RUNNING, 10.0d, 0L, 5, true)),
+            Arguments.arguments(versionInfo, new DiskBalancerInfo(
+                DiskBalancerRunningStatus.RUNNING, 10.0d, 100L, 0, true))));
+  }
+
   @ContainerTestVersionInfo.ContainerTest
   public void testPolicyClassInitialization(ContainerTestVersionInfo 
versionInfo) throws IOException {
     setLayoutAndSchemaForTest(versionInfo);


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to