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]