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]

Reply via email to