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 3ec7c5f664 HDDS-8840. Add "moves scheduled" metric to Container 
Balancer (#4998)
3ec7c5f664 is described below

commit 3ec7c5f6646fa4d23d6d9078f13e8248f6593c78
Author: Siddhant Sangwan <[email protected]>
AuthorDate: Thu Jun 29 13:58:32 2023 +0530

    HDDS-8840. Add "moves scheduled" metric to Container Balancer (#4998)
---
 .../balancer/ContainerBalancerMetrics.java         | 36 ++++++++++++++++++++++
 .../container/balancer/ContainerBalancerTask.java  |  3 ++
 .../balancer/TestContainerBalancerTask.java        | 19 +++++++++++-
 3 files changed, 57 insertions(+), 1 deletion(-)

diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/balancer/ContainerBalancerMetrics.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/balancer/ContainerBalancerMetrics.java
index 61e0761890..09558d3a6d 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/balancer/ContainerBalancerMetrics.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/balancer/ContainerBalancerMetrics.java
@@ -81,6 +81,14 @@ public final class ContainerBalancerMetrics {
       "exceptionally in latest iteration of Container Balancer.")
   private MutableCounterLong numContainerMovesFailedInLatestIteration;
 
+  @Metric(about = "Number of container moves that were scheduled in the " +
+      "latest iteration of Container Balancer.")
+  private MutableCounterLong numContainerMovesScheduledInLatestIteration;
+
+  @Metric(about = "Total number of container moves that were scheduled across" 
+
+      " all iterations of Container Balancer.")
+  private MutableCounterLong numContainerMovesScheduled;
+
   /**
    * Create and register metrics named {@link ContainerBalancerMetrics#NAME}
    * for {@link ContainerBalancer}.
@@ -97,6 +105,32 @@ public final class ContainerBalancerMetrics {
     this.ms = ms;
   }
 
+  /**
+   * Gets the number of container moves scheduled across all iterations of
+   * Container Balancer.
+   * @return number of moves
+   */
+  public long getNumContainerMovesScheduled() {
+    return numContainerMovesScheduled.value();
+  }
+
+  void incrementNumContainerMovesScheduled(long valueToAdd) {
+    this.numContainerMovesScheduled.incr(valueToAdd);
+  }
+
+  /**
+   * Gets the number of container moves scheduled in the latest iteration of
+   * Container Balancer.
+   * @return number of moves
+   */
+  public long getNumContainerMovesScheduledInLatestIteration() {
+    return numContainerMovesScheduledInLatestIteration.value();
+  }
+
+  void incrementNumContainerMovesScheduledInLatestIteration(long valueToAdd) {
+    this.numContainerMovesScheduledInLatestIteration.incr(valueToAdd);
+  }
+
   /**
    * Gets the amount of data moved by Container Balancer in the latest
    * iteration.
@@ -158,6 +192,8 @@ public final class ContainerBalancerMetrics {
     case REPLICATION_NOT_HEALTHY_AFTER_MOVE:
     case FAIL_CONTAINER_ALREADY_BEING_MOVED:
     case FAIL_UNEXPECTED_ERROR:
+      incrementNumContainerMovesFailedInLatestIteration(valueToAdd);
+      break;
     default:
       break;
     }
diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/balancer/ContainerBalancerTask.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/balancer/ContainerBalancerTask.java
index af65c14575..6541d75d27 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/balancer/ContainerBalancerTask.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/balancer/ContainerBalancerTask.java
@@ -627,6 +627,8 @@ public class ContainerBalancerTask implements Runnable {
         selectedSources.size() + selectedTargets.size();
     metrics.incrementNumDatanodesInvolvedInLatestIteration(
         countDatanodesInvolvedPerIteration);
+    metrics.incrementNumContainerMovesScheduled(
+        metrics.getNumContainerMovesScheduledInLatestIteration());
     metrics.incrementNumContainerMovesCompleted(
         metrics.getNumContainerMovesCompletedInLatestIteration());
     metrics.incrementNumContainerMovesTimeout(
@@ -817,6 +819,7 @@ public class ContainerBalancerTask implements Runnable {
         future = moveManager.move(containerID, source,
             moveSelection.getTargetNode());
       }
+      metrics.incrementNumContainerMovesScheduledInLatestIteration(1);
 
       future = future.whenComplete((result, ex) -> {
         metrics.incrementCurrentIterationContainerMoveMetric(result, 1);
diff --git 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/balancer/TestContainerBalancerTask.java
 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/balancer/TestContainerBalancerTask.java
index 9e20b7c319..5f6cdf8a35 100644
--- 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/balancer/TestContainerBalancerTask.java
+++ 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/balancer/TestContainerBalancerTask.java
@@ -690,7 +690,8 @@ public class TestContainerBalancerTask {
   @Test
   public void testMetrics()
       throws IllegalContainerBalancerStateException, IOException,
-      InvalidContainerBalancerConfigurationException, TimeoutException {
+      InvalidContainerBalancerConfigurationException, TimeoutException,
+      NodeNotFoundException {
     conf.set("hdds.datanode.du.refresh.period", "1ms");
     balancerConfiguration.setBalancingInterval(Duration.ofMillis(2));
     balancerConfiguration.setThreshold(10);
@@ -699,6 +700,11 @@ public class TestContainerBalancerTask {
     // deliberately set max size per iteration to a low value, 6 GB
     balancerConfiguration.setMaxSizeToMovePerIteration(6 * STORAGE_UNIT);
     balancerConfiguration.setMaxDatanodesPercentageToInvolvePerIteration(100);
+    Mockito.when(moveManager.move(any(), any(), any()))
+           .thenReturn(CompletableFuture.completedFuture(
+               MoveManager.MoveResult.REPLICATION_FAIL_NODE_UNHEALTHY))
+           .thenReturn(CompletableFuture.completedFuture(
+               MoveManager.MoveResult.COMPLETED));
 
     startBalancer(balancerConfiguration);
     stopBalancer();
@@ -708,7 +714,18 @@ public class TestContainerBalancerTask {
             balancerConfiguration.getThreshold()).size(),
         metrics.getNumDatanodesUnbalanced());
     Assertions.assertTrue(metrics.getDataSizeMovedGBInLatestIteration() <= 6);
+    Assertions.assertTrue(metrics.getDataSizeMovedGB() > 0);
     Assertions.assertEquals(1, metrics.getNumIterations());
+    Assertions.assertTrue(
+        metrics.getNumContainerMovesScheduledInLatestIteration() > 0);
+    Assertions.assertEquals(metrics.getNumContainerMovesScheduled(),
+        metrics.getNumContainerMovesScheduledInLatestIteration());
+    Assertions.assertEquals(metrics.getNumContainerMovesScheduled(),
+        metrics.getNumContainerMovesCompleted() +
+            metrics.getNumContainerMovesFailed() +
+            metrics.getNumContainerMovesTimeout());
+    Assertions.assertEquals(0, metrics.getNumContainerMovesTimeout());
+    Assertions.assertEquals(1, metrics.getNumContainerMovesFailed());
   }
 
   /**


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

Reply via email to