From 0aa98a957493ad5de22cf1b2e5469015a487fc71 Mon Sep 17 00:00:00 2001 From: Soumitra Sulav Date: Wed, 25 Feb 2026 15:51:17 +0530 Subject: [PATCH 1/7] HDDS-14718. Update Remaining Allocatable to consider Free Space To Spare --- .../hadoop/hdds/scm/cli/datanode/UsageInfoSubcommand.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/UsageInfoSubcommand.java b/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/UsageInfoSubcommand.java index e01de9597905..da6fef09d0be 100644 --- a/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/UsageInfoSubcommand.java +++ b/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/UsageInfoSubcommand.java @@ -154,9 +154,11 @@ private void printInfo(DatanodeUsage info) { info.getContainerCount()); System.out.printf("%-24s: %s (%s) %n", "Container Pre-allocated", info.getCommitted() + " B", StringUtils.byteDesc(info.getCommitted())); + long remainingAllocatable = info.getOzoneAvailable() - info.getCommitted() + - info.getFreeSpaceToSpare(); System.out.printf("%-24s: %s (%s) %n", "Remaining Allocatable", - (info.getOzoneAvailable() - info.getCommitted()) + " B", - StringUtils.byteDesc((info.getOzoneAvailable() - info.getCommitted()))); + remainingAllocatable + " B", + StringUtils.byteDesc(remainingAllocatable)); System.out.printf("%-24s: %s (%s) %n", "Free Space To Spare", info.getFreeSpaceToSpare() + " B", StringUtils.byteDesc(info.getFreeSpaceToSpare())); From 1b017c0f31c7b4940ce405081fac2a964ad2a27e Mon Sep 17 00:00:00 2001 From: Soumitra Sulav Date: Wed, 25 Feb 2026 16:23:17 +0530 Subject: [PATCH 2/7] Add test for getRemainingAllocatable --- .../scm/cli/datanode/UsageInfoSubcommand.java | 10 ++++++---- .../cli/datanode/TestUsageInfoSubcommand.java | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/UsageInfoSubcommand.java b/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/UsageInfoSubcommand.java index da6fef09d0be..33d7406ef766 100644 --- a/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/UsageInfoSubcommand.java +++ b/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/UsageInfoSubcommand.java @@ -154,11 +154,9 @@ private void printInfo(DatanodeUsage info) { info.getContainerCount()); System.out.printf("%-24s: %s (%s) %n", "Container Pre-allocated", info.getCommitted() + " B", StringUtils.byteDesc(info.getCommitted())); - long remainingAllocatable = info.getOzoneAvailable() - info.getCommitted() - - info.getFreeSpaceToSpare(); System.out.printf("%-24s: %s (%s) %n", "Remaining Allocatable", - remainingAllocatable + " B", - StringUtils.byteDesc(remainingAllocatable)); + info.getRemainingAllocatable() + " B", + StringUtils.byteDesc(info.getRemainingAllocatable())); System.out.printf("%-24s: %s (%s) %n", "Free Space To Spare", info.getFreeSpaceToSpare() + " B", StringUtils.byteDesc(info.getFreeSpaceToSpare())); @@ -334,6 +332,10 @@ public long getPipelineCount() { public long getReserved() { return reserved; } + + public long getRemainingAllocatable() { + return ozoneAvailable - committed - freeSpaceToSpare; + } } private static class NodeSelectionArguments extends NodeSelectionMixin { diff --git a/hadoop-ozone/cli-admin/src/test/java/org/apache/hadoop/hdds/scm/cli/datanode/TestUsageInfoSubcommand.java b/hadoop-ozone/cli-admin/src/test/java/org/apache/hadoop/hdds/scm/cli/datanode/TestUsageInfoSubcommand.java index b104db6ef986..f2b98887963d 100644 --- a/hadoop-ozone/cli-admin/src/test/java/org/apache/hadoop/hdds/scm/cli/datanode/TestUsageInfoSubcommand.java +++ b/hadoop-ozone/cli-admin/src/test/java/org/apache/hadoop/hdds/scm/cli/datanode/TestUsageInfoSubcommand.java @@ -81,6 +81,23 @@ public void testCorrectJsonValuesInReport() throws IOException { ObjectMapper mapper = new ObjectMapper(); JsonNode json = mapper.readTree(outContent.toString("UTF-8")); + JsonNode node = json.get(0); + originalOut.println("JSON output (compared values):"); + originalOut.println(" ozoneUsed: " + node.get("ozoneUsed")); + originalOut.println(" ozoneCapacity: " + node.get("ozoneCapacity")); + originalOut.println(" ozoneAvailable: " + node.get("ozoneAvailable")); + originalOut.println(" ozoneUsedPercent: " + node.get("ozoneUsedPercent")); + originalOut.println(" ozoneAvailablePercent: " + node.get("ozoneAvailablePercent")); + originalOut.println(" filesystemCapacity: " + node.get("filesystemCapacity")); + originalOut.println(" filesystemAvailable: " + node.get("filesystemAvailable")); + originalOut.println(" filesystemUsed: " + node.get("filesystemUsed")); + originalOut.println(" filesystemUsedPercent: " + node.get("filesystemUsedPercent")); + originalOut.println(" filesystemAvailablePercent: " + node.get("filesystemAvailablePercent")); + originalOut.println(" containerCount: " + node.get("containerCount")); + originalOut.println(" pipelineCount: " + node.get("pipelineCount")); + originalOut.println(" remainingAllocatable: " + node.get("remainingAllocatable")); + originalOut.println(" minFreeSpaceToSpare: " + node.get("freeSpaceToSpare")); + assertEquals(ARRAY, json.getNodeType()); assertNotNull(json.get(0).get("datanodeDetails")); assertEquals(10, json.get(0).get("ozoneUsed").longValue()); @@ -98,6 +115,7 @@ public void testCorrectJsonValuesInReport() throws IOException { assertEquals(5, json.get(0).get("containerCount").longValue()); assertEquals(10, json.get(0).get("pipelineCount").longValue()); + assertEquals(70, json.get(0).get("remainingAllocatable").longValue()); } @Test From f6e25096845259f5d0d22856183f751030febe1d Mon Sep 17 00:00:00 2001 From: Soumitra Sulav Date: Wed, 25 Feb 2026 16:25:01 +0530 Subject: [PATCH 3/7] Removed stdout for test output --- .../cli/datanode/TestUsageInfoSubcommand.java | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/hadoop-ozone/cli-admin/src/test/java/org/apache/hadoop/hdds/scm/cli/datanode/TestUsageInfoSubcommand.java b/hadoop-ozone/cli-admin/src/test/java/org/apache/hadoop/hdds/scm/cli/datanode/TestUsageInfoSubcommand.java index f2b98887963d..412250a02e55 100644 --- a/hadoop-ozone/cli-admin/src/test/java/org/apache/hadoop/hdds/scm/cli/datanode/TestUsageInfoSubcommand.java +++ b/hadoop-ozone/cli-admin/src/test/java/org/apache/hadoop/hdds/scm/cli/datanode/TestUsageInfoSubcommand.java @@ -81,23 +81,6 @@ public void testCorrectJsonValuesInReport() throws IOException { ObjectMapper mapper = new ObjectMapper(); JsonNode json = mapper.readTree(outContent.toString("UTF-8")); - JsonNode node = json.get(0); - originalOut.println("JSON output (compared values):"); - originalOut.println(" ozoneUsed: " + node.get("ozoneUsed")); - originalOut.println(" ozoneCapacity: " + node.get("ozoneCapacity")); - originalOut.println(" ozoneAvailable: " + node.get("ozoneAvailable")); - originalOut.println(" ozoneUsedPercent: " + node.get("ozoneUsedPercent")); - originalOut.println(" ozoneAvailablePercent: " + node.get("ozoneAvailablePercent")); - originalOut.println(" filesystemCapacity: " + node.get("filesystemCapacity")); - originalOut.println(" filesystemAvailable: " + node.get("filesystemAvailable")); - originalOut.println(" filesystemUsed: " + node.get("filesystemUsed")); - originalOut.println(" filesystemUsedPercent: " + node.get("filesystemUsedPercent")); - originalOut.println(" filesystemAvailablePercent: " + node.get("filesystemAvailablePercent")); - originalOut.println(" containerCount: " + node.get("containerCount")); - originalOut.println(" pipelineCount: " + node.get("pipelineCount")); - originalOut.println(" remainingAllocatable: " + node.get("remainingAllocatable")); - originalOut.println(" minFreeSpaceToSpare: " + node.get("freeSpaceToSpare")); - assertEquals(ARRAY, json.getNodeType()); assertNotNull(json.get(0).get("datanodeDetails")); assertEquals(10, json.get(0).get("ozoneUsed").longValue()); From 78013f8658368d4214992f47ddd2b5441a1ef10e Mon Sep 17 00:00:00 2001 From: Soumitra Sulav Date: Thu, 26 Feb 2026 22:49:35 +0530 Subject: [PATCH 4/7] Updated assertValue for remainingAllocatable --- .../hadoop/hdds/scm/cli/datanode/TestUsageInfoSubcommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hadoop-ozone/cli-admin/src/test/java/org/apache/hadoop/hdds/scm/cli/datanode/TestUsageInfoSubcommand.java b/hadoop-ozone/cli-admin/src/test/java/org/apache/hadoop/hdds/scm/cli/datanode/TestUsageInfoSubcommand.java index 412250a02e55..a7793e3fc9ae 100644 --- a/hadoop-ozone/cli-admin/src/test/java/org/apache/hadoop/hdds/scm/cli/datanode/TestUsageInfoSubcommand.java +++ b/hadoop-ozone/cli-admin/src/test/java/org/apache/hadoop/hdds/scm/cli/datanode/TestUsageInfoSubcommand.java @@ -98,7 +98,7 @@ public void testCorrectJsonValuesInReport() throws IOException { assertEquals(5, json.get(0).get("containerCount").longValue()); assertEquals(10, json.get(0).get("pipelineCount").longValue()); - assertEquals(70, json.get(0).get("remainingAllocatable").longValue()); + assertEquals(80, json.get(0).get("remainingAllocatable").longValue()); } @Test From 374e1c6dd4b6c25823c9543f9dfe76ab0b4870c2 Mon Sep 17 00:00:00 2001 From: Soumitra Sulav Date: Sun, 1 Mar 2026 03:02:51 +0530 Subject: [PATCH 5/7] Addressed review comments --- .../hadoop/hdds/scm/cli/datanode/UsageInfoSubcommand.java | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/UsageInfoSubcommand.java b/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/UsageInfoSubcommand.java index 33d7406ef766..5754de67d3a7 100644 --- a/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/UsageInfoSubcommand.java +++ b/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/UsageInfoSubcommand.java @@ -154,9 +154,8 @@ private void printInfo(DatanodeUsage info) { info.getContainerCount()); System.out.printf("%-24s: %s (%s) %n", "Container Pre-allocated", info.getCommitted() + " B", StringUtils.byteDesc(info.getCommitted())); - System.out.printf("%-24s: %s (%s) %n", "Remaining Allocatable", - info.getRemainingAllocatable() + " B", - StringUtils.byteDesc(info.getRemainingAllocatable())); + System.out.printf("%-24s: %s (Ozone Available - Committed - Free Space To Spare) %n", "Remaining Allocatable", + info.getRemainingAllocatable() + " B"); System.out.printf("%-24s: %s (%s) %n", "Free Space To Spare", info.getFreeSpaceToSpare() + " B", StringUtils.byteDesc(info.getFreeSpaceToSpare())); From 402b294568f746ba75ce1f2de4e24fa1e120a13d Mon Sep 17 00:00:00 2001 From: Soumitra Sulav Date: Mon, 2 Mar 2026 19:57:07 +0530 Subject: [PATCH 6/7] Updated description to include the same consistent name --- .../hadoop/hdds/scm/cli/datanode/UsageInfoSubcommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/UsageInfoSubcommand.java b/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/UsageInfoSubcommand.java index 5754de67d3a7..f2b0b175fcd1 100644 --- a/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/UsageInfoSubcommand.java +++ b/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/UsageInfoSubcommand.java @@ -154,7 +154,7 @@ private void printInfo(DatanodeUsage info) { info.getContainerCount()); System.out.printf("%-24s: %s (%s) %n", "Container Pre-allocated", info.getCommitted() + " B", StringUtils.byteDesc(info.getCommitted())); - System.out.printf("%-24s: %s (Ozone Available - Committed - Free Space To Spare) %n", "Remaining Allocatable", + System.out.printf("%-24s: %s (Ozone Available - Container Pre-allocated - Free Space To Spare) %n", "Remaining Allocatable", info.getRemainingAllocatable() + " B"); System.out.printf("%-24s: %s (%s) %n", "Free Space To Spare", info.getFreeSpaceToSpare() + " B", From 172d87084478b67252171bf237e826efee5ccfc1 Mon Sep 17 00:00:00 2001 From: Soumitra Sulav Date: Wed, 4 Mar 2026 02:08:15 +0530 Subject: [PATCH 7/7] Fix checkstyle issue --- .../hadoop/hdds/scm/cli/datanode/UsageInfoSubcommand.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/UsageInfoSubcommand.java b/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/UsageInfoSubcommand.java index f2b0b175fcd1..d1c653bfd17e 100644 --- a/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/UsageInfoSubcommand.java +++ b/hadoop-ozone/cli-admin/src/main/java/org/apache/hadoop/hdds/scm/cli/datanode/UsageInfoSubcommand.java @@ -154,8 +154,8 @@ private void printInfo(DatanodeUsage info) { info.getContainerCount()); System.out.printf("%-24s: %s (%s) %n", "Container Pre-allocated", info.getCommitted() + " B", StringUtils.byteDesc(info.getCommitted())); - System.out.printf("%-24s: %s (Ozone Available - Container Pre-allocated - Free Space To Spare) %n", "Remaining Allocatable", - info.getRemainingAllocatable() + " B"); + System.out.printf("%-24s: %s (Ozone Available - Container Pre-allocated - Free Space To Spare) %n", + "Remaining Allocatable", info.getRemainingAllocatable() + " B"); System.out.printf("%-24s: %s (%s) %n", "Free Space To Spare", info.getFreeSpaceToSpare() + " B", StringUtils.byteDesc(info.getFreeSpaceToSpare()));