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 @@
Volume Information
Filesystem Available |
Filesystem Used |
Min Free Space |
+ Hard Min Free Space |
Non-Ozone Used |
Containers |
State |
@@ -79,6 +80,7 @@ Volume Information
{{volumeInfo.FilesystemAvailable}} |
{{volumeInfo.FilesystemUsed}} |
{{volumeInfo.MinFreeSpace}} |
+ {{volumeInfo.HardMinFreeSpace}} |
{{volumeInfo.NonOzoneUsed}} |
{{volumeInfo.Containers}} |
{{volumeInfo["tag.VolumeState"]}} |
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 {