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

ivandika 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 782ad62057 HDDS-11388. Fix unnecessary call to the DB for 
ContainerBalancer#getBalancerStatusInfo (#7224)
782ad62057 is described below

commit 782ad6205740430d6f4e08361e02f36f4040eef6
Author: Ivan Andika <[email protected]>
AuthorDate: Thu Oct 24 22:51:39 2024 +0800

    HDDS-11388. Fix unnecessary call to the DB for 
ContainerBalancer#getBalancerStatusInfo (#7224)
---
 .../scm/container/balancer/ContainerBalancer.java    | 20 +++++++++++---------
 .../container/balancer/TestContainerBalancer.java    | 17 +++++++++++++++++
 .../src/main/smoketest/balancer/testBalancer.robot   |  1 -
 3 files changed, 28 insertions(+), 10 deletions(-)

diff --git 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/balancer/ContainerBalancer.java
 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/balancer/ContainerBalancer.java
index 3dddd67bd8..2f6b8a7f81 100644
--- 
a/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/balancer/ContainerBalancer.java
+++ 
b/hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/balancer/ContainerBalancer.java
@@ -183,17 +183,19 @@ public class ContainerBalancer extends StatefulService {
    * @return balancer status info if balancer started
    */
   public ContainerBalancerStatusInfo getBalancerStatusInfo() throws 
IOException {
-    if (isBalancerRunning()) {
-      ContainerBalancerConfigurationProto configProto = 
readConfiguration(ContainerBalancerConfigurationProto.class);
-      return new ContainerBalancerStatusInfo(
-              this.startedAt,
-              configProto,
-              task.getCurrentIterationsStatistic()
-      );
-    } else {
+    lock.lock();
+    try {
+      if (isBalancerRunning()) {
+        return new ContainerBalancerStatusInfo(
+            this.startedAt,
+            config.toProtobufBuilder().setShouldRun(true).build(),
+            task.getCurrentIterationsStatistic()
+        );
+      }
       return null;
+    } finally {
+      lock.unlock();
     }
-
   }
   /**
    * Checks if ContainerBalancer is in valid state to call stop.
diff --git 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/balancer/TestContainerBalancer.java
 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/balancer/TestContainerBalancer.java
index 662322b42f..c779288747 100644
--- 
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/balancer/TestContainerBalancer.java
+++ 
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/balancer/TestContainerBalancer.java
@@ -44,6 +44,7 @@ import org.slf4j.event.Level;
 import static org.apache.hadoop.hdds.HddsConfigKeys.HDDS_NODE_REPORT_INTERVAL;
 import static 
org.apache.hadoop.hdds.HddsConfigKeys.HDDS_SCM_WAIT_TIME_AFTER_SAFE_MODE_EXIT;
 import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertThrowsExactly;
 import static org.junit.jupiter.api.Assertions.assertSame;
@@ -257,6 +258,22 @@ public class TestContainerBalancer {
     stopBalancer();
   }
 
+  @Test
+  public void testGetBalancerStatusInfo() throws Exception {
+    startBalancer(balancerConfiguration);
+    assertSame(ContainerBalancerTask.Status.RUNNING, 
containerBalancer.getBalancerStatus());
+
+    // Assert the configuration fields that were explicitly set
+    ContainerBalancerStatusInfo status = 
containerBalancer.getBalancerStatusInfo();
+    assertEquals(balancerConfiguration.getThreshold(),
+        
Double.parseDouble(status.getConfiguration().getUtilizationThreshold()));
+    assertEquals(balancerConfiguration.getIterations(), 
status.getConfiguration().getIterations());
+    assertEquals(balancerConfiguration.getTriggerDuEnable(), 
status.getConfiguration().getTriggerDuBeforeMoveEnable());
+
+    stopBalancer();
+    assertSame(ContainerBalancerTask.Status.STOPPED, 
containerBalancer.getBalancerStatus());
+  }
+
   private void startBalancer(ContainerBalancerConfiguration config)
       throws IllegalContainerBalancerStateException, IOException,
       InvalidContainerBalancerConfigurationException, TimeoutException {
diff --git a/hadoop-ozone/dist/src/main/smoketest/balancer/testBalancer.robot 
b/hadoop-ozone/dist/src/main/smoketest/balancer/testBalancer.robot
index 06d8a3416f..e7be2a2b66 100644
--- a/hadoop-ozone/dist/src/main/smoketest/balancer/testBalancer.robot
+++ b/hadoop-ozone/dist/src/main/smoketest/balancer/testBalancer.robot
@@ -67,7 +67,6 @@ Run Container Balancer
 
 Wait Finish Of Balancing
     ${result} =             Execute                         ozone admin 
containerbalancer status
-                            Should Contain                  ${result}          
   ContainerBalancer is Running.
                             Wait Until Keyword Succeeds      6min    10sec    
ContainerBalancer is Not Running
                             Sleep                   60000ms
 


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

Reply via email to