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

adoroszlai 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 953e718872 HDDS-12565. Treat volumeFreeSpaceToSpare as reserved space 
(#8086)
953e718872 is described below

commit 953e7188727c4fd95e81c5b1b2291c679f5a213e
Author: Peter Lee <[email protected]>
AuthorDate: Wed Mar 19 15:50:09 2025 +0800

    HDDS-12565. Treat volumeFreeSpaceToSpare as reserved space (#8086)
---
 .../hadoop/ozone/container/common/impl/HddsDispatcher.java     | 10 +++-------
 .../hadoop/ozone/container/common/volume/VolumeUsage.java      |  3 +--
 .../hadoop/ozone/container/common/impl/TestHddsDispatcher.java |  5 +++--
 3 files changed, 7 insertions(+), 11 deletions(-)

diff --git 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/impl/HddsDispatcher.java
 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/impl/HddsDispatcher.java
index a11eb204aa..dc8fcde3fb 100644
--- 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/impl/HddsDispatcher.java
+++ 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/impl/HddsDispatcher.java
@@ -619,13 +619,9 @@ private boolean isVolumeFull(Container container) {
     if (isOpen) {
       HddsVolume volume = container.getContainerData().getVolume();
       SpaceUsageSource usage = volume.getCurrentUsage();
-      long volumeCapacity = usage.getCapacity();
-      long volumeFreeSpaceToSpare =
-          freeSpaceCalculator.get(volumeCapacity);
-      long volumeFree = usage.getAvailable();
-      long volumeCommitted = volume.getCommittedBytes();
-      long volumeAvailable = volumeFree - volumeCommitted;
-      return (volumeAvailable <= volumeFreeSpaceToSpare);
+      long volumeFreeSpaceToSpare = 
freeSpaceCalculator.get(usage.getCapacity());
+      return !VolumeUsage.hasVolumeEnoughSpace(usage.getAvailable(), 
volume.getCommittedBytes(), 0,
+          volumeFreeSpaceToSpare);
     }
     return false;
   }
diff --git 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/VolumeUsage.java
 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/VolumeUsage.java
index b65d40ee75..531886c744 100644
--- 
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/VolumeUsage.java
+++ 
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/VolumeUsage.java
@@ -184,8 +184,7 @@ public static boolean hasVolumeEnoughSpace(long 
volumeAvailableSpace,
                                              long volumeCommittedBytesCount,
                                              long requiredSpace,
                                              long volumeFreeSpaceToSpare) {
-    return (volumeAvailableSpace - volumeCommittedBytesCount) >
-        Math.max(requiredSpace, volumeFreeSpaceToSpare);
+    return (volumeAvailableSpace - volumeCommittedBytesCount - 
volumeFreeSpaceToSpare) > requiredSpace;
   }
 
   private static long getReserved(ConfigurationSource conf, String rootDir,
diff --git 
a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/impl/TestHddsDispatcher.java
 
b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/impl/TestHddsDispatcher.java
index 257c104ce7..5aca3bf1a3 100644
--- 
a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/impl/TestHddsDispatcher.java
+++ 
b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/impl/TestHddsDispatcher.java
@@ -252,9 +252,9 @@ public void testContainerCloseActionWhenVolumeFull(
     HddsVolume.Builder volumeBuilder =
         new HddsVolume.Builder(testDirPath).datanodeUuid(dd.getUuidString())
             .conf(conf).usageCheckFactory(MockSpaceUsageCheckFactory.NONE);
-    // state of cluster : available (140) > 100  ,datanode volume
+    // state of cluster : available (160) > 100  ,datanode volume
     // utilisation threshold not yet reached. container creates are successful.
-    AtomicLong usedSpace = new AtomicLong(360);
+    AtomicLong usedSpace = new AtomicLong(340);
     SpaceUsageSource spaceUsage = MockSpaceUsageSource.of(500, usedSpace);
 
     SpaceUsageCheckFactory factory = MockSpaceUsageCheckFactory.of(
@@ -268,6 +268,7 @@ public void testContainerCloseActionWhenVolumeFull(
       ContainerSet containerSet = newContainerSet();
       StateContext context = ContainerTestUtils.getMockContext(dd, conf);
       // create a 50 byte container
+      // available (160) > 100 (min free space) + 50 (container size)
       KeyValueContainerData containerData = new KeyValueContainerData(1L,
           layoutVersion,
           50, UUID.randomUUID().toString(),


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

Reply via email to