You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ozone.apache.org by sa...@apache.org on 2023/04/10 07:51:35 UTC

[ozone] branch HDDS-5713 updated: HDDS-8182. Add volume and container choosing policy (#4408)

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

sammichen pushed a commit to branch HDDS-5713
in repository https://gitbox.apache.org/repos/asf/ozone.git


The following commit(s) were added to refs/heads/HDDS-5713 by this push:
     new 22f4fe7612 HDDS-8182. Add volume and container choosing policy (#4408)
22f4fe7612 is described below

commit 22f4fe76121885e9daf4539cdbc5a69023309435
Author: Symious <14...@users.noreply.github.com>
AuthorDate: Mon Apr 10 15:51:27 2023 +0800

    HDDS-8182. Add volume and container choosing policy (#4408)
---
 .../scm/storage/DiskBalancerConfiguration.java     | 23 ++++++++
 .../container/common/volume/MutableVolumeSet.java  | 11 ++++
 .../diskbalancer/DiskBalancerService.java          | 24 ++++++++
 .../container/diskbalancer/DiskBalancerYaml.java   |  4 +-
 .../policy/ContainerChoosingPolicy.java            | 39 +++++++++++++
 .../policy/DefaultContainerChoosingPolicy.java     | 59 +++++++++++++++++++
 .../policy/DefaultVolumeChoosingPolicy.java        | 66 ++++++++++++++++++++++
 .../diskbalancer/policy/VolumeChoosingPolicy.java  | 41 ++++++++++++++
 .../diskbalancer/policy/package-info.java          | 22 ++++++++
 .../diskbalancer/TestDiskBalancerService.java      | 19 +++++++
 .../hadoop/hdds/scm/node/DiskBalancerStatus.java   |  2 +-
 .../cli/datanode/DiskBalancerStartSubcommand.java  |  2 +-
 .../cli/datanode/DiskBalancerUpdateSubcommand.java |  2 +-
 13 files changed, 309 insertions(+), 5 deletions(-)

diff --git a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/storage/DiskBalancerConfiguration.java b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/storage/DiskBalancerConfiguration.java
index c41a49db1f..831379ce43 100644
--- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/storage/DiskBalancerConfiguration.java
+++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/scm/storage/DiskBalancerConfiguration.java
@@ -126,6 +126,29 @@ public final class DiskBalancerConfiguration {
     this.diskBalancerTimeout = duration.toMillis();
   }
 
+  @Config(key = "volume.choosing.policy", type = ConfigType.CLASS,
+      defaultValue = "org.apache.hadoop.ozone.container.diskbalancer.policy" +
+          ".DefaultVolumeChoosingPolicy",
+      tags = {ConfigTag.DISKBALANCER},
+      description = "The volume choosing policy of the disk balancer service.")
+  private Class<?> volumeChoosingPolicyClass;
+
+  public Class<?> getVolumeChoosingPolicyClass() {
+    return volumeChoosingPolicyClass;
+  }
+
+  @Config(key = "container.choosing.policy", type = ConfigType.CLASS,
+      defaultValue = "org.apache.hadoop.ozone.container.diskbalancer.policy" +
+          ".DefaultContainerChoosingPolicy",
+      tags = {ConfigTag.DISKBALANCER},
+      description = "The container choosing policy of the disk balancer " +
+          "service.")
+  private Class<?> containerChoosingPolicyClass;
+
+  public Class<?> getContainerChoosingPolicyClass() {
+    return containerChoosingPolicyClass;
+  }
+
   public DiskBalancerConfiguration() {
   }
 
diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/MutableVolumeSet.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/MutableVolumeSet.java
index 22571685df..0f95ed5a97 100644
--- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/MutableVolumeSet.java
+++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/MutableVolumeSet.java
@@ -38,6 +38,7 @@ import org.apache.hadoop.ozone.container.common.impl.StorageLocationReport;
 import org.apache.hadoop.ozone.container.common.statemachine.DatanodeConfiguration;
 import org.apache.hadoop.ozone.container.common.statemachine.StateContext;
 import org.apache.hadoop.util.DiskChecker.DiskOutOfSpaceException;
+import org.apache.hadoop.util.Preconditions;
 import org.apache.hadoop.util.ShutdownHookManager;
 
 import com.google.common.annotations.VisibleForTesting;
@@ -533,4 +534,14 @@ public class MutableVolumeSet implements VolumeSet {
       this.readUnlock();
     }
   }
+
+  public double getIdealUsage() {
+    long totalCapacity = 0L, totalUsed = 0L;
+    for (StorageVolume volume: volumeMap.values()) {
+      totalCapacity += volume.getCapacity();
+      totalUsed += volume.getUsedSpace();
+    }
+    Preconditions.checkArgument(totalCapacity != 0);
+    return (double) totalUsed / totalCapacity;
+  }
 }
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 75e1660029..10980a6b1c 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
@@ -35,6 +35,8 @@ import org.apache.hadoop.ozone.container.common.impl.ContainerData;
 import org.apache.hadoop.ozone.container.common.utils.StorageVolumeUtil;
 import org.apache.hadoop.ozone.container.common.volume.HddsVolume;
 import org.apache.hadoop.ozone.container.common.volume.MutableVolumeSet;
+import org.apache.hadoop.ozone.container.diskbalancer.policy.ContainerChoosingPolicy;
+import org.apache.hadoop.ozone.container.diskbalancer.policy.VolumeChoosingPolicy;
 import org.apache.hadoop.ozone.container.ozoneimpl.OzoneContainer;
 import org.apache.hadoop.util.Time;
 import org.apache.ratis.util.FileUtils;
@@ -89,6 +91,8 @@ public class DiskBalancerService extends BackgroundService {
   private Map<HddsVolume, Long> deltaSizes;
   private MutableVolumeSet volumeSet;
 
+  private VolumeChoosingPolicy volumeChoosingPolicy;
+  private ContainerChoosingPolicy containerChoosingPolicy;
   private final File diskBalancerInfoFile;
 
   private DiskBalancerServiceMetrics metrics;
@@ -110,6 +114,18 @@ public class DiskBalancerService extends BackgroundService {
     deltaSizes = new ConcurrentHashMap<>();
     volumeSet = ozoneContainer.getVolumeSet();
 
+    try {
+      volumeChoosingPolicy = (VolumeChoosingPolicy)
+          conf.getObject(DiskBalancerConfiguration.class)
+          .getVolumeChoosingPolicyClass().newInstance();
+      containerChoosingPolicy = (ContainerChoosingPolicy)
+          conf.getObject(DiskBalancerConfiguration.class)
+              .getContainerChoosingPolicyClass().newInstance();
+    } catch (Exception e) {
+      LOG.error("Got exception when initializing DiskBalancerService", e);
+      throw new RuntimeException(e);
+    }
+
     metrics = DiskBalancerServiceMetrics.create();
 
     loadDiskBalancerInfo();
@@ -387,6 +403,14 @@ public class DiskBalancerService extends BackgroundService {
     this.balancedBytesInLastWindow.set(bytes);
   }
 
+  public ContainerChoosingPolicy getContainerChoosingPolicy() {
+    return containerChoosingPolicy;
+  }
+
+  public VolumeChoosingPolicy getVolumeChoosingPolicy() {
+    return volumeChoosingPolicy;
+  }
+
   @Override
   public void shutdown() {
     super.shutdown();
diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/DiskBalancerYaml.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/DiskBalancerYaml.java
index d16eb65747..d601bc87d8 100644
--- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/DiskBalancerYaml.java
+++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/DiskBalancerYaml.java
@@ -17,6 +17,7 @@
 
 package org.apache.hadoop.ozone.container.diskbalancer;
 
+import org.apache.hadoop.hdds.server.YamlUtils;
 import org.yaml.snakeyaml.DumperOptions;
 import org.yaml.snakeyaml.Yaml;
 
@@ -66,11 +67,10 @@ public final class DiskBalancerYaml {
     DiskBalancerInfo diskBalancerInfo;
 
     try (FileInputStream inputFileStream = new FileInputStream(path)) {
-      Yaml yaml = new Yaml();
       DiskBalancerInfoYaml diskBalancerInfoYaml;
       try {
         diskBalancerInfoYaml =
-            yaml.loadAs(inputFileStream, DiskBalancerInfoYaml.class);
+            YamlUtils.loadAs(inputFileStream, DiskBalancerInfoYaml.class);
       } catch (Exception e) {
         throw new IOException("Unable to parse yaml file.", e);
       }
diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/policy/ContainerChoosingPolicy.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/policy/ContainerChoosingPolicy.java
new file mode 100644
index 0000000000..61b2eeba28
--- /dev/null
+++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/policy/ContainerChoosingPolicy.java
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+package org.apache.hadoop.ozone.container.diskbalancer.policy;
+
+import org.apache.hadoop.ozone.container.common.impl.ContainerData;
+import org.apache.hadoop.ozone.container.common.volume.HddsVolume;
+import org.apache.hadoop.ozone.container.ozoneimpl.OzoneContainer;
+
+import java.util.List;
+import java.util.Set;
+
+/**
+ * This interface specifies the policy for choosing containers to balance.
+ */
+public interface ContainerChoosingPolicy {
+  /**
+   * Choose a container for balancing.
+   *
+   * @return a Container
+   */
+  List<ContainerData> chooseContainer(OzoneContainer ozoneContainer,
+      HddsVolume volume, Set<Long> inProgressContainerIDs, Long targetSize);
+}
diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/policy/DefaultContainerChoosingPolicy.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/policy/DefaultContainerChoosingPolicy.java
new file mode 100644
index 0000000000..da1e3610ad
--- /dev/null
+++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/policy/DefaultContainerChoosingPolicy.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+package org.apache.hadoop.ozone.container.diskbalancer.policy;
+
+import org.apache.hadoop.ozone.container.common.impl.ContainerData;
+import org.apache.hadoop.ozone.container.common.interfaces.Container;
+import org.apache.hadoop.ozone.container.common.volume.HddsVolume;
+import org.apache.hadoop.ozone.container.ozoneimpl.OzoneContainer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Choose a container from specified volume, make sure it's not being balancing.
+ */
+public class DefaultContainerChoosingPolicy implements ContainerChoosingPolicy {
+  public static final Logger LOG = LoggerFactory.getLogger(
+      DefaultContainerChoosingPolicy.class);
+
+  @Override
+  public List<ContainerData> chooseContainer(OzoneContainer ozoneContainer,
+      HddsVolume hddsVolume, Set<Long> inProgressContainerIDs,
+      Long targetSize) {
+    List<ContainerData> results = new ArrayList<>();
+    long sizeTotal = 0L;
+
+    Iterator<Container<?>> itr = ozoneContainer.getController()
+        .getContainers(hddsVolume);
+    while (itr.hasNext() && sizeTotal < targetSize) {
+      ContainerData containerData = itr.next().getContainerData();
+      if (!inProgressContainerIDs.contains(
+          containerData.getContainerID()) && containerData.isClosed()) {
+        results.add(containerData);
+        sizeTotal += containerData.getBytesUsed();
+      }
+    }
+    return results;
+  }
+}
diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/policy/DefaultVolumeChoosingPolicy.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/policy/DefaultVolumeChoosingPolicy.java
new file mode 100644
index 0000000000..4e2721c811
--- /dev/null
+++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/policy/DefaultVolumeChoosingPolicy.java
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+package org.apache.hadoop.ozone.container.diskbalancer.policy;
+
+import org.apache.commons.lang3.tuple.Pair;
+import org.apache.hadoop.ozone.container.common.utils.StorageVolumeUtil;
+import org.apache.hadoop.ozone.container.common.volume.HddsVolume;
+import org.apache.hadoop.ozone.container.common.volume.MutableVolumeSet;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * Choose a random volume for balancing.
+ */
+public class DefaultVolumeChoosingPolicy implements VolumeChoosingPolicy {
+
+  public static final Logger LOG = LoggerFactory.getLogger(
+      DefaultVolumeChoosingPolicy.class);
+
+  @Override
+  public Pair<HddsVolume, HddsVolume> chooseVolume(MutableVolumeSet volumeSet,
+      double threshold, Map<HddsVolume, Long> deltaMap) {
+    double idealUsage = volumeSet.getIdealUsage();
+
+    List<HddsVolume> volumes = StorageVolumeUtil
+        .getHddsVolumesList(volumeSet.getVolumesList())
+        .stream()
+        .filter(volume -> Math.abs(
+            (double) (volume.getUsedSpace() + deltaMap.getOrDefault(volume, 0L))
+                / volume.getCapacity() - idealUsage) >= threshold)
+        .sorted((v1, v2) ->
+            Double.compare(
+                (double) (v2.getUsedSpace() + deltaMap.getOrDefault(v2, 0L)) /
+                    v2.getCapacity(),
+                (double) (v1.getUsedSpace() + deltaMap.getOrDefault(v1, 0L)) /
+                    v1.getCapacity()))
+        .collect(Collectors.toList());
+
+    // Can not generate DiskBalancerTask if we have less than 2 results
+    if (volumes.size() <= 1) {
+      LOG.debug("Can not find appropriate Source volume and Dest Volume.");
+      return null;
+    }
+    return Pair.of(volumes.get(0), volumes.get(volumes.size() - 1));
+  }
+}
diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/policy/VolumeChoosingPolicy.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/policy/VolumeChoosingPolicy.java
new file mode 100644
index 0000000000..187003bf2f
--- /dev/null
+++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/policy/VolumeChoosingPolicy.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+package org.apache.hadoop.ozone.container.diskbalancer.policy;
+
+import org.apache.commons.lang3.tuple.Pair;
+import org.apache.hadoop.ozone.container.common.volume.HddsVolume;
+import org.apache.hadoop.ozone.container.common.volume.MutableVolumeSet;
+
+import java.util.Map;
+
+/**
+ * This interface specifies the policy for choosing volumes to balance.
+ */
+public interface VolumeChoosingPolicy {
+  /**
+   * Choose a pair of volumes for balancing.
+   *
+   * @param volumeSet - volumes to choose from.
+   * @param threshold - the threshold to choose source and dest volumes.
+   * @param deltaSizes - the sizes changes of inProgress balancing jobs.
+   * @return Source volume and Dest volume.
+   */
+  Pair<HddsVolume, HddsVolume> chooseVolume(MutableVolumeSet volumeSet,
+      double threshold, Map<HddsVolume, Long> deltaSizes);
+}
diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/policy/package-info.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/policy/package-info.java
new file mode 100644
index 0000000000..ab9c5f570b
--- /dev/null
+++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/policy/package-info.java
@@ -0,0 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+/**
+ This package contains policy classes related to the DiskBalancer service.
+ */
+package org.apache.hadoop.ozone.container.diskbalancer.policy;
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 a58f00103b..71257f4d6e 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
@@ -29,6 +29,8 @@ import org.apache.hadoop.ozone.container.common.impl.ContainerSet;
 import org.apache.hadoop.ozone.container.common.interfaces.ContainerDispatcher;
 import org.apache.hadoop.ozone.container.common.volume.MutableVolumeSet;
 import org.apache.hadoop.ozone.container.common.volume.StorageVolume;
+import org.apache.hadoop.ozone.container.diskbalancer.policy.DefaultContainerChoosingPolicy;
+import org.apache.hadoop.ozone.container.diskbalancer.policy.DefaultVolumeChoosingPolicy;
 import org.apache.hadoop.ozone.container.keyvalue.ContainerTestVersionInfo;
 import org.apache.hadoop.ozone.container.keyvalue.KeyValueHandler;
 import org.apache.hadoop.ozone.container.keyvalue.helpers.BlockUtils;
@@ -145,6 +147,23 @@ public class TestDiskBalancerService {
     svc.shutdown();
   }
 
+  @Test
+  public void testPolicyClassInitialization() throws IOException {
+    ContainerSet containerSet = new ContainerSet(1000);
+    ContainerMetrics metrics = ContainerMetrics.create(conf);
+    KeyValueHandler keyValueHandler =
+        new KeyValueHandler(conf, datanodeUuid, containerSet, volumeSet,
+            metrics, c -> {
+        });
+    DiskBalancerServiceTestImpl svc =
+        getDiskBalancerService(containerSet, conf, keyValueHandler, null, 1);
+
+    Assert.assertTrue(svc.getContainerChoosingPolicy()
+        instanceof DefaultContainerChoosingPolicy);
+    Assert.assertTrue(svc.getVolumeChoosingPolicy()
+        instanceof DefaultVolumeChoosingPolicy);
+  }
+
   private String generateVolumeLocation(String base, int volumeCount) {
     StringBuilder sb = new StringBuilder();
     for (int i = 0; i < volumeCount; i++) {
diff --git a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/DiskBalancerStatus.java b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/DiskBalancerStatus.java
index 65f577bcee..8d2cb26c36 100644
--- a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/DiskBalancerStatus.java
+++ b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/DiskBalancerStatus.java
@@ -45,4 +45,4 @@ public class DiskBalancerStatus {
   public DiskBalancerConfiguration getDiskBalancerConfiguration() {
     return diskBalancerConfiguration;
   }
-}
\ No newline at end of file
+}
diff --git a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerStartSubcommand.java b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerStartSubcommand.java
index f58c7a1f84..fc87b145a7 100644
--- a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerStartSubcommand.java
+++ b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerStartSubcommand.java
@@ -86,4 +86,4 @@ public class DiskBalancerStartSubcommand extends ScmSubcommand {
   public void setAllHosts(boolean allHosts) {
     this.commonOptions.setAllHosts(allHosts);
   }
-}
\ No newline at end of file
+}
diff --git a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerUpdateSubcommand.java b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerUpdateSubcommand.java
index 28ed4fd325..744d007539 100644
--- a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerUpdateSubcommand.java
+++ b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerUpdateSubcommand.java
@@ -84,4 +84,4 @@ public class DiskBalancerUpdateSubcommand extends ScmSubcommand {
   public void setAllHosts(boolean allHosts) {
     this.commonOptions.setAllHosts(allHosts);
   }
-}
\ No newline at end of file
+}


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@ozone.apache.org
For additional commands, e-mail: commits-help@ozone.apache.org