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]