This is an automated email from the ASF dual-hosted git repository.
sammichen pushed a commit to branch HDDS-5713
in repository https://gitbox.apache.org/repos/asf/ozone.git
The following commit(s) were added to refs/heads/HDDS-5713 by this push:
new 73a813b5bf HDDS-12431. [DiskBalancer] Use committedBytes to reserve
the space pre-allocated for container (#8297)
73a813b5bf is described below
commit 73a813b5bfaa3625fe1da4be2de7efce9144717e
Author: Gargi Jaiswal <[email protected]>
AuthorDate: Fri Apr 25 13:58:14 2025 +0530
HDDS-12431. [DiskBalancer] Use committedBytes to reserve the space
pre-allocated for container (#8297)
---
.../container/diskbalancer/DiskBalancerService.java | 19 +++++++++++--------
.../policy/DefaultVolumeChoosingPolicy.java | 10 +++++++---
2 files changed, 18 insertions(+), 11 deletions(-)
diff --git
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/DiskBalancerService.java
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/DiskBalancerService.java
index 5bd0992e52..627623ba08 100644
---
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/DiskBalancerService.java
+++
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/DiskBalancerService.java
@@ -92,10 +92,15 @@ public class DiskBalancerService extends BackgroundService {
private Map<DiskBalancerTask, Integer> inProgressTasks;
private Set<Long> inProgressContainers;
- // Every time a container is decided to be moved from Vol A to Vol B,
- // the size will be deducted from Vol A and added to Vol B.
- // This map is used to help calculate the expected storage size after
- // the container balancing finished.
+ /**
+ * A map that tracks the total bytes which will be freed from each source
volume
+ * during container moves in the current disk balancing cycle.
+ *
+ * Unlike committedBytes, which is used for pre-allocating space on
+ * destination volumes, deltaSizes helps track how many space will be
+ * freed on the source volumes without modifying their
+ * committedBytes (which could otherwise go negative).
+ */
private Map<HddsVolume, Long> deltaSizes;
private MutableVolumeSet volumeSet;
@@ -346,8 +351,7 @@ public BackgroundTaskQueue getTasks() {
inProgressContainers.add(toBalanceContainer.getContainerID());
deltaSizes.put(sourceVolume, deltaSizes.getOrDefault(sourceVolume, 0L)
- toBalanceContainer.getBytesUsed());
- deltaSizes.put(destVolume, deltaSizes.getOrDefault(destVolume, 0L)
- + toBalanceContainer.getBytesUsed());
+ destVolume.incCommittedBytes(toBalanceContainer.getBytesUsed());
}
}
@@ -506,8 +510,7 @@ private void postCall() {
inProgressContainers.remove(containerData.getContainerID());
deltaSizes.put(sourceVolume, deltaSizes.get(sourceVolume) +
containerData.getBytesUsed());
- deltaSizes.put(destVolume, deltaSizes.get(destVolume)
- - containerData.getBytesUsed());
+ destVolume.incCommittedBytes(-containerData.getBytesUsed());
}
}
diff --git
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/policy/DefaultVolumeChoosingPolicy.java
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/policy/DefaultVolumeChoosingPolicy.java
index 393b3e15d5..a0166f9e2a 100644
---
a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/policy/DefaultVolumeChoosingPolicy.java
+++
b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/policy/DefaultVolumeChoosingPolicy.java
@@ -29,6 +29,10 @@
/**
* Choose a random volume for balancing.
+ *
+ * Source volumes use deltaMap to simulate space that will be freed
(pre-deleted).
+ * Destination volumes use committedBytes to account for space already
reserved.
+ * Both deltaMap and committedBytes are considered to calculate usage.
*/
public class DefaultVolumeChoosingPolicy implements VolumeChoosingPolicy {
@@ -46,15 +50,15 @@ public Pair<HddsVolume, HddsVolume>
chooseVolume(MutableVolumeSet volumeSet,
.filter(volume ->
Math.abs(
((double)((volume.getCurrentUsage().getCapacity() -
volume.getCurrentUsage().getAvailable())
- + deltaMap.getOrDefault(volume, 0L)))
+ + deltaMap.getOrDefault(volume, 0L) +
volume.getCommittedBytes()))
/ volume.getCurrentUsage().getCapacity() - idealUsage) >=
threshold)
.sorted((v1, v2) ->
Double.compare(
(double) ((v2.getCurrentUsage().getCapacity() -
v2.getCurrentUsage().getAvailable())
- + deltaMap.getOrDefault(v2, 0L)) /
+ + deltaMap.getOrDefault(v2, 0L) + v2.getCommittedBytes()) /
v2.getCurrentUsage().getCapacity(),
(double) ((v1.getCurrentUsage().getCapacity() -
v1.getCurrentUsage().getAvailable())
- + deltaMap.getOrDefault(v1, 0L)) /
+ + deltaMap.getOrDefault(v1, 0L) + v1.getCommittedBytes()) /
v1.getCurrentUsage().getCapacity()))
.collect(Collectors.toList());
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]