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 87ad327074 HDDS-12435. [DiskBalancer] Add success move count and fail 
move count in status report (#8009)
87ad327074 is described below

commit 87ad327074d9a7e0b0dadc55e7a423cf710474d4
Author: Gargi Jaiswal <[email protected]>
AuthorDate: Tue Mar 11 13:44:37 2025 +0530

    HDDS-12435. [DiskBalancer] Add success move count and fail move count in 
status report (#8009)
---
 .../container/diskbalancer/DiskBalancerInfo.java   | 16 +++++++++
 .../diskbalancer/DiskBalancerService.java          | 10 +++---
 .../interface-client/src/main/proto/hdds.proto     |  2 ++
 .../proto/ScmServerDatanodeHeartbeatProtocol.proto |  2 ++
 .../hadoop/hdds/scm/node/DiskBalancerManager.java  | 38 ++++++++++------------
 .../hadoop/hdds/scm/node/DiskBalancerStatus.java   | 21 +++++++++---
 .../cli/datanode/DiskBalancerStatusSubcommand.java | 14 +++++---
 7 files changed, 69 insertions(+), 34 deletions(-)

diff --git 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/DiskBalancerInfo.java
 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/DiskBalancerInfo.java
index 79cf605dc6..87269f2a68 100644
--- 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/DiskBalancerInfo.java
+++ 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/DiskBalancerInfo.java
@@ -32,6 +32,8 @@ public class DiskBalancerInfo {
   private long bandwidthInMB;
   private int parallelThread;
   private DiskBalancerVersion version;
+  private long successCount;
+  private long failureCount;
 
   public DiskBalancerInfo(boolean shouldRun, double threshold,
       long bandwidthInMB, int parallelThread) {
@@ -48,6 +50,18 @@ public DiskBalancerInfo(boolean shouldRun, double threshold,
     this.version = version;
   }
 
+  public DiskBalancerInfo(boolean shouldRun, double threshold,
+      long bandwidthInMB, int parallelThread, DiskBalancerVersion version,
+      long successCount, long failureCount) {
+    this.shouldRun = shouldRun;
+    this.threshold = threshold;
+    this.bandwidthInMB = bandwidthInMB;
+    this.parallelThread = parallelThread;
+    this.version = version;
+    this.successCount = successCount;
+    this.failureCount = failureCount;
+  }
+
   public DiskBalancerInfo(boolean shouldRun,
       DiskBalancerConfiguration diskBalancerConf) {
     this.shouldRun = shouldRun;
@@ -78,6 +92,8 @@ public 
StorageContainerDatanodeProtocolProtos.DiskBalancerReportProto toDiskBala
         
StorageContainerDatanodeProtocolProtos.DiskBalancerReportProto.newBuilder();
     builder.setIsRunning(shouldRun);
     builder.setDiskBalancerConf(confProto);
+    builder.setSuccessMoveCount(successCount);
+    builder.setFailureMoveCount(failureCount);
     return builder.build();
   }
 
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 b51490f4c9..9897a0acdb 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
@@ -294,11 +294,6 @@ public void setVersion(DiskBalancerVersion version) {
     this.version = version;
   }
 
-  public DiskBalancerInfo getDiskBalancerInfo() {
-    return new DiskBalancerInfo(shouldRun, threshold, bandwidthInMB,
-        parallelThread, version);
-  }
-
   public DiskBalancerReportProto getDiskBalancerReportProto() {
     DiskBalancerReportProto.Builder builder =
         DiskBalancerReportProto.newBuilder();
@@ -508,6 +503,11 @@ private void postCall() {
     }
   }
 
+  public DiskBalancerInfo getDiskBalancerInfo() {
+    return new DiskBalancerInfo(shouldRun, threshold, bandwidthInMB,
+        parallelThread, version, metrics.getSuccessCount(), 
metrics.getFailureCount());
+  }
+
   private Path getDiskBalancerTmpDir(HddsVolume hddsVolume) {
     return Paths.get(hddsVolume.getVolumeRootDir())
         .resolve(DISK_BALANCER_TMP_DIR).resolve(DISK_BALANCER_DIR);
diff --git a/hadoop-hdds/interface-client/src/main/proto/hdds.proto 
b/hadoop-hdds/interface-client/src/main/proto/hdds.proto
index e105826fbb..27ca714e8a 100644
--- a/hadoop-hdds/interface-client/src/main/proto/hdds.proto
+++ b/hadoop-hdds/interface-client/src/main/proto/hdds.proto
@@ -561,4 +561,6 @@ message DatanodeDiskBalancerInfoProto {
     required double currentVolumeDensitySum = 2;
     optional DiskBalancerRunningStatus runningStatus = 3;
     optional DiskBalancerConfigurationProto diskBalancerConf = 4;
+    optional uint64 successMoveCount = 5;
+    optional uint64 failureMoveCount = 6;
 }
diff --git 
a/hadoop-hdds/interface-server/src/main/proto/ScmServerDatanodeHeartbeatProtocol.proto
 
b/hadoop-hdds/interface-server/src/main/proto/ScmServerDatanodeHeartbeatProtocol.proto
index 4602274301..2f0bb37b59 100644
--- 
a/hadoop-hdds/interface-server/src/main/proto/ScmServerDatanodeHeartbeatProtocol.proto
+++ 
b/hadoop-hdds/interface-server/src/main/proto/ScmServerDatanodeHeartbeatProtocol.proto
@@ -499,6 +499,8 @@ message DiskBalancerReportProto {
   required bool isRunning = 1;
   optional uint64 balancedBytes = 2;
   optional DiskBalancerConfigurationProto diskBalancerConf = 3;
+  optional uint64 successMoveCount = 4;
+  optional uint64 failureMoveCount = 5;
 }
 
 /**
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/DiskBalancerManager.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/DiskBalancerManager.java
index e6771b5f9b..6ca5e610d8 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/DiskBalancerManager.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/node/DiskBalancerManager.java
@@ -32,6 +32,7 @@
 import org.apache.hadoop.hdds.conf.OzoneConfiguration;
 import org.apache.hadoop.hdds.protocol.DatanodeDetails;
 import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
+import 
org.apache.hadoop.hdds.protocol.proto.HddsProtos.DiskBalancerRunningStatus;
 import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.DiskBalancerReportProto;
 import 
org.apache.hadoop.hdds.protocol.proto.StorageContainerDatanodeProtocolProtos.StorageReportProto;
 import org.apache.hadoop.hdds.scm.DatanodeAdminError;
@@ -248,7 +249,7 @@ private boolean shouldReturnDatanode(
       DatanodeDetails datanodeDetails) {
     boolean shouldReturn = true;
     // If status specified, do not return if status not match.
-    if (status != null && getRunningStatus(datanodeDetails) != status) {
+    if (status != null && getStatus(datanodeDetails).getRunningStatus() != 
status) {
       shouldReturn = false;
     }
     return shouldReturn;
@@ -258,14 +259,16 @@ private HddsProtos.DatanodeDiskBalancerInfoProto 
getInfoProto(
       DatanodeInfo dn, int clientVersion) {
     double volumeDensitySum =
         getVolumeDataDensitySumForDatanodeDetails(dn);
-    HddsProtos.DiskBalancerRunningStatus runningStatus =
-        getRunningStatus(dn);
+    DiskBalancerStatus status = getStatus(dn);
+
     HddsProtos.DatanodeDiskBalancerInfoProto.Builder builder =
         HddsProtos.DatanodeDiskBalancerInfoProto.newBuilder()
             .setNode(dn.toProto(clientVersion))
             .setCurrentVolumeDensitySum(volumeDensitySum)
-            .setRunningStatus(getRunningStatus(dn));
-    if (runningStatus != HddsProtos.DiskBalancerRunningStatus.UNKNOWN) {
+            .setRunningStatus(status.getRunningStatus())
+            .setSuccessMoveCount(status.getSuccessMoveCount())
+            .setFailureMoveCount(status.getFailureMoveCount());
+    if (status.getRunningStatus() != DiskBalancerRunningStatus.UNKNOWN) {
       builder.setDiskBalancerConf(statusMap.get(dn)
           .getDiskBalancerConfiguration().toProtobufBuilder());
     }
@@ -301,23 +304,15 @@ private double getVolumeDataDensitySumForDatanodeDetails(
     return volumeDensitySum;
   }
 
-  private HddsProtos.DiskBalancerRunningStatus getRunningStatus(
-      DatanodeDetails datanodeDetails) {
-    if (!statusMap.containsKey(datanodeDetails)) {
-      return HddsProtos.DiskBalancerRunningStatus.UNKNOWN;
-    } else {
-      if (statusMap.get(datanodeDetails).isRunning()) {
-        return HddsProtos.DiskBalancerRunningStatus.RUNNING;
-      } else {
-        return HddsProtos.DiskBalancerRunningStatus.STOPPED;
-      }
-    }
+  private DiskBalancerStatus getStatus(DatanodeDetails datanodeDetails) {
+    return statusMap.computeIfAbsent(datanodeDetails,
+        dn -> new DiskBalancerStatus(DiskBalancerRunningStatus.UNKNOWN, new 
DiskBalancerConfiguration(), 0, 0));
   }
 
   @VisibleForTesting
   public void addRunningDatanode(DatanodeDetails datanodeDetails) {
-    statusMap.put(datanodeDetails, new DiskBalancerStatus(true,
-        new DiskBalancerConfiguration()));
+    statusMap.put(datanodeDetails, new 
DiskBalancerStatus(DiskBalancerRunningStatus.RUNNING,
+        new DiskBalancerConfiguration(), 0, 0));
   }
 
   public void processDiskBalancerReport(DiskBalancerReportProto reportProto,
@@ -328,8 +323,11 @@ public void 
processDiskBalancerReport(DiskBalancerReportProto reportProto,
             DiskBalancerConfiguration.fromProtobuf(
                 reportProto.getDiskBalancerConf(), conf) :
             new DiskBalancerConfiguration();
-    statusMap.put(dn, new DiskBalancerStatus(isRunning,
-        diskBalancerConfiguration));
+    long successMoveCount = reportProto.getSuccessMoveCount();
+    long failureMoveCount = reportProto.getFailureMoveCount();
+    statusMap.put(dn, new DiskBalancerStatus(
+        isRunning ? DiskBalancerRunningStatus.RUNNING : 
DiskBalancerRunningStatus.STOPPED,
+        diskBalancerConfiguration, successMoveCount, failureMoveCount));
     if (reportProto.hasBalancedBytes()) {
       balancedBytesMap.put(dn, reportProto.getBalancedBytes());
     }
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 bf0f367d9b..dc8f4836ab 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
@@ -17,6 +17,7 @@
 
 package org.apache.hadoop.hdds.scm.node;
 
+import 
org.apache.hadoop.hdds.protocol.proto.HddsProtos.DiskBalancerRunningStatus;
 import org.apache.hadoop.hdds.scm.storage.DiskBalancerConfiguration;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -28,20 +29,32 @@ public class DiskBalancerStatus {
   public static final Logger LOG =
       LoggerFactory.getLogger(DiskBalancerStatus.class);
 
-  private boolean isRunning;
+  private DiskBalancerRunningStatus isRunning;
   private DiskBalancerConfiguration diskBalancerConfiguration;
+  private long successMoveCount;
+  private long failureMoveCount;
 
-
-  public DiskBalancerStatus(boolean isRunning, DiskBalancerConfiguration conf) 
{
+  public DiskBalancerStatus(DiskBalancerRunningStatus isRunning, 
DiskBalancerConfiguration conf,
+      long successMoveCount, long failureMoveCount) {
     this.isRunning = isRunning;
     this.diskBalancerConfiguration = conf;
+    this.successMoveCount = successMoveCount;
+    this.failureMoveCount = failureMoveCount;
   }
 
-  public boolean isRunning() {
+  public DiskBalancerRunningStatus getRunningStatus() {
     return isRunning;
   }
 
   public DiskBalancerConfiguration getDiskBalancerConfiguration() {
     return diskBalancerConfiguration;
   }
+
+  public long getSuccessMoveCount() {
+    return successMoveCount;
+  }
+
+  public long getFailureMoveCount() {
+    return failureMoveCount;
+  }
 }
diff --git 
a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerStatusSubcommand.java
 
b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerStatusSubcommand.java
index c290308ecf..75d3759ffd 100644
--- 
a/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerStatusSubcommand.java
+++ 
b/hadoop-hdds/tools/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/DiskBalancerStatusSubcommand.java
@@ -60,27 +60,31 @@ public void execute(ScmClient scmClient) throws IOException 
{
   private String generateStatus(
       List<HddsProtos.DatanodeDiskBalancerInfoProto> protos) {
     StringBuilder formatBuilder = new StringBuilder("Status result:%n" +
-        "%-50s %s %s %s %s %s%n");
+        "%-40s %-20s %-10s %-10s %-15s %-15s %-15s %-15s%n");
 
     List<String> contentList = new ArrayList<>();
     contentList.add("Datanode");
     contentList.add("VolumeDensity");
     contentList.add("Status");
-    contentList.add("Threshold");
+    contentList.add("Threshold(%)");
     contentList.add("BandwidthInMB");
-    contentList.add("ParallelThread");
+    contentList.add("Threads");
+    contentList.add("SuccessMove");
+    contentList.add("FailureMove");
 
     for (HddsProtos.DatanodeDiskBalancerInfoProto proto: protos) {
-      formatBuilder.append("%-50s %s %s %s %s %s%n");
+      formatBuilder.append("%-40s %-20s %-10s %-10s %-15s %-15s %-15s 
%-15s%n");
       contentList.add(proto.getNode().getHostName());
       contentList.add(String.valueOf(proto.getCurrentVolumeDensitySum()));
       contentList.add(proto.getRunningStatus().name());
       contentList.add(
-          String.valueOf(proto.getDiskBalancerConf().getThreshold()));
+          String.format("%.4f", proto.getDiskBalancerConf().getThreshold()));
       contentList.add(
           String.valueOf(proto.getDiskBalancerConf().getDiskBandwidthInMB()));
       contentList.add(
           String.valueOf(proto.getDiskBalancerConf().getParallelThread()));
+      contentList.add(String.valueOf(proto.getSuccessMoveCount()));
+      contentList.add(String.valueOf(proto.getFailureMoveCount()));
     }
 
     return String.format(formatBuilder.toString(),


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

Reply via email to