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 cc023e7f92 HDDS-10614. Avoid decreasing cached space usage below zero 
(#6508)
cc023e7f92 is described below

commit cc023e7f9262554d5d103c7271bbc18d9df93492
Author: Arafat2198 <[email protected]>
AuthorDate: Fri Apr 19 00:52:42 2024 +0530

    HDDS-10614. Avoid decreasing cached space usage below zero (#6508)
---
 .../org/apache/hadoop/hdds/fs/CachingSpaceUsageSource.java | 14 +++++++++++++-
 .../apache/hadoop/hdds/fs/TestCachingSpaceUsageSource.java | 14 ++++++++++++++
 2 files changed, 27 insertions(+), 1 deletion(-)

diff --git 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/fs/CachingSpaceUsageSource.java
 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/fs/CachingSpaceUsageSource.java
index 6f776072d9..b9a2f87a03 100644
--- 
a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/fs/CachingSpaceUsageSource.java
+++ 
b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/fs/CachingSpaceUsageSource.java
@@ -94,7 +94,19 @@ public class CachingSpaceUsageSource implements 
SpaceUsageSource {
   }
 
   public void decrementUsedSpace(long reclaimedSpace) {
-    cachedValue.addAndGet(-1 * reclaimedSpace);
+    cachedValue.updateAndGet(current -> {
+      long newValue = current - reclaimedSpace;
+      if (newValue < 0) {
+        if (current > 0) {
+          LOG.warn("Attempted to decrement used space to a negative value. " +
+                  "Current: {}, Decrement: {}, Source: {}",
+              current, reclaimedSpace, source);
+        }
+        return 0;
+      } else {
+        return newValue;
+      }
+    });
   }
 
   public void start() {
diff --git 
a/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/fs/TestCachingSpaceUsageSource.java
 
b/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/fs/TestCachingSpaceUsageSource.java
index 674c1233de..8523861000 100644
--- 
a/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/fs/TestCachingSpaceUsageSource.java
+++ 
b/hadoop-hdds/common/src/test/java/org/apache/hadoop/hdds/fs/TestCachingSpaceUsageSource.java
@@ -142,6 +142,20 @@ public class TestCachingSpaceUsageSource {
     verify(executor).shutdown();
   }
 
+  @Test
+  public void testDecrementDoesNotGoNegative() {
+    SpaceUsageCheckParams params = paramsBuilder(new AtomicLong(50))
+        .withRefresh(Duration.ZERO)
+        .build();
+    CachingSpaceUsageSource subject = new CachingSpaceUsageSource(params);
+
+    // Try to decrement more than the current value
+    subject.decrementUsedSpace(100);
+
+    // Check that the value has been set to 0
+    assertEquals(0, subject.getUsedSpace());
+  }
+
   private static long missingInitialValue() {
     return 0L;
   }


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

Reply via email to