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 4f29762efc2 HDDS-14555. [Recon] Clarify Open Key Bytes breakdown in
Cluster Capacity page (#9705).
4f29762efc2 is described below
commit 4f29762efc2848507b074908e0b2b59ff7bbec94
Author: Priyesh Karatha <[email protected]>
AuthorDate: Fri Feb 27 13:48:40 2026 +0530
HDDS-14555. [Recon] Clarify Open Key Bytes breakdown in Cluster Capacity
page (#9705).
---
.../recon/TestStorageDistributionEndpoint.java | 41 +++++++++++++++-
.../recon/api/StorageDistributionEndpoint.java | 32 +++++++------
.../ozone/recon/api/types/OpenKeyBytesInfo.java | 56 ++++++++++++++++++++++
.../ozone/recon/api/types/UsedSpaceBreakDown.java | 6 +--
.../webapps/recon/ozone-recon-web/api/db.json | 6 ++-
.../mocks/capacityMocks/capacityResponseMocks.ts | 6 ++-
.../src/v2/constants/capacity.constants.tsx | 6 ++-
.../src/v2/pages/capacity/capacity.less | 11 +++++
.../src/v2/pages/capacity/capacity.tsx | 26 ++++++++--
.../ozone-recon-web/src/v2/types/capacity.types.ts | 8 +++-
.../src/views/datanodes/datanodes.less | 2 +-
.../recon/api/TestStorageDistributionEndpoint.java | 6 ++-
12 files changed, 178 insertions(+), 28 deletions(-)
diff --git
a/hadoop-ozone/integration-test-recon/src/test/java/org/apache/hadoop/ozone/recon/TestStorageDistributionEndpoint.java
b/hadoop-ozone/integration-test-recon/src/test/java/org/apache/hadoop/ozone/recon/TestStorageDistributionEndpoint.java
index a7e880a79f7..2a3ca2bb91a 100644
---
a/hadoop-ozone/integration-test-recon/src/test/java/org/apache/hadoop/ozone/recon/TestStorageDistributionEndpoint.java
+++
b/hadoop-ozone/integration-test-recon/src/test/java/org/apache/hadoop/ozone/recon/TestStorageDistributionEndpoint.java
@@ -35,7 +35,9 @@
import com.fasterxml.jackson.databind.ObjectMapper;
import java.time.Duration;
+import java.util.ArrayList;
import java.util.Collections;
+import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -63,6 +65,7 @@
import org.apache.hadoop.ozone.client.OzoneBucket;
import org.apache.hadoop.ozone.client.OzoneClient;
import org.apache.hadoop.ozone.client.OzoneVolume;
+import org.apache.hadoop.ozone.client.io.OzoneOutputStream;
import org.apache.hadoop.ozone.container.common.impl.ContainerSet;
import org.apache.hadoop.ozone.container.common.interfaces.DBHandle;
import
org.apache.hadoop.ozone.container.common.statemachine.DatanodeConfiguration;
@@ -73,6 +76,8 @@
import org.apache.hadoop.ozone.om.helpers.OmKeyArgs;
import org.apache.hadoop.ozone.om.helpers.OmKeyLocationInfo;
import org.apache.hadoop.ozone.om.helpers.OmKeyLocationInfoGroup;
+import org.apache.hadoop.ozone.om.helpers.OmMultipartInfo;
+import org.apache.hadoop.ozone.om.protocol.OzoneManagerProtocol;
import org.apache.hadoop.ozone.recon.api.DataNodeMetricsService;
import org.apache.hadoop.ozone.recon.api.types.DataNodeMetricsServiceResponse;
import org.apache.hadoop.ozone.recon.api.types.DatanodeStorageReport;
@@ -167,6 +172,8 @@ public void
testStorageDistributionEndpoint(ReplicationConfig replicationConfig)
volume.createBucket("bucket1", bucketArgs);
OzoneBucket bucket = volume.getBucket("bucket1");
+ createOpenKeysAndMultipartKeys(volume.getName(), bucket.getName(),
replicationConfig);
+
String rootPath = String.format("%s://%s.%s/",
OzoneConsts.OZONE_URI_SCHEME, bucket.getName(),
bucket.getVolumeName());
@@ -204,6 +211,34 @@ public void
testStorageDistributionEndpoint(ReplicationConfig replicationConfig)
GenericTestUtils.waitFor(this::verifyPendingDeletionAfterKeyDeletionOnDnFailure,
2000, 60000);
}
+ private void createOpenKeysAndMultipartKeys(String volumeName,
+ String bucketName, ReplicationConfig config) throws Exception {
+ ObjectStore objectStore = client.getObjectStore();
+ OzoneManagerProtocol ozoneManagerClient =
+ client.getObjectStore().getClientProxy().getOzoneManagerClient();
+
+ OmKeyArgs openKey = new OmKeyArgs.Builder()
+ .setVolumeName(volumeName)
+ .setBucketName(bucketName)
+ .setKeyName("openkey1")
+ .setReplicationConfig(config)
+ .setDataSize(10)// this sets unreplicated size; replicated = 10 * 3 =
30
+ .setAcls(new ArrayList<>())
+ .setOwnerName("ownerName")
+ .build();
+ ozoneManagerClient.openKey(openKey);
+ //Create a Multipart open key
+ OmMultipartInfo multipartInfo = objectStore.getClientProxy()
+ .initiateMultipartUpload(volumeName, bucketName, "mpukey1",
+ config, new HashMap<>());
+
+ OzoneOutputStream partStream = objectStore.getClientProxy()
+ .createMultipartKey(volumeName, bucketName, "mpukey1",
+ 10L, 1, multipartInfo.getUploadID());
+ partStream.write(new byte[10]);
+ partStream.close();
+ }
+
private boolean verifyStorageDistributionAfterKeyCreation() {
try {
StringBuilder urlBuilder = new StringBuilder();
@@ -213,8 +248,10 @@ private boolean
verifyStorageDistributionAfterKeyCreation() {
MAPPER.readValue(response,
StorageCapacityDistributionResponse.class);
assertEquals(20, storageResponse.getGlobalNamespace().getTotalKeys());
- assertEquals(60,
storageResponse.getGlobalNamespace().getTotalUsedSpace());
- assertEquals(0,
storageResponse.getUsedSpaceBreakDown().getOpenKeyBytes());
+ assertEquals(120,
storageResponse.getGlobalNamespace().getTotalUsedSpace());
+ assertEquals(60,
storageResponse.getUsedSpaceBreakDown().getOpenKeyBytes().getTotalOpenKeyBytes());
+ assertEquals(30,
storageResponse.getUsedSpaceBreakDown().getOpenKeyBytes().getMultipartOpenKeyBytes());
+ assertEquals(30,
storageResponse.getUsedSpaceBreakDown().getOpenKeyBytes().getOpenKeyAndFileBytes());
assertEquals(60,
storageResponse.getUsedSpaceBreakDown().getCommittedKeyBytes());
assertEquals(3, storageResponse.getDataNodeUsage().size());
List<DatanodeStorageReport> reports = storageResponse.getDataNodeUsage();
diff --git
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/StorageDistributionEndpoint.java
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/StorageDistributionEndpoint.java
index 1365c31f2df..2cfc64dd68a 100644
---
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/StorageDistributionEndpoint.java
+++
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/StorageDistributionEndpoint.java
@@ -46,6 +46,7 @@
import org.apache.hadoop.ozone.recon.api.types.DatanodeStorageReport;
import org.apache.hadoop.ozone.recon.api.types.GlobalNamespaceReport;
import org.apache.hadoop.ozone.recon.api.types.GlobalStorageReport;
+import org.apache.hadoop.ozone.recon.api.types.OpenKeyBytesInfo;
import
org.apache.hadoop.ozone.recon.api.types.StorageCapacityDistributionResponse;
import org.apache.hadoop.ozone.recon.api.types.UsedSpaceBreakDown;
import org.apache.hadoop.ozone.recon.scm.ReconNodeManager;
@@ -97,15 +98,21 @@ public Response getStorageDistribution() {
try {
List<DatanodeStorageReport> nodeStorageReports =
collectDatanodeReports();
GlobalStorageReport globalStorageReport = calculateGlobalStorageReport();
+ OpenKeyBytesInfo totalOpenKeySize;
+ try {
+ totalOpenKeySize = calculateOpenKeySizes();
+ } catch (Exception e) {
+ LOG.error("Error calculating open key sizes", e);
+ totalOpenKeySize = new OpenKeyBytesInfo(0L, 0L);
+ }
Map<String, Long> namespaceMetrics = new HashMap<>();
try {
- namespaceMetrics = calculateNamespaceMetrics();
+ namespaceMetrics = calculateNamespaceMetrics(totalOpenKeySize);
} catch (Exception e) {
LOG.error("Error calculating namespace metrics", e);
// Initialize with default values
namespaceMetrics.put("totalUsedNamespace", 0L);
- namespaceMetrics.put("totalOpenKeySize", 0L);
namespaceMetrics.put("totalCommittedSize", 0L);
namespaceMetrics.put("pendingDirectorySize", 0L);
namespaceMetrics.put("pendingKeySize", 0L);
@@ -113,7 +120,7 @@ public Response getStorageDistribution() {
}
StorageCapacityDistributionResponse response =
buildStorageDistributionResponse(
- nodeStorageReports, globalStorageReport, namespaceMetrics);
+ nodeStorageReports, globalStorageReport, namespaceMetrics,
totalOpenKeySize);
return Response.ok(response).build();
} catch (Exception e) {
LOG.error("Error getting storage distribution", e);
@@ -233,14 +240,14 @@ private GlobalStorageReport
calculateGlobalStorageReport() {
}
}
- private Map<String, Long> calculateNamespaceMetrics() throws IOException {
+ private Map<String, Long> calculateNamespaceMetrics(OpenKeyBytesInfo
totalOpenKeySize) throws IOException {
Map<String, Long> metrics = new HashMap<>();
Map<String, Long> totalPendingAtOmSide =
reconGlobalMetricsService.calculatePendingSizes();
- long totalOpenKeySize = calculateOpenKeySizes();
long totalCommittedSize = calculateCommittedSize();
long pendingDirectorySize =
totalPendingAtOmSide.getOrDefault("pendingDirectorySize", 0L);
long pendingKeySize = totalPendingAtOmSide.getOrDefault("pendingKeySize",
0L);
- long totalUsedNamespace = pendingDirectorySize + pendingKeySize +
totalOpenKeySize + totalCommittedSize;
+ long totalUsedNamespace = pendingDirectorySize + pendingKeySize +
+ totalOpenKeySize.getTotalOpenKeyBytes() + totalCommittedSize;
long totalKeys = 0L;
// Keys from OBJECT_STORE buckets.
@@ -255,8 +262,6 @@ private Map<String, Long> calculateNamespaceMetrics()
throws IOException {
if (fileRecord != null) {
totalKeys += fileRecord.getValue();
}
-
- metrics.put("totalOpenKeySize", totalOpenKeySize);
metrics.put("totalCommittedSize", totalCommittedSize);
metrics.put("totalUsedNamespace", totalUsedNamespace);
metrics.put("totalKeys", totalKeys);
@@ -266,11 +271,11 @@ private Map<String, Long> calculateNamespaceMetrics()
throws IOException {
private StorageCapacityDistributionResponse buildStorageDistributionResponse(
List<DatanodeStorageReport> nodeStorageReports,
GlobalStorageReport storageMetrics,
- Map<String, Long> namespaceMetrics) {
+ Map<String, Long> namespaceMetrics,
+ OpenKeyBytesInfo totalOpenKeySize) {
// Safely get values from namespaceMetrics with null checks
Long totalUsedNamespace = namespaceMetrics.get("totalUsedNamespace");
- Long totalOpenKeySize = namespaceMetrics.get("totalOpenKeySize");
Long totalCommittedSize = namespaceMetrics.get("totalCommittedSize");
Long totalKeys = namespaceMetrics.get("totalKeys");
Long totalContainerPreAllocated = nodeStorageReports.stream()
@@ -284,8 +289,7 @@ private StorageCapacityDistributionResponse
buildStorageDistributionResponse(
totalUsedNamespace != null ? totalUsedNamespace : 0L,
totalKeys != null ? totalKeys : 0L))
.setUsedSpaceBreakDown(new UsedSpaceBreakDown(
- totalOpenKeySize != null ? totalOpenKeySize : 0L,
- totalCommittedSize != null ? totalCommittedSize : 0L,
totalContainerPreAllocated))
+ totalOpenKeySize, totalCommittedSize != null ?
totalCommittedSize : 0L, totalContainerPreAllocated))
.build();
}
@@ -296,12 +300,12 @@ public List<DatanodeStorageReport>
collectDatanodeReports() {
.collect(Collectors.toList());
}
- private long calculateOpenKeySizes() {
+ private OpenKeyBytesInfo calculateOpenKeySizes() {
Map<String, Long> openKeySummary =
reconGlobalMetricsService.getOpenKeySummary();
Map<String, Long> openKeyMPUSummary =
reconGlobalMetricsService.getMPUKeySummary();
long openKeyDataSize =
openKeySummary.getOrDefault("totalReplicatedDataSize", 0L);
long totalMPUKeySize =
openKeyMPUSummary.getOrDefault("totalReplicatedDataSize", 0L);
- return openKeyDataSize + totalMPUKeySize;
+ return new OpenKeyBytesInfo(openKeyDataSize, totalMPUKeySize);
}
private long calculateCommittedSize() {
diff --git
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/OpenKeyBytesInfo.java
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/OpenKeyBytesInfo.java
new file mode 100644
index 00000000000..bea90da4fea
--- /dev/null
+++
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/OpenKeyBytesInfo.java
@@ -0,0 +1,56 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.hadoop.ozone.recon.api.types;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+
+/**
+ * Represents information about the open keys in a storage system.
+ * This class provides details regarding different types of open key bytes
+ * and calculates the total size of open key bytes.
+ */
+public class OpenKeyBytesInfo {
+
+ @JsonProperty("openKeyAndFileBytes")
+ private long openKeyAndFileBytes;
+
+ @JsonProperty("multipartOpenKeyBytes")
+ private long multipartOpenKeyBytes;
+
+ @JsonProperty("totalOpenKeyBytes")
+ private long totalOpenKeyBytes;
+
+ public OpenKeyBytesInfo() { }
+
+ public OpenKeyBytesInfo(long openKeyAndFileBytes, long
multipartOpenKeyBytes) {
+ this.openKeyAndFileBytes = openKeyAndFileBytes;
+ this.multipartOpenKeyBytes = multipartOpenKeyBytes;
+ }
+
+ public long getTotalOpenKeyBytes() {
+ return openKeyAndFileBytes + multipartOpenKeyBytes;
+ }
+
+ public long getOpenKeyAndFileBytes() {
+ return openKeyAndFileBytes;
+ }
+
+ public long getMultipartOpenKeyBytes() {
+ return multipartOpenKeyBytes;
+ }
+}
diff --git
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/UsedSpaceBreakDown.java
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/UsedSpaceBreakDown.java
index 8d82d89058a..c7c6d2aa7f8 100644
---
a/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/UsedSpaceBreakDown.java
+++
b/hadoop-ozone/recon/src/main/java/org/apache/hadoop/ozone/recon/api/types/UsedSpaceBreakDown.java
@@ -45,7 +45,7 @@
public class UsedSpaceBreakDown {
@JsonProperty("openKeyBytes")
- private long openKeyBytes;
+ private OpenKeyBytesInfo openKeyBytes;
@JsonProperty("committedKeyBytes")
private long committedKeyBytes;
@@ -56,13 +56,13 @@ public class UsedSpaceBreakDown {
public UsedSpaceBreakDown() {
}
- public UsedSpaceBreakDown(long openKeyBytes, long committedKeyBytes, long
preAllocatedContainerBytes) {
+ public UsedSpaceBreakDown(OpenKeyBytesInfo openKeyBytes, long
committedKeyBytes, long preAllocatedContainerBytes) {
this.openKeyBytes = openKeyBytes;
this.committedKeyBytes = committedKeyBytes;
this.preAllocatedContainerBytes = preAllocatedContainerBytes;
}
- public long getOpenKeyBytes() {
+ public OpenKeyBytesInfo getOpenKeyBytes() {
return openKeyBytes;
}
diff --git
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/api/db.json
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/api/db.json
index 37663e3704e..7b1bf48bf32 100644
---
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/api/db.json
+++
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/api/db.json
@@ -6878,7 +6878,11 @@
"totalKeys": 1576
},
"usedSpaceBreakdown": {
- "openKeyBytes": 19255266,
+ "openKeyBytes": {
+ "totalOpenKeyBytes": 19255266,
+ "openKeyAndFileBytes": 19255266,
+ "multipartOpenKeyBytes": 0
+ },
"committedKeyBytes": 1249923,
"preAllocatedContainerBytes": 1022024
},
diff --git
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/__tests__/mocks/capacityMocks/capacityResponseMocks.ts
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/__tests__/mocks/capacityMocks/capacityResponseMocks.ts
index 970521e962d..2459fdbd69e 100644
---
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/__tests__/mocks/capacityMocks/capacityResponseMocks.ts
+++
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/__tests__/mocks/capacityMocks/capacityResponseMocks.ts
@@ -27,7 +27,11 @@ export const StorageDistribution = {
totalKeys: 12
},
usedSpaceBreakdown: {
- openKeyBytes: 1024,
+ openKeyBytes: {
+ totalOpenKeyBytes: 1024,
+ openKeyAndFileBytes: 512,
+ multipartOpenKeyBytes: 512
+ },
committedKeyBytes: 2048,
preAllocatedContainerBytes: 1024
},
diff --git
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/v2/constants/capacity.constants.tsx
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/v2/constants/capacity.constants.tsx
index 1699d7ffeb4..3f51c0879c5 100644
---
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/v2/constants/capacity.constants.tsx
+++
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/v2/constants/capacity.constants.tsx
@@ -29,7 +29,11 @@ export const DEFAULT_CAPACITY_UTILIZATION:
UtilizationResponse = {
totalKeys: 0
},
usedSpaceBreakdown: {
- openKeyBytes: 0,
+ openKeyBytes: {
+ totalOpenKeyBytes : 0,
+ openKeyAndFileBytes: 0,
+ multipartOpenKeyBytes: 0
+ },
committedKeyBytes: 0,
preAllocatedContainerBytes: 0
},
diff --git
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/v2/pages/capacity/capacity.less
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/v2/pages/capacity/capacity.less
index 0ab18485dec..abe26f953f0 100644
---
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/v2/pages/capacity/capacity.less
+++
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/v2/pages/capacity/capacity.less
@@ -68,6 +68,17 @@
}
}
+.openkeys-space-breakdown {
+ display: grid;
+ grid-template-columns: 150px auto;
+ grid-column-gap: 20px;
+ grid-row-gap: 4px;
+
+ .ant-tag {
+ text-align: center;
+ }
+}
+
.dn-select-option-uuid {
font-size: 14px;
color: #5a656d;
diff --git
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/v2/pages/capacity/capacity.tsx
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/v2/pages/capacity/capacity.tsx
index 8a132de138c..d9b5f093eac 100644
---
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/v2/pages/capacity/capacity.tsx
+++
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/v2/pages/capacity/capacity.tsx
@@ -229,7 +229,7 @@ const Capacity: React.FC<object> = () => {
</>
}>
<CheckCircleFilled style={{ color: '#1ea57a', marginRight: 8, fontSize:
14 }} />
- Datanodes
+ Datanodes
</Popover>
);
@@ -259,6 +259,26 @@ const Capacity: React.FC<object> = () => {
</span>
);
+ const openKeyUsageBreakdown = (
+ <span>
+ OPEN KEYS
+ <Popover
+ title="Open Key Breakdown"
+ placement='topLeft'
+ content={
+ <div className='openkeys-space-breakdown'>
+ Open Key/File Bytes
+ <Tag
color='blue'>{filesize(storageDistribution.data.usedSpaceBreakdown.openKeyBytes?.openKeyAndFileBytes
?? 0, {round: 1})}</Tag>
+ Multipart Key Bytes
+ <Tag
color='orange'>{filesize(storageDistribution.data.usedSpaceBreakdown.openKeyBytes?.multipartOpenKeyBytes
?? 0, {round: 1})}</Tag>
+ </div>
+ }
+ >
+ <InfoCircleOutlined style={{ color: '#2f84d8', fontSize: 12,
marginLeft: 4 }} />
+ </Popover>
+ </span>
+ );
+
return (
<>
<div className='page-header-v2'>
@@ -322,8 +342,8 @@ const Capacity: React.FC<object> = () => {
title: 'TOTAL',
value: storageDistribution.data.globalStorage.totalUsedSpace
}, {
- title: 'OPEN KEYS',
- value: storageDistribution.data.usedSpaceBreakdown.openKeyBytes,
+ title: openKeyUsageBreakdown,
+ value:
storageDistribution.data.usedSpaceBreakdown.openKeyBytes?.totalOpenKeyBytes ??
0,
color: '#f47c2d'
}, {
title: 'COMMITTED KEYS',
diff --git
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/v2/types/capacity.types.ts
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/v2/types/capacity.types.ts
index 5257c17b819..b399b36e8b8 100644
---
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/v2/types/capacity.types.ts
+++
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/v2/types/capacity.types.ts
@@ -28,11 +28,17 @@ type GlobalNamespace = {
};
type UsedSpaceBreakdown = {
- openKeyBytes: number;
+ openKeyBytes: OpenKeyBytesInfo;
committedKeyBytes: number;
preAllocatedContainerBytes: number;
};
+type OpenKeyBytesInfo = {
+ totalOpenKeyBytes: number;
+ openKeyAndFileBytes: number;
+ multipartOpenKeyBytes: number;
+};
+
type DNPendingDeleteStat = {
hostName: string;
datanodeUuid: string;
diff --git
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/views/datanodes/datanodes.less
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/views/datanodes/datanodes.less
index fe5d35e2350..b61435f8261 100644
---
a/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/views/datanodes/datanodes.less
+++
b/hadoop-ozone/recon/src/main/resources/webapps/recon/ozone-recon-web/src/views/datanodes/datanodes.less
@@ -39,6 +39,6 @@
}
}
-.ant-popover-inner{
+.datanodes-container .ant-popover-inner {
margin-left: 500px;
}
diff --git
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestStorageDistributionEndpoint.java
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestStorageDistributionEndpoint.java
index 6062ee8a1a5..d6a1ab80581 100644
---
a/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestStorageDistributionEndpoint.java
+++
b/hadoop-ozone/recon/src/test/java/org/apache/hadoop/ozone/recon/api/TestStorageDistributionEndpoint.java
@@ -131,8 +131,12 @@ public void testStorageDistributionApiReturnsSuccess()
throws Exception {
assertEquals(OZONE_CAPACITY * 3,
distributionResponse.getGlobalStorage().getTotalCapacity());
assertEquals(totalNameSpace,
distributionResponse.getGlobalNamespace().getTotalUsedSpace());
assertEquals(EXPECTED_GLOBAL_TOTAL_KEYS,
distributionResponse.getGlobalNamespace().getTotalKeys());
+ assertEquals(OPEN_KEY_BYTES,
+
distributionResponse.getUsedSpaceBreakDown().getOpenKeyBytes().getOpenKeyAndFileBytes());
+ assertEquals(OPEN_MPU_KEY_BYTES,
+
distributionResponse.getUsedSpaceBreakDown().getOpenKeyBytes().getMultipartOpenKeyBytes());
assertEquals(OPEN_KEY_BYTES + OPEN_MPU_KEY_BYTES,
- distributionResponse.getUsedSpaceBreakDown().getOpenKeyBytes());
+
distributionResponse.getUsedSpaceBreakDown().getOpenKeyBytes().getTotalOpenKeyBytes());
assertEquals(EXPECTED_COMMITTED_KEY_BYTES,
distributionResponse.getUsedSpaceBreakDown().getCommittedKeyBytes());
assertEquals(COMMITTED * 3,
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]