This is an automated email from the ASF dual-hosted git repository.

sarvekshayr 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 d1905e147a0 HDDS-15446. Expose Hard Min Free Space Threshold via JMX 
(#10575)
d1905e147a0 is described below

commit d1905e147a067c11fcc84097d62c793d280af442
Author: Anurag Parvatikar <[email protected]>
AuthorDate: Wed Jun 24 17:32:52 2026 +0530

    HDDS-15446. Expose Hard Min Free Space Threshold via JMX (#10575)
---
 .../hadoop/ozone/container/common/volume/VolumeInfoMetrics.java     | 6 ++++++
 .../src/main/resources/webapps/hddsDatanode/dn-overview.html        | 2 ++
 .../container-service/src/main/resources/webapps/hddsDatanode/dn.js | 1 +
 .../hadoop/ozone/container/common/volume/TestVolumeInfoMetrics.java | 2 ++
 4 files changed, 11 insertions(+)

diff --git 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/VolumeInfoMetrics.java
 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/VolumeInfoMetrics.java
index c6e17d5cfd5..27996eb44b7 100644
--- 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/VolumeInfoMetrics.java
+++ 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/VolumeInfoMetrics.java
@@ -61,6 +61,11 @@ public class VolumeInfoMetrics implements MetricsSource {
       Interns.info("MinFreeSpace",
           "Minimum free space threshold (soft limit) reported to SCM, " +
           "derived from hdds.datanode.volume.min.free.space.percent / 
hdds.datanode.volume.min.free.space");
+  private static final MetricsInfo HARD_MIN_FREE_SPACE =
+      Interns.info("HardMinFreeSpace",
+          "Minimum free space threshold (hard limit) enforced locally for 
writes, " +
+          "derived from hdds.datanode.volume.min.free.space.hard.limit.percent 
" +
+          "/ hdds.datanode.volume.min.free.space");
   private static final MetricsInfo NON_OZONE_USED =
       Interns.info("NonOzoneUsed",
           "Space on the filesystem consumed by non-Ozone workloads " +
@@ -254,6 +259,7 @@ public void getMetrics(MetricsCollector collector, boolean 
all) {
           .addGauge(FS_AVAILABLE, fsUsage.getAvailable())
           .addGauge(FS_USED, fsUsage.getCapacity() - fsUsage.getAvailable())
           .addGauge(MIN_FREE_SPACE, 
volume.getReportedFreeSpaceToSpare(ozoneCapacity))
+          .addGauge(HARD_MIN_FREE_SPACE, 
volume.getFreeSpaceToSpare(ozoneCapacity))
           .addGauge(NON_OZONE_USED, VolumeUsage.getOtherUsed(fsUsage));
     }
   }
diff --git 
a/hadoop-hdds/container-service/src/main/resources/webapps/hddsDatanode/dn-overview.html
 
b/hadoop-hdds/container-service/src/main/resources/webapps/hddsDatanode/dn-overview.html
index 9b15a0bf374..e25ce4a9c82 100644
--- 
a/hadoop-hdds/container-service/src/main/resources/webapps/hddsDatanode/dn-overview.html
+++ 
b/hadoop-hdds/container-service/src/main/resources/webapps/hddsDatanode/dn-overview.html
@@ -61,6 +61,7 @@ <h2>Volume Information</h2>
         <th>Filesystem Available</th>
         <th>Filesystem Used</th>
         <th>Min Free Space</th>
+        <th>Hard Min Free Space</th>
         <th>Non-Ozone Used</th>
         <th>Containers</th>
         <th>State</th>
@@ -79,6 +80,7 @@ <h2>Volume Information</h2>
         <td>{{volumeInfo.FilesystemAvailable}}</td>
         <td>{{volumeInfo.FilesystemUsed}}</td>
         <td>{{volumeInfo.MinFreeSpace}}</td>
+        <td>{{volumeInfo.HardMinFreeSpace}}</td>
         <td>{{volumeInfo.NonOzoneUsed}}</td>
         <td>{{volumeInfo.Containers}}</td>
         <td>{{volumeInfo["tag.VolumeState"]}}</td>
diff --git 
a/hadoop-hdds/container-service/src/main/resources/webapps/hddsDatanode/dn.js 
b/hadoop-hdds/container-service/src/main/resources/webapps/hddsDatanode/dn.js
index 3e6c36662dd..1f5ae99f15e 100644
--- 
a/hadoop-hdds/container-service/src/main/resources/webapps/hddsDatanode/dn.js
+++ 
b/hadoop-hdds/container-service/src/main/resources/webapps/hddsDatanode/dn.js
@@ -38,6 +38,7 @@
                  volume.FilesystemAvailable = 
transform(volume.FilesystemAvailable);
                  volume.FilesystemUsed = transform(volume.FilesystemUsed);
                  volume.MinFreeSpace = transform(volume.MinFreeSpace);
+                 volume.HardMinFreeSpace = transform(volume.HardMinFreeSpace);
                  volume.NonOzoneUsed = transform(volume.NonOzoneUsed);
                 })
                 });
diff --git 
a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/volume/TestVolumeInfoMetrics.java
 
b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/volume/TestVolumeInfoMetrics.java
index bca6170d6b6..c428be693db 100644
--- 
a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/volume/TestVolumeInfoMetrics.java
+++ 
b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/volume/TestVolumeInfoMetrics.java
@@ -45,6 +45,7 @@ void testVolumeInfoMetricsExposeOzoneAndFilesystemGauges() {
     when(volume.getCommittedBytes()).thenReturn(10L);
     when(volume.getContainers()).thenReturn(3L);
     when(volume.getReportedFreeSpaceToSpare(anyLong())).thenReturn(20L);
+    when(volume.getFreeSpaceToSpare(anyLong())).thenReturn(15L);
 
     VolumeUsage volumeUsage = mock(VolumeUsage.class);
     when(volume.getVolumeUsage()).thenReturn(volumeUsage);
@@ -80,6 +81,7 @@ void testVolumeInfoMetricsExposeOzoneAndFilesystemGauges() {
       assertThat(findMetric(all, "FilesystemUsed")).isEqualTo(900L); // 
FilesystemCapacity - FilesystemAvailable
 
       assertThat(findMetric(all, "MinFreeSpace")).isEqualTo(20L);
+      assertThat(findMetric(all, "HardMinFreeSpace")).isEqualTo(15L);
       // NonOzoneUsed = FilesystemUsed - OzoneUsed = 900 - 500
       assertThat(findMetric(all, "NonOzoneUsed")).isEqualTo(400L);
     } finally {


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to