This is an automated email from the ASF dual-hosted git repository.
siyao 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 73d9082168 HDDS-7468. Recon: clusterState API Changes for adding
missingContainerCount (#3952)
73d9082168 is described below
commit 73d9082168fb38811656e1cef6f0df5e32129803
Author: devmadhuu <[email protected]>
AuthorDate: Tue Nov 15 23:41:49 2022 +0530
HDDS-7468. Recon: clusterState API Changes for adding missingContainerCount
(#3952)
---
.../hadoop/ozone/recon/api/ClusterStateEndpoint.java | 19 ++++++++++++++++++-
.../ozone/recon/api/types/ClusterStateResponse.java | 18 ++++++++++++++++++
.../apache/hadoop/ozone/recon/api/TestEndpoints.java | 8 +++++++-
3 files changed, 43 insertions(+), 2 deletions(-)
diff --git
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/ClusterStateEndpoint.java
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/ClusterStateEndpoint.java
index 17c5a271f5..c7b2374e18 100644
---
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/ClusterStateEndpoint.java
+++
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/ClusterStateEndpoint.java
@@ -24,12 +24,15 @@ import org.apache.hadoop.hdds.scm.node.NodeStatus;
import org.apache.hadoop.hdds.scm.server.OzoneStorageContainerManager;
import org.apache.hadoop.ozone.recon.api.types.ClusterStateResponse;
import org.apache.hadoop.ozone.recon.api.types.DatanodeStorageReport;
+import org.apache.hadoop.ozone.recon.persistence.ContainerHealthSchemaManager;
import org.apache.hadoop.ozone.recon.scm.ReconContainerManager;
import org.apache.hadoop.ozone.recon.scm.ReconNodeManager;
import org.apache.hadoop.ozone.recon.scm.ReconPipelineManager;
import org.apache.hadoop.ozone.recon.tasks.TableCountTask;
+import org.hadoop.ozone.recon.schema.ContainerSchemaDefinition;
import org.hadoop.ozone.recon.schema.tables.daos.GlobalStatsDao;
import org.hadoop.ozone.recon.schema.tables.pojos.GlobalStats;
+import org.hadoop.ozone.recon.schema.tables.pojos.UnhealthyContainers;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -55,21 +58,27 @@ public class ClusterStateEndpoint {
private static final Logger LOG =
LoggerFactory.getLogger(ClusterStateEndpoint.class);
+ public static final int MISSING_CONTAINER_COUNT_LIMIT = 1001;
private ReconNodeManager nodeManager;
private ReconPipelineManager pipelineManager;
private ReconContainerManager containerManager;
private GlobalStatsDao globalStatsDao;
+ private final ContainerHealthSchemaManager containerHealthSchemaManager;
+
@Inject
ClusterStateEndpoint(OzoneStorageContainerManager reconSCM,
- GlobalStatsDao globalStatsDao) {
+ GlobalStatsDao globalStatsDao,
+ ContainerHealthSchemaManager
+ containerHealthSchemaManager) {
this.nodeManager =
(ReconNodeManager) reconSCM.getScmNodeManager();
this.pipelineManager = (ReconPipelineManager)
reconSCM.getPipelineManager();
this.containerManager =
(ReconContainerManager) reconSCM.getContainerManager();
this.globalStatsDao = globalStatsDao;
+ this.containerHealthSchemaManager = containerHealthSchemaManager;
}
/**
@@ -81,6 +90,13 @@ public class ClusterStateEndpoint {
List<DatanodeDetails> datanodeDetails = nodeManager.getAllNodes();
int containers = this.containerManager.getContainers().size();
int pipelines = this.pipelineManager.getPipelines().size();
+ List<UnhealthyContainers> unhealthyContainers =
containerHealthSchemaManager
+ .getUnhealthyContainers(
+ ContainerSchemaDefinition.UnHealthyContainerStates.MISSING,
+ 0, MISSING_CONTAINER_COUNT_LIMIT);
+ int totalMissingContainerCount = unhealthyContainers.size() ==
+ MISSING_CONTAINER_COUNT_LIMIT ?
+ MISSING_CONTAINER_COUNT_LIMIT : unhealthyContainers.size();
int healthyDatanodes =
nodeManager.getNodeCount(NodeStatus.inServiceHealthy()) +
nodeManager.getNodeCount(NodeStatus.inServiceHealthyReadOnly());
@@ -120,6 +136,7 @@ public class ClusterStateEndpoint {
.setStorageReport(storageReport)
.setPipelines(pipelines)
.setContainers(containers)
+ .setMissingContainers(totalMissingContainerCount)
.setTotalDatanodes(datanodeDetails.size())
.setHealthyDatanodes(healthyDatanodes)
.build();
diff --git
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/ClusterStateResponse.java
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/ClusterStateResponse.java
index a5cf9aecb5..b2b9692db7 100644
---
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/ClusterStateResponse.java
+++
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/ClusterStateResponse.java
@@ -54,6 +54,12 @@ public final class ClusterStateResponse {
@JsonProperty("containers")
private int containers;
+ /**
+ * Total count of missing containers in the cluster.
+ */
+ @JsonProperty("missingContainers")
+ private int missingContainers;
+
/**
* Total count of volumes in the cluster.
*/
@@ -90,6 +96,7 @@ public final class ClusterStateResponse {
this.healthyDatanodes = b.healthyDatanodes;
this.storageReport = b.storageReport;
this.containers = b.containers;
+ this.missingContainers = b.missingContainers;
}
/**
@@ -102,6 +109,7 @@ public final class ClusterStateResponse {
private int healthyDatanodes;
private DatanodeStorageReport storageReport;
private int containers;
+ private int missingContainers;
private long volumes;
private long buckets;
private long keys;
@@ -109,6 +117,7 @@ public final class ClusterStateResponse {
public Builder() {
// Default values
this.containers = 0;
+ this.missingContainers = 0;
this.volumes = 0;
this.buckets = 0;
this.keys = 0;
@@ -142,6 +151,11 @@ public final class ClusterStateResponse {
return this;
}
+ public Builder setMissingContainers(int missingContainers) {
+ this.missingContainers = missingContainers;
+ return this;
+ }
+
public Builder setVolumes(long volumes) {
this.volumes = volumes;
return this;
@@ -188,6 +202,10 @@ public final class ClusterStateResponse {
return volumes;
}
+ public int getMissingContainers() {
+ return missingContainers;
+ }
+
public long getBuckets() {
return buckets;
}
diff --git
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestEndpoints.java
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestEndpoints.java
index 9383ca9857..3d51dc1146 100644
---
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestEndpoints.java
+++
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestEndpoints.java
@@ -152,6 +152,8 @@ public class TestEndpoints extends AbstractReconSqlDBTest {
"prometheus-test-response.txt";
private ReconUtils reconUtilsMock;
+ private ContainerHealthSchemaManager containerHealthSchemaManager;
+
private void initializeInjector() throws Exception {
reconOMMetadataManager = getTestReconOmMetadataManager(
initializeNewOmMetadataManager(temporaryFolder.newFolder()),
@@ -241,8 +243,11 @@ public class TestEndpoints extends AbstractReconSqlDBTest {
globalStatsDao, sqlConfiguration, reconOMMetadataManager);
reconScm = (ReconStorageContainerManagerFacade)
reconTestInjector.getInstance(OzoneStorageContainerManager.class);
+ containerHealthSchemaManager =
+ reconTestInjector.getInstance(ContainerHealthSchemaManager.class);
clusterStateEndpoint =
- new ClusterStateEndpoint(reconScm, globalStatsDao);
+ new ClusterStateEndpoint(reconScm, globalStatsDao,
+ containerHealthSchemaManager);
MetricsServiceProviderFactory metricsServiceProviderFactory =
reconTestInjector.getInstance(MetricsServiceProviderFactory.class);
metricsProxyEndpoint =
@@ -589,6 +594,7 @@ public class TestEndpoints extends AbstractReconSqlDBTest {
Assertions.assertEquals(0, clusterStateResponse.getKeys());
Assertions.assertEquals(2, clusterStateResponse.getTotalDatanodes());
Assertions.assertEquals(2, clusterStateResponse.getHealthyDatanodes());
+ Assertions.assertEquals(0, clusterStateResponse.getMissingContainers());
waitAndCheckConditionAfterHeartbeat(() -> {
Response response1 = clusterStateEndpoint.getClusterState();
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]