From 62716efd9d93f9e5a9391476493a4ea9a4cfc7ac Mon Sep 17 00:00:00 2001 From: Gargi Jaiswal Date: Sun, 2 Mar 2025 23:45:35 +0530 Subject: [PATCH 1/4] HDDS-12432. [DiskBalancer] Respect property hdds.datanode.disk.balancer.max.disk.throughputInMBPerSec --- .../container/diskbalancer/DiskBalancerService.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 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 968aa45494ef..e25d7011e927 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 @@ -363,17 +363,21 @@ public BackgroundTaskQueue getTasks() { private boolean shouldDelay() { // We should wait for next AvailableTime. if (Time.monotonicNow() <= nextAvailableTime.get()) { + LOG.info("Skipping balancing as nextAvailableTime ({}) is in the future", nextAvailableTime.get()); return true; } // Calculate the next AvailableTime based on bandwidth + LOG.info("Bytes balanced to find the next avaliable time {} MB", balancedBytesInLastWindow.get() / (1024 * 1024)); long bytesBalanced = balancedBytesInLastWindow.getAndSet(0L); - + LOG.info("balanced bytes in last window after resetting it {} MB", balancedBytesInLastWindow.get() / (1024 * 1024)); final int megaByte = 1024 * 1024; // converting disk bandwidth in byte/millisec float bytesPerMillisec = bandwidthInMB * megaByte / 1000f; - nextAvailableTime.set(Time.monotonicNow() + - ((long) (bytesBalanced / bytesPerMillisec))); + long delayMillis = (long) (bytesBalanced / bytesPerMillisec); + LOG.info("Bytes balanced: {} MB, Calculated delay: {} ms ({} sec)", + bytesBalanced / megaByte, delayMillis, delayMillis / 1000); + nextAvailableTime.set(Time.monotonicNow() + delayMillis); return false; } @@ -446,6 +450,8 @@ public BackgroundTaskResult call() { } oldContainer.getContainerData().getVolume() .decrementUsedSpace(containerSize); + balancedBytesInLastWindow.addAndGet(containerSize); + LOG.info("sum of balanced bytes in the last window {} MB", balancedBytesInLastWindow.get() / (1024 * 1024)); metrics.incrSuccessCount(1); metrics.incrSuccessBytes(containerSize); } catch (IOException e) { From 5b2219777b49f3f7ac3529bffb6ee7ebeeee5c2e Mon Sep 17 00:00:00 2001 From: Gargi Jaiswal Date: Tue, 4 Mar 2025 12:53:45 +0530 Subject: [PATCH 2/4] HDDS-12432. [DiskBalancer] Respect property hdds.datanode.disk.balancer.max.disk.throughputInMBPerSec --- .../container/diskbalancer/DiskBalancerService.java | 13 +++++-------- 1 file changed, 5 insertions(+), 8 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 e25d7011e927..ba209ff62d8e 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 @@ -363,21 +363,19 @@ public BackgroundTaskQueue getTasks() { private boolean shouldDelay() { // We should wait for next AvailableTime. if (Time.monotonicNow() <= nextAvailableTime.get()) { - LOG.info("Skipping balancing as nextAvailableTime ({}) is in the future", nextAvailableTime.get()); + LOG.info("Skipping balancing until nextAvailableTime ({})", nextAvailableTime.get()); return true; } // Calculate the next AvailableTime based on bandwidth - LOG.info("Bytes balanced to find the next avaliable time {} MB", balancedBytesInLastWindow.get() / (1024 * 1024)); long bytesBalanced = balancedBytesInLastWindow.getAndSet(0L); - LOG.info("balanced bytes in last window after resetting it {} MB", balancedBytesInLastWindow.get() / (1024 * 1024)); final int megaByte = 1024 * 1024; // converting disk bandwidth in byte/millisec float bytesPerMillisec = bandwidthInMB * megaByte / 1000f; - long delayMillis = (long) (bytesBalanced / bytesPerMillisec); - LOG.info("Bytes balanced: {} MB, Calculated delay: {} ms ({} sec)", - bytesBalanced / megaByte, delayMillis, delayMillis / 1000); - nextAvailableTime.set(Time.monotonicNow() + delayMillis); + long delayInMillisec = (long) (bytesBalanced / bytesPerMillisec); + nextAvailableTime.set(Time.monotonicNow() + delayInMillisec); + LOG.debug("Bytes balanced: {} MB, Calculated delay: {} ms ({} sec)", + bytesBalanced / megaByte, delayInMillisec, delayInMillisec / 1000); return false; } @@ -451,7 +449,6 @@ public BackgroundTaskResult call() { oldContainer.getContainerData().getVolume() .decrementUsedSpace(containerSize); balancedBytesInLastWindow.addAndGet(containerSize); - LOG.info("sum of balanced bytes in the last window {} MB", balancedBytesInLastWindow.get() / (1024 * 1024)); metrics.incrSuccessCount(1); metrics.incrSuccessBytes(containerSize); } catch (IOException e) { From ce44651018dbff5db3c79474802e3cd2fbe81551 Mon Sep 17 00:00:00 2001 From: Gargi Jaiswal Date: Mon, 10 Mar 2025 14:09:36 +0530 Subject: [PATCH 3/4] HDDS-12432. [DiskBalancer] Respect property hdds.datanode.disk.balancer.max.disk.throughputInMBPerSec --- .../container/diskbalancer/DiskBalancerService.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 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 ba209ff62d8e..3461f1618b21 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 @@ -363,7 +363,10 @@ public BackgroundTaskQueue getTasks() { private boolean shouldDelay() { // We should wait for next AvailableTime. if (Time.monotonicNow() <= nextAvailableTime.get()) { - LOG.info("Skipping balancing until nextAvailableTime ({})", nextAvailableTime.get()); + if (LOG.isDebugEnabled()) { + LOG.debug("Skipping balancing until nextAvailableTime ({})", + (nextAvailableTime.get() - Time.monotonicNow())); + } return true; } // Calculate the next AvailableTime based on bandwidth @@ -374,8 +377,10 @@ private boolean shouldDelay() { float bytesPerMillisec = bandwidthInMB * megaByte / 1000f; long delayInMillisec = (long) (bytesBalanced / bytesPerMillisec); nextAvailableTime.set(Time.monotonicNow() + delayInMillisec); - LOG.debug("Bytes balanced: {} MB, Calculated delay: {} ms ({} sec)", - bytesBalanced / megaByte, delayInMillisec, delayInMillisec / 1000); + if (LOG.isDebugEnabled()) { + LOG.debug("Bytes balanced: {} MB, Calculated delay: {} ms ({} sec)", + bytesBalanced / megaByte, delayInMillisec, delayInMillisec / 1000); + } return false; } From e053793cbeeceb281f5b1b9198a502ea8ca3f796 Mon Sep 17 00:00:00 2001 From: Gargi Jaiswal <134698352+Gargi-jais11@users.noreply.github.com> Date: Mon, 10 Mar 2025 15:44:19 +0530 Subject: [PATCH 4/4] Update DiskBalancerService.java --- .../ozone/container/diskbalancer/DiskBalancerService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 3461f1618b21..1216f3f2ec22 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 @@ -364,7 +364,7 @@ private boolean shouldDelay() { // We should wait for next AvailableTime. if (Time.monotonicNow() <= nextAvailableTime.get()) { if (LOG.isDebugEnabled()) { - LOG.debug("Skipping balancing until nextAvailableTime ({})", + LOG.debug("Skipping balancing until nextAvailableTime ({} ms)", (nextAvailableTime.get() - Time.monotonicNow())); } return true;