This is an automated email from the ASF dual-hosted git repository.
siddhant 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 b29beb3364 HDDS-11350. NullPointerException thrown on checking
container balancer status (#7134)
b29beb3364 is described below
commit b29beb3364a72f49e62ced6edd34b7f49ad3eab4
Author: Siddhant Sangwan <[email protected]>
AuthorDate: Wed Sep 4 11:08:48 2024 +0530
HDDS-11350. NullPointerException thrown on checking container balancer
status (#7134)
---
.../container/balancer/ContainerBalancerTask.java | 17 ++++++-------
.../hdds/scm/container/balancer/MockedSCM.java | 2 +-
.../balancer/TestContainerBalancerStatusInfo.java | 28 ++++++++++++++++++++++
3 files changed, 38 insertions(+), 9 deletions(-)
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 7fea44671f..19a2f3c2e6 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
@@ -158,6 +158,14 @@ public class ContainerBalancerTask implements Runnable {
this.selectedSources = new HashSet<>();
this.selectedTargets = new HashSet<>();
findSourceStrategy = new FindSourceGreedy(nodeManager);
+ if (config.getNetworkTopologyEnable()) {
+ findTargetStrategy = new FindTargetGreedyByNetworkTopology(
+ containerManager, placementPolicyValidateProxy,
+ nodeManager, networkTopology);
+ } else {
+ findTargetStrategy = new FindTargetGreedyByUsageInfo(containerManager,
+ placementPolicyValidateProxy, nodeManager);
+ }
this.iterationsStatistic = new ArrayList<>();
}
@@ -432,14 +440,7 @@ public class ContainerBalancerTask implements Runnable {
this.maxDatanodesRatioToInvolvePerIteration =
config.getMaxDatanodesRatioToInvolvePerIteration();
this.maxSizeToMovePerIteration = config.getMaxSizeToMovePerIteration();
- if (config.getNetworkTopologyEnable()) {
- findTargetStrategy = new FindTargetGreedyByNetworkTopology(
- containerManager, placementPolicyValidateProxy,
- nodeManager, networkTopology);
- } else {
- findTargetStrategy = new FindTargetGreedyByUsageInfo(containerManager,
- placementPolicyValidateProxy, nodeManager);
- }
+
this.excludeNodes = config.getExcludeNodes();
this.includeNodes = config.getIncludeNodes();
// include/exclude nodes from balancing according to configs
diff --git
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/balancer/MockedSCM.java
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/balancer/MockedSCM.java
index a3ec55d586..0972e57df6 100644
---
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/balancer/MockedSCM.java
+++
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/balancer/MockedSCM.java
@@ -86,7 +86,7 @@ public final class MockedSCM {
}
}
- private void init(@Nonnull ContainerBalancerConfiguration balancerConfig,
@Nonnull OzoneConfiguration ozoneCfg) {
+ void init(@Nonnull ContainerBalancerConfiguration balancerConfig, @Nonnull
OzoneConfiguration ozoneCfg) {
ozoneCfg.setFromObject(balancerConfig);
try {
doMock(balancerConfig, ozoneCfg);
diff --git
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/balancer/TestContainerBalancerStatusInfo.java
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/balancer/TestContainerBalancerStatusInfo.java
index b8ac648e84..48b3ee2d0d 100644
---
a/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/balancer/TestContainerBalancerStatusInfo.java
+++
b/hadoop-hdds/server-scm/src/test/java/org/apache/hadoop/hdds/scm/container/balancer/TestContainerBalancerStatusInfo.java
@@ -19,7 +19,9 @@
package org.apache.hadoop.hdds.scm.container.balancer;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
+import org.apache.hadoop.hdds.scm.server.StorageContainerManager;
import org.apache.hadoop.ozone.OzoneConsts;
+import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import java.util.List;
@@ -55,4 +57,30 @@ class TestContainerBalancerStatusInfo {
});
}
+
+ /**
+ * @see <a
href="https://issues.apache.org/jira/browse/HDDS-11350">HDDS-11350</a>
+ */
+ @Test
+ void
testGetCurrentIterationsStatisticDoesNotThrowNullPointerExceptionWhenBalancingThreadIsSleeping()
{
+ MockedSCM mockedScm = new MockedSCM(new TestableCluster(10,
OzoneConsts.GB));
+ OzoneConfiguration ozoneConfig = new OzoneConfiguration();
+ ContainerBalancerConfiguration config =
ozoneConfig.getObject(ContainerBalancerConfiguration.class);
+
+ config.setIterations(2);
+ // the following config makes the balancing thread go to sleep while
waiting for DU to be triggered in DNs and
+ // updated storage reports to arrive via DN heartbeats - of course, this
is a unit test and NodeManager, DNs etc.
+ // are all mocked
+ config.setTriggerDuEnable(true);
+ mockedScm.init(config, ozoneConfig);
+
+ // run ContainerBalancerTask in a new thread and have the current thread
call getCurrentIterationsStatistic
+ StorageContainerManager scm = mockedScm.getStorageContainerManager();
+ ContainerBalancer cb = new ContainerBalancer(scm);
+ ContainerBalancerTask task = new ContainerBalancerTask(scm, 0, cb,
cb.getMetrics(), config, false);
+ Thread thread = new Thread(task);
+ thread.setDaemon(true);
+ thread.start();
+ Assertions.assertDoesNotThrow(task::getCurrentIterationsStatistic);
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]