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]