This is an automated email from the ASF dual-hosted git repository.
arafat2198 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 c32da04e4b5 HDDS-14621. [Recon] Populate Missing Fields in
/clusterState StorageReport (#9754)
c32da04e4b5 is described below
commit c32da04e4b5c24b991475d9b995d18aacf82c36c
Author: Priyesh Karatha <[email protected]>
AuthorDate: Wed Feb 18 13:27:31 2026 +0530
HDDS-14621. [Recon] Populate Missing Fields in /clusterState StorageReport
(#9754)
---
.../static/swagger-resources/recon-api.yaml | 57 ++++++++++++++++-
.../ozone/recon/api/ClusterStateEndpoint.java | 58 ++++++++++++-----
.../recon/api/types/ClusterStateResponse.java | 8 +--
...torageReport.java => ClusterStorageReport.java} | 51 ++++-----------
.../recon/api/types/DatanodeStorageReport.java | 8 +--
.../ozone/recon/api/TestClusterStateEndpoint.java | 74 +++++++++++++++++++++-
.../hadoop/ozone/recon/api/TestEndpoints.java | 4 +-
7 files changed, 189 insertions(+), 71 deletions(-)
diff --git
a/hadoop-hdds/docs/themes/ozonedoc/static/swagger-resources/recon-api.yaml
b/hadoop-hdds/docs/themes/ozonedoc/static/swagger-resources/recon-api.yaml
index 964efb87aff..ebaf5e50820 100644
--- a/hadoop-hdds/docs/themes/ozonedoc/static/swagger-resources/recon-api.yaml
+++ b/hadoop-hdds/docs/themes/ozonedoc/static/swagger-resources/recon-api.yaml
@@ -1764,9 +1764,15 @@ components:
- 0
- 100
- 40
- StorageReport:
+ DataNodeStorageReport:
type: object
properties:
+ datanodeUuid:
+ type: string
+ example: 841be80f-0454-47df-b676
+ hostName:
+ type: string
+ example: ozone-datanode-1
capacity:
type: number
example: 270429917184
@@ -1779,6 +1785,51 @@ components:
committed:
type: number
example: 27007111
+ minimumFreeSpace:
+ type: number
+ example: 20480
+ reserved:
+ type: number
+ example: 31457280
+ filesystemCapacity:
+ type: number
+ example: 270461374464
+ filesystemUsed:
+ type: number
+ example: 390262784
+ filesystemAvailable:
+ type: number
+ example: 270071111680
+ ClusterStorageReport:
+ type: object
+ properties:
+ capacity:
+ type: number
+ example: 270429917184
+ used:
+ type: number
+ example: 358805504
+ remaining:
+ type: number
+ example: 270071111680
+ committed:
+ type: number
+ example: 27007111
+ minimumFreeSpace:
+ type: number
+ example: 20480
+ reserved:
+ type: number
+ example: 31457280
+ filesystemCapacity:
+ type: number
+ example: 270461374464
+ filesystemUsed:
+ type: number
+ example: 390262784
+ filesystemAvailable:
+ type: number
+ example: 270071111680
ClusterState:
type: object
properties:
@@ -1806,7 +1857,7 @@ components:
type: integer
example: 4
storageReport:
- $ref: "#/components/schemas/StorageReport"
+ $ref: "#/components/schemas/ClusterStorageReport"
containers:
type: integer
example: 26
@@ -1857,7 +1908,7 @@ components:
type: number
example: 1605738400544
storageReport:
- $ref: "#/components/schemas/StorageReport"
+ $ref: "#/components/schemas/DataNodeStorageReport"
pipelines:
type: array
items:
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 864483c9578..05037e3166f 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
@@ -36,13 +36,15 @@
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
+import org.apache.hadoop.hdds.fs.SpaceUsageSource;
import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
import org.apache.hadoop.hdds.scm.container.placement.metrics.SCMNodeStat;
+import org.apache.hadoop.hdds.scm.node.DatanodeInfo;
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.ClusterStorageReport;
import org.apache.hadoop.ozone.recon.api.types.ContainerStateCounts;
-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;
@@ -51,13 +53,12 @@
import org.apache.hadoop.ozone.recon.tasks.GlobalStatsValue;
import org.apache.hadoop.ozone.recon.tasks.OmTableInsightTask;
import org.apache.ozone.recon.schema.ContainerSchemaDefinition;
-import org.apache.ozone.recon.schema.generated.tables.daos.GlobalStatsDao;
import
org.apache.ozone.recon.schema.generated.tables.pojos.UnhealthyContainers;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- * Endpoint to fetch current state of ozone cluster.
+ * Endpoint to fetch the current state of the ozone cluster.
*/
@Path("/clusterState")
@Produces(MediaType.APPLICATION_JSON)
@@ -67,17 +68,15 @@ public class ClusterStateEndpoint {
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 ReconGlobalStatsManager reconGlobalStatsManager;
- private OzoneConfiguration ozoneConfiguration;
+ private final ReconNodeManager nodeManager;
+ private final ReconPipelineManager pipelineManager;
+ private final ReconContainerManager containerManager;
+ private final ReconGlobalStatsManager reconGlobalStatsManager;
+ private final OzoneConfiguration ozoneConfiguration;
private final ContainerHealthSchemaManager containerHealthSchemaManager;
@Inject
ClusterStateEndpoint(OzoneStorageContainerManager reconSCM,
- GlobalStatsDao globalStatsDao,
ReconGlobalStatsManager reconGlobalStatsManager,
ContainerHealthSchemaManager
containerHealthSchemaManager,
@@ -87,14 +86,13 @@ public class ClusterStateEndpoint {
this.pipelineManager = (ReconPipelineManager)
reconSCM.getPipelineManager();
this.containerManager =
(ReconContainerManager) reconSCM.getContainerManager();
- this.globalStatsDao = globalStatsDao;
this.reconGlobalStatsManager = reconGlobalStatsManager;
this.containerHealthSchemaManager = containerHealthSchemaManager;
this.ozoneConfiguration = ozoneConfiguration;
}
/**
- * Return a summary report on current cluster state.
+ * Return a summary report on the current cluster state.
* @return {@link Response}
*/
@GET
@@ -119,18 +117,48 @@ public Response getClusterState() {
this.containerManager.getContainerStateCount(
HddsProtos.LifeCycleState.DELETED));
- int healthyDatanodes =
+ int healthyDataNodes =
nodeManager.getNodeCount(NodeStatus.inServiceHealthy()) +
nodeManager.getNodeCount(NodeStatus.inServiceHealthyReadOnly());
SCMNodeStat stats = nodeManager.getStats();
+ long fsCapacity = 0;
+ long fsUsed = 0;
+ long fsAvailable = 0;
+ List<DatanodeInfo> dataNodes = nodeManager.getAllNodes();
+ if (dataNodes == null || dataNodes.isEmpty()) {
+ LOG.warn("No dataNodes available for filesystem usage calculation");
+ } else {
+ int reportedNodes = 0;
+ int totalNodes = dataNodes.size();
+ for (DatanodeInfo datanode : dataNodes) {
+ SpaceUsageSource.Fixed fsUsage =
nodeManager.getTotalFilesystemUsage(datanode);
+ if (fsUsage != null) {
+ fsCapacity += fsUsage.getCapacity();
+ fsAvailable += fsUsage.getAvailable();
+ fsUsed += fsUsage.getUsedSpace();
+ reportedNodes++;
+ } else {
+ LOG.debug("DataNode {} has not reported filesystem usage",
+ datanode.getUuidString());
+ }
+ }
+ if (reportedNodes < totalNodes) {
+ LOG.warn("Filesystem usage incomplete: {}/{} dataNodes reported",
+ reportedNodes, totalNodes);
+ }
+ }
- DatanodeStorageReport storageReport = DatanodeStorageReport.newBuilder()
+ ClusterStorageReport storageReport = ClusterStorageReport.newBuilder()
.setCapacity(stats.getCapacity().get())
.setCommitted(stats.getCommitted().get())
.setUsed(stats.getScmUsed().get())
.setMinimumFreeSpace(stats.getFreeSpaceToSpare().get())
.setRemaining(stats.getRemaining().get())
+ .setReserved(stats.getReserved().get())
+ .setFilesystemUsed(fsUsed)
+ .setFilesystemCapacity(fsCapacity)
+ .setFilesystemAvailable(fsAvailable)
.build();
ClusterStateResponse.Builder builder = ClusterStateResponse.newBuilder();
@@ -197,7 +225,7 @@ public Response getClusterState() {
.setContainers(containerStateCounts.getTotalContainerCount())
.setMissingContainers(containerStateCounts.getMissingContainerCount())
.setTotalDatanodes(nodeManager.getAllNodeCount())
- .setHealthyDatanodes(healthyDatanodes)
+ .setHealthyDatanodes(healthyDataNodes)
.setOpenContainers(containerStateCounts.getOpenContainersCount())
.setDeletedContainers(containerStateCounts.getDeletedContainersCount())
.setScmServiceId(ozoneConfiguration.get(OZONE_SCM_SERVICE_IDS_KEY))
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 0cf2ffaa18a..bb5e323cfe9 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
@@ -46,7 +46,7 @@ public final class ClusterStateResponse {
* Storage Report of the cluster.
*/
@JsonProperty("storageReport")
- private DatanodeStorageReport storageReport;
+ private ClusterStorageReport storageReport;
/**
* Total count of containers in the cluster.
@@ -142,7 +142,7 @@ public static final class Builder {
private int pipelines;
private int totalDatanodes;
private int healthyDatanodes;
- private DatanodeStorageReport storageReport;
+ private ClusterStorageReport storageReport;
private int containers;
private int missingContainers;
private int openContainers;
@@ -186,7 +186,7 @@ public Builder setHealthyDatanodes(int healthyDatanodes) {
return this;
}
- public Builder setStorageReport(DatanodeStorageReport storageReport) {
+ public Builder setStorageReport(ClusterStorageReport storageReport) {
this.storageReport = storageReport;
return this;
}
@@ -263,7 +263,7 @@ public int getHealthyDatanodes() {
return healthyDatanodes;
}
- public DatanodeStorageReport getStorageReport() {
+ public ClusterStorageReport getStorageReport() {
return storageReport;
}
diff --git
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/DatanodeStorageReport.java
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/ClusterStorageReport.java
similarity index 82%
copy from
hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/DatanodeStorageReport.java
copy to
hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/ClusterStorageReport.java
index 390228d983f..b0987c1d874 100644
---
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/DatanodeStorageReport.java
+++
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/ClusterStorageReport.java
@@ -17,16 +17,13 @@
package org.apache.hadoop.ozone.recon.api.types;
-import java.util.Objects;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- * Metadata object that contains storage report of a Datanode.
+ * Metadata object that contains the storage report of the cluster.
*/
-public final class DatanodeStorageReport {
- private String datanodeUuid;
- private String hostName;
+public final class ClusterStorageReport {
private long capacity;
private long used;
private long remaining;
@@ -37,12 +34,10 @@ public final class DatanodeStorageReport {
private long filesystemUsed;
private long filesystemAvailable;
- public DatanodeStorageReport() {
+ public ClusterStorageReport() {
}
- private DatanodeStorageReport(Builder builder) {
- this.datanodeUuid = builder.datanodeUuid;
- this.hostName = builder.hostName;
+ private ClusterStorageReport(Builder builder) {
this.capacity = builder.capacity;
this.used = builder.used;
this.remaining = builder.remaining;
@@ -55,14 +50,6 @@ private DatanodeStorageReport(Builder builder) {
builder.validate();
}
- public String getDatanodeUuid() {
- return datanodeUuid;
- }
-
- public String getHostName() {
- return hostName;
- }
-
public long getCapacity() {
return capacity;
}
@@ -87,10 +74,6 @@ public long getReserved() {
return reserved;
}
- public static Builder newBuilder() {
- return new Builder();
- }
-
public long getFilesystemCapacity() {
return filesystemCapacity;
}
@@ -103,12 +86,14 @@ public long getFilesystemAvailable() {
return filesystemAvailable;
}
+ public static Builder newBuilder() {
+ return new Builder();
+ }
+
/**
* Builder class for DataNodeStorage Report.
*/
public static final class Builder {
- private String datanodeUuid = "";
- private String hostName = "";
private long capacity = 0;
private long used = 0;
private long remaining = 0;
@@ -125,16 +110,6 @@ public static final class Builder {
private Builder() {
}
- public Builder setDatanodeUuid(String datanodeUuid) {
- this.datanodeUuid = datanodeUuid;
- return this;
- }
-
- public Builder setHostName(String hostName) {
- this.hostName = hostName;
- return this;
- }
-
public Builder setCapacity(long capacity) {
this.capacity = capacity;
return this;
@@ -181,8 +156,6 @@ public Builder setFilesystemAvailable(long
filesystemAvailable) {
}
public void validate() {
- Objects.requireNonNull(hostName, "hostName cannot be null");
-
if (capacity < 0) {
throw new IllegalArgumentException("capacity cannot be negative");
}
@@ -218,13 +191,13 @@ public void validate() {
// Logical consistency checks
if (used + remaining > capacity) {
- LOG.warn("Inconsistent storage report for {}: used({}) + remaining({})
> capacity({})",
- hostName, used, remaining, capacity);
+ LOG.warn("Inconsistent storage report for cluster: " +
+ "used({}) + remaining({}) > capacity({})", used, remaining,
capacity);
}
}
- public DatanodeStorageReport build() {
- return new DatanodeStorageReport(this);
+ public ClusterStorageReport build() {
+ return new ClusterStorageReport(this);
}
}
}
diff --git
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/DatanodeStorageReport.java
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/DatanodeStorageReport.java
index 390228d983f..20140e7d843 100644
---
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/DatanodeStorageReport.java
+++
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/DatanodeStorageReport.java
@@ -87,10 +87,6 @@ public long getReserved() {
return reserved;
}
- public static Builder newBuilder() {
- return new Builder();
- }
-
public long getFilesystemCapacity() {
return filesystemCapacity;
}
@@ -103,6 +99,10 @@ public long getFilesystemAvailable() {
return filesystemAvailable;
}
+ public static Builder newBuilder() {
+ return new Builder();
+ }
+
/**
* Builder class for DataNodeStorage Report.
*/
diff --git
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestClusterStateEndpoint.java
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestClusterStateEndpoint.java
index e7250ca952d..6e187095c92 100644
---
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestClusterStateEndpoint.java
+++
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestClusterStateEndpoint.java
@@ -23,6 +23,11 @@
import static
org.apache.hadoop.ozone.recon.OMMetadataManagerTestUtils.getTestReconOmMetadataManager;
import static
org.apache.hadoop.ozone.recon.OMMetadataManagerTestUtils.initializeNewOmMetadataManager;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertInstanceOf;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyLong;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
@@ -30,29 +35,35 @@
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
+import java.util.Collections;
import java.util.concurrent.TimeoutException;
import javax.ws.rs.core.Response;
import org.apache.hadoop.hdds.client.RatisReplicationConfig;
import org.apache.hadoop.hdds.conf.OzoneConfiguration;
+import org.apache.hadoop.hdds.fs.SpaceUsageSource;
import org.apache.hadoop.hdds.protocol.proto.HddsProtos;
import org.apache.hadoop.hdds.scm.container.ContainerInfo;
import
org.apache.hadoop.hdds.scm.container.common.helpers.ContainerWithPipeline;
+import org.apache.hadoop.hdds.scm.container.placement.metrics.SCMNodeStat;
+import org.apache.hadoop.hdds.scm.node.DatanodeInfo;
+import org.apache.hadoop.hdds.scm.node.NodeStatus;
import org.apache.hadoop.hdds.scm.pipeline.Pipeline;
import org.apache.hadoop.hdds.scm.pipeline.PipelineID;
import org.apache.hadoop.hdds.scm.server.OzoneStorageContainerManager;
import org.apache.hadoop.ozone.recon.ReconTestInjector;
import org.apache.hadoop.ozone.recon.api.types.ClusterStateResponse;
+import org.apache.hadoop.ozone.recon.api.types.ClusterStorageReport;
import org.apache.hadoop.ozone.recon.persistence.AbstractReconSqlDBTest;
import org.apache.hadoop.ozone.recon.persistence.ContainerHealthSchemaManager;
import org.apache.hadoop.ozone.recon.recovery.ReconOMMetadataManager;
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.scm.ReconStorageContainerManagerFacade;
import org.apache.hadoop.ozone.recon.spi.ReconGlobalStatsManager;
import org.apache.hadoop.ozone.recon.spi.StorageContainerServiceProvider;
import org.apache.hadoop.ozone.recon.spi.impl.OzoneManagerServiceProviderImpl;
import
org.apache.hadoop.ozone.recon.spi.impl.StorageContainerServiceProviderImpl;
-import org.apache.ozone.recon.schema.generated.tables.daos.GlobalStatsDao;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;
@@ -109,12 +120,11 @@ public void setUp() throws Exception {
ozoneStorageContainerManager.getPipelineManager();
ContainerHealthSchemaManager containerHealthSchemaManager =
reconTestInjector.getInstance(ContainerHealthSchemaManager.class);
- GlobalStatsDao globalStatsDao = getDao(GlobalStatsDao.class);
ReconGlobalStatsManager reconGlobalStatsManager =
reconTestInjector.getInstance(ReconGlobalStatsManager.class);
conf = mock(OzoneConfiguration.class);
clusterStateEndpoint =
- new ClusterStateEndpoint(ozoneStorageContainerManager, globalStatsDao,
+ new ClusterStateEndpoint(ozoneStorageContainerManager,
reconGlobalStatsManager, containerHealthSchemaManager, conf);
pipeline = getRandomPipeline();
pipelineID = pipeline.getId();
@@ -161,6 +171,64 @@ public void testScmAndOmServiceId() {
assertEquals("omServiceId", clusterStateResponse.getOmServiceId());
}
+ @Test
+ public void testStorageReportIsClusterStorageReport() {
+ OzoneStorageContainerManager mockScm =
mock(OzoneStorageContainerManager.class);
+ ReconNodeManager mockNodeManager = mock(ReconNodeManager.class);
+ ReconPipelineManager mockPipelineManager =
mock(ReconPipelineManager.class);
+ ReconContainerManager mockContainerManager =
mock(ReconContainerManager.class);
+ ContainerHealthSchemaManager mockContainerHealthSchemaManager =
+ mock(ContainerHealthSchemaManager.class);
+ ReconGlobalStatsManager mockGlobalStatsManager =
+ mock(ReconGlobalStatsManager.class);
+ OzoneConfiguration mockConf = mock(OzoneConfiguration.class);
+ DatanodeInfo mockDatanode = mock(DatanodeInfo.class);
+
+ when(mockScm.getScmNodeManager()).thenReturn(mockNodeManager);
+ when(mockScm.getPipelineManager()).thenReturn(mockPipelineManager);
+ when(mockScm.getContainerManager()).thenReturn(mockContainerManager);
+
+
when(mockPipelineManager.getPipelines()).thenReturn(Collections.emptyList());
+
when(mockContainerManager.getContainers()).thenReturn(Collections.emptyList());
+
when(mockContainerManager.getContainerStateCount(HddsProtos.LifeCycleState.OPEN))
+ .thenReturn(0);
+
when(mockContainerManager.getContainerStateCount(HddsProtos.LifeCycleState.DELETED))
+ .thenReturn(0);
+ when(mockContainerHealthSchemaManager.getUnhealthyContainers(
+ any(), anyLong(), any(),
anyInt())).thenReturn(Collections.emptyList());
+
+ SCMNodeStat scmNodeStat = new SCMNodeStat(
+ 1000L, 400L, 600L, 300L, 50L, 20L);
+ when(mockNodeManager.getStats()).thenReturn(scmNodeStat);
+
when(mockNodeManager.getNodeCount(NodeStatus.inServiceHealthy())).thenReturn(1);
+ when(mockNodeManager.getNodeCount(NodeStatus.inServiceHealthyReadOnly()))
+ .thenReturn(0);
+ when(mockNodeManager.getAllNodeCount()).thenReturn(1);
+
when(mockNodeManager.getAllNodes()).thenReturn(Collections.singletonList(mockDatanode));
+ when(mockNodeManager.getTotalFilesystemUsage(mockDatanode))
+ .thenReturn(new SpaceUsageSource.Fixed(2000L, 1500L, 500L));
+
+ ClusterStateEndpoint endpoint = new ClusterStateEndpoint(
+ mockScm, mockGlobalStatsManager, mockContainerHealthSchemaManager,
mockConf);
+
+ ClusterStateResponse response =
+ (ClusterStateResponse) endpoint.getClusterState().getEntity();
+
+ assertNotNull(response.getStorageReport());
+ assertInstanceOf(ClusterStorageReport.class, response.getStorageReport());
+
+ ClusterStorageReport report = response.getStorageReport();
+ assertEquals(1000L, report.getCapacity());
+ assertEquals(400L, report.getUsed());
+ assertEquals(600L, report.getRemaining());
+ assertEquals(300L, report.getCommitted());
+ assertEquals(50L, report.getMinimumFreeSpace());
+ assertEquals(20L, report.getReserved());
+ assertEquals(2000L, report.getFilesystemCapacity());
+ assertEquals(500L, report.getFilesystemUsed());
+ assertEquals(1500L, report.getFilesystemAvailable());
+ }
+
ContainerInfo newContainerInfo(long containerId,
HddsProtos.LifeCycleState state) {
return new ContainerInfo.Builder()
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 42907339879..07dd11d8021 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
@@ -141,7 +141,6 @@
import org.apache.hadoop.ozone.security.acl.IAccessAuthorizer;
import org.apache.ozone.recon.schema.UtilizationSchemaDefinition;
import
org.apache.ozone.recon.schema.generated.tables.daos.ContainerCountBySizeDao;
-import org.apache.ozone.recon.schema.generated.tables.daos.GlobalStatsDao;
import
org.apache.ozone.recon.schema.generated.tables.pojos.ContainerCountBySize;
import org.apache.ozone.recon.schema.generated.tables.pojos.FileCountBySize;
import org.apache.ozone.test.LambdaTestUtils;
@@ -294,7 +293,6 @@ private void initializeInjector() throws Exception {
volumeEndpoint = reconTestInjector.getInstance(VolumeEndpoint.class);
bucketEndpoint = reconTestInjector.getInstance(BucketEndpoint.class);
ContainerCountBySizeDao containerCountBySizeDao =
reconScm.getContainerCountBySizeDao();
- GlobalStatsDao globalStatsDao = getDao(GlobalStatsDao.class);
UtilizationSchemaDefinition utilizationSchemaDefinition =
getSchemaDefinition(UtilizationSchemaDefinition.class);
reconFileMetadataManager =
reconTestInjector.getInstance(ReconFileMetadataManager.class);
@@ -314,7 +312,7 @@ private void initializeInjector() throws Exception {
ContainerHealthSchemaManager containerHealthSchemaManager =
reconTestInjector.getInstance(ContainerHealthSchemaManager.class);
clusterStateEndpoint =
- new ClusterStateEndpoint(reconScm, globalStatsDao,
reconGlobalStatsManager,
+ new ClusterStateEndpoint(reconScm, reconGlobalStatsManager,
containerHealthSchemaManager, mock(OzoneConfiguration.class));
containerSizeCountTask = reconScm.getContainerSizeCountTask();
MetricsServiceProviderFactory metricsServiceProviderFactory =
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]