diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/DiskBalancerVolumeCalculation.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/DiskBalancerVolumeCalculation.java index 6e6d662f14d..071e43c5187 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/DiskBalancerVolumeCalculation.java +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/diskbalancer/DiskBalancerVolumeCalculation.java @@ -22,7 +22,6 @@ import java.util.List; import java.util.Map; -import java.util.Objects; import java.util.stream.Collectors; import org.apache.hadoop.hdds.fs.SpaceUsageSource; import org.apache.hadoop.ozone.container.common.volume.HddsVolume; @@ -167,13 +166,15 @@ public static final class VolumeFixedUsage { private final HddsVolume volume; private final SpaceUsageSource.Fixed usage; private final long effectiveUsed; - private final Double utilization; + private final double utilization; private VolumeFixedUsage(HddsVolume volume, long delta) { this.volume = volume; this.usage = volume.getCurrentUsage(); this.effectiveUsed = computeEffectiveUsage(usage, volume.getCommittedBytes(), delta); - this.utilization = usage.getCapacity() > 0 ? computeUtilization(usage, volume.getCommittedBytes(), delta) : null; + this.utilization = usage.getCapacity() > 0 + ? computeUtilization(usage, volume.getCommittedBytes(), delta) + : 0.0; } public HddsVolume getVolume() { @@ -189,7 +190,7 @@ public long getEffectiveUsed() { } public double getUtilization() { - return Objects.requireNonNull(utilization, "utilization == null"); + return utilization; } public long computeUsableSpace() { diff --git a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/diskbalancer/TestDiskBalancerVolumeCalculation.java b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/diskbalancer/TestDiskBalancerVolumeCalculation.java index a32da8a3de9..4289af7afb7 100644 --- a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/diskbalancer/TestDiskBalancerVolumeCalculation.java +++ b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/diskbalancer/TestDiskBalancerVolumeCalculation.java @@ -83,6 +83,26 @@ void calculateVolumeDataDensityIgnoresZeroCapacityVolumes() Arrays.asList(zeroCapacity, lowUsage, highUsage)), 0.0); } + @Test + void getUtilizationReturnsZeroForZeroCapacityVolume() + throws IOException { + HddsVolume volume = createVolume("zero-capacity-utilization", 0, 0); + + assertEquals(0.0, DiskBalancerVolumeCalculation.newVolumeFixedUsage( + volume, null).getUtilization()); + } + + @Test + void buildVolumeReportProtoReportsZeroUtilizationForZeroCapacityVolume() + throws IOException { + HddsVolume volume = createVolume("zero-capacity-report", 0, 0); + + assertEquals(0.0, DiskBalancerService.buildVolumeReportProto( + Collections.singletonList( + DiskBalancerVolumeCalculation.newVolumeFixedUsage(volume, null))) + .get(0).getUtilization()); + } + @Test void getIdealUsageRejectsNegativeCapacity() throws IOException { HddsVolume negativeCapacityVolume = createVolume(