Skip to content

Commit 782ad62

Browse files
authored
HDDS-11388. Fix unnecessary call to the DB for ContainerBalancer#getBalancerStatusInfo (apache#7224)
1 parent 35b6a3a commit 782ad62

3 files changed

Lines changed: 28 additions & 10 deletions

File tree

hadoop-hdds/server-scm/src/main/java/org/apache/hadoop/hdds/scm/container/balancer/ContainerBalancer.java

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -183,17 +183,19 @@ public ContainerBalancerTask.Status getBalancerStatus() {
183183
* @return balancer status info if balancer started
184184
*/
185185
public ContainerBalancerStatusInfo getBalancerStatusInfo() throws IOException {
186-
if (isBalancerRunning()) {
187-
ContainerBalancerConfigurationProto configProto = readConfiguration(ContainerBalancerConfigurationProto.class);
188-
return new ContainerBalancerStatusInfo(
189-
this.startedAt,
190-
configProto,
191-
task.getCurrentIterationsStatistic()
192-
);
193-
} else {
186+
lock.lock();
187+
try {
188+
if (isBalancerRunning()) {
189+
return new ContainerBalancerStatusInfo(
190+
this.startedAt,
191+
config.toProtobufBuilder().setShouldRun(true).build(),
192+
task.getCurrentIterationsStatistic()
193+
);
194+
}
194195
return null;
196+
} finally {
197+
lock.unlock();
195198
}
196-
197199
}
198200
/**
199201
* Checks if ContainerBalancer is in valid state to call stop.

hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/balancer/TestContainerBalancer.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import static org.apache.hadoop.hdds.HddsConfigKeys.HDDS_NODE_REPORT_INTERVAL;
4545
import static org.apache.hadoop.hdds.HddsConfigKeys.HDDS_SCM_WAIT_TIME_AFTER_SAFE_MODE_EXIT;
4646
import static org.assertj.core.api.Assertions.assertThat;
47+
import static org.junit.jupiter.api.Assertions.assertEquals;
4748
import static org.junit.jupiter.api.Assertions.assertThrows;
4849
import static org.junit.jupiter.api.Assertions.assertThrowsExactly;
4950
import static org.junit.jupiter.api.Assertions.assertSame;
@@ -257,6 +258,22 @@ public void testDelayedStartOnSCMStatusChange()
257258
stopBalancer();
258259
}
259260

261+
@Test
262+
public void testGetBalancerStatusInfo() throws Exception {
263+
startBalancer(balancerConfiguration);
264+
assertSame(ContainerBalancerTask.Status.RUNNING, containerBalancer.getBalancerStatus());
265+
266+
// Assert the configuration fields that were explicitly set
267+
ContainerBalancerStatusInfo status = containerBalancer.getBalancerStatusInfo();
268+
assertEquals(balancerConfiguration.getThreshold(),
269+
Double.parseDouble(status.getConfiguration().getUtilizationThreshold()));
270+
assertEquals(balancerConfiguration.getIterations(), status.getConfiguration().getIterations());
271+
assertEquals(balancerConfiguration.getTriggerDuEnable(), status.getConfiguration().getTriggerDuBeforeMoveEnable());
272+
273+
stopBalancer();
274+
assertSame(ContainerBalancerTask.Status.STOPPED, containerBalancer.getBalancerStatus());
275+
}
276+
260277
private void startBalancer(ContainerBalancerConfiguration config)
261278
throws IllegalContainerBalancerStateException, IOException,
262279
InvalidContainerBalancerConfigurationException, TimeoutException {

hadoop-ozone/dist/src/main/smoketest/balancer/testBalancer.robot

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@ Run Container Balancer
6767

6868
Wait Finish Of Balancing
6969
${result} = Execute ozone admin containerbalancer status
70-
Should Contain ${result} ContainerBalancer is Running.
7170
Wait Until Keyword Succeeds 6min 10sec ContainerBalancer is Not Running
7271
Sleep 60000ms
7372

0 commit comments

Comments
 (0)