From 1edbcd6f6c42c68e2f7e2b492f4f3a820b6fb658 Mon Sep 17 00:00:00 2001 From: "Doroszlai, Attila" Date: Mon, 15 Dec 2025 09:44:30 +0100 Subject: [PATCH] HDDS-14176. Do not use Optional for volumeUsage --- .../container/common/volume/HddsVolume.java | 32 ++++++++------ .../common/volume/StorageVolume.java | 44 +++++++++++-------- .../common/volume/VolumeInfoMetrics.java | 5 ++- .../container/common/volume/VolumeUsage.java | 14 +----- .../common/impl/TestHddsDispatcher.java | 3 +- .../volume/TestReservedVolumeSpace.java | 19 ++++---- .../volume/TestStorageVolumeHealthChecks.java | 2 +- .../common/volume/TestVolumeSet.java | 2 +- .../hadoop/ozone/TestMiniOzoneCluster.java | 2 +- .../TestContainerStateMachineFailures.java | 23 +++++----- .../TestRefreshVolumeUsageHandler.java | 2 +- 11 files changed, 75 insertions(+), 73 deletions(-) diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/HddsVolume.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/HddsVolume.java index 0988064e5fe..f331db7defc 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/HddsVolume.java +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/HddsVolume.java @@ -107,7 +107,7 @@ public class HddsVolume extends StorageVolume { // and stored as a member to prevent spawning lots of File objects. private File dbParentDir; private File deletedContainerDir; - private AtomicBoolean dbLoaded = new AtomicBoolean(false); + private final AtomicBoolean dbLoaded = new AtomicBoolean(false); private final AtomicBoolean dbLoadFailure = new AtomicBoolean(false); private final int volumeTestCount; @@ -328,7 +328,7 @@ public VolumeCheckResult checkDbHealth(File dbFile) throws InterruptedException final boolean isVolumeTestResultHealthy = true; try (ManagedOptions managedOptions = new ManagedOptions(); - ManagedRocksDB readOnlyDb = ManagedRocksDB.openReadOnly(managedOptions, dbFile.toString())) { + ManagedRocksDB ignored = ManagedRocksDB.openReadOnly(managedOptions, dbFile.toString())) { volumeTestResultQueue.add(isVolumeTestResultHealthy); } catch (Exception e) { if (Thread.currentThread().isInterrupted()) { @@ -357,28 +357,35 @@ public VolumeCheckResult checkDbHealth(File dbFile) throws InterruptedException return VolumeCheckResult.HEALTHY; } - @VisibleForTesting - public void checkVolumeUsages() { + void checkVolumeUsages() { boolean isEnoughSpaceAvailable = true; SpaceUsageSource currentUsage = getCurrentUsage(); long getFreeSpaceToSpare = getFreeSpaceToSpare(currentUsage.getCapacity()); - if (currentUsage.getAvailable() < getFreeSpaceToSpare) { + final long committed = committedBytes.get(); + final long available = currentUsage.getAvailable(); + if (available < getFreeSpaceToSpare) { LOG.warn("Volume {} has insufficient space for write operation. Available: {}, Free space to spare: {}", - getStorageDir(), currentUsage.getAvailable(), getFreeSpaceToSpare); + getStorageDir(), available, getFreeSpaceToSpare); isEnoughSpaceAvailable = false; - } else if (committedBytes.get() > 0 && currentUsage.getAvailable() < committedBytes.get() + getFreeSpaceToSpare) { + } else if (committed > 0 && available < committed + getFreeSpaceToSpare) { LOG.warn("Volume {} has insufficient space for on-going container write operation. " + "Committed: {}, Available: {}, Free space to spare: {}", - getStorageDir(), committedBytes.get(), currentUsage.getAvailable(), getFreeSpaceToSpare); + getStorageDir(), committed, available, getFreeSpaceToSpare); isEnoughSpaceAvailable = false; } volumeInfoMetrics.setAvailableSpaceInsufficient(!isEnoughSpaceAvailable); - if (!getVolumeUsage().map(VolumeUsage::isReservedUsagesInRange).orElse(true)) { - LOG.warn("Volume {} reserved usages is higher than actual allocated reserved space.", - getStorageDir()); - volumeInfoMetrics.setReservedCrossesLimit(true); + final VolumeUsage usage = getVolumeUsage(); + if (usage != null && usage.getReservedInBytes() > 0) { + final SpaceUsageSource realUsage = usage.realUsage(); + long reservedUsed = VolumeUsage.getOtherUsed(realUsage); + final boolean crossesLimit = reservedUsed > usage.getReservedInBytes(); + if (crossesLimit) { + LOG.warn("Volume {} reserved usages {} is higher than actual allocated reserved space {}. (Real usage: {})", + getStorageDir(), reservedUsed, usage.getReservedInBytes(), realUsage); + } + volumeInfoMetrics.setReservedCrossesLimit(crossesLimit); } else { volumeInfoMetrics.setReservedCrossesLimit(false); } @@ -552,7 +559,6 @@ public long getContainerCount() { /** * Pick a DbVolume for HddsVolume and init db instance. * Use the HddsVolume directly if no DbVolume found. - * @param dbVolumeSet */ public void createDbStore(MutableVolumeSet dbVolumeSet) throws IOException { DbVolume chosenDbVolume = null; diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/StorageVolume.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/StorageVolume.java index e10ad3916da..45feede53a1 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/StorageVolume.java +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/StorageVolume.java @@ -28,7 +28,6 @@ import java.nio.file.Path; import java.util.LinkedList; import java.util.Objects; -import java.util.Optional; import java.util.Properties; import java.util.Queue; import java.util.UUID; @@ -99,7 +98,7 @@ public abstract class StorageVolume implements Checkable volumeUsage; + private final VolumeUsage volumeUsage; private final VolumeSet volumeSet; @@ -152,7 +151,7 @@ protected StorageVolume(Builder b) throws IOException { storageDir = new File(location.getUri().getPath(), b.storageDirStr); SpaceUsageCheckParams checkParams = getSpaceUsageCheckParams(b, this::getContainerDirsPath); checkParams.setContainerUsedSpace(this::containerUsedSpace); - volumeUsage = Optional.of(new VolumeUsage(checkParams, b.conf)); + volumeUsage = new VolumeUsage(checkParams, b.conf); this.volumeSet = b.volumeSet; this.state = VolumeState.NOT_INITIALIZED; this.clusterID = b.clusterID; @@ -167,7 +166,7 @@ protected StorageVolume(Builder b) throws IOException { this.healthCheckFileSize = dnConf.getVolumeHealthCheckFileSize(); } else { storageDir = new File(b.volumeRootStr); - volumeUsage = Optional.empty(); + volumeUsage = null; this.volumeSet = null; this.storageID = UUID.randomUUID().toString(); this.state = VolumeState.FAILED; @@ -199,7 +198,9 @@ public void format(String cid) throws IOException { } public void start() throws IOException { - volumeUsage.ifPresent(VolumeUsage::start); + if (volumeUsage != null) { + volumeUsage.start(); + } } /** @@ -468,8 +469,7 @@ public String getVolumeRootDir() { /** Get current usage of the volume. */ public SpaceUsageSource getCurrentUsage() { - return volumeUsage.map(VolumeUsage::getCurrentUsage) - .orElse(SpaceUsageSource.UNKNOWN); + return volumeUsage != null ? volumeUsage.getCurrentUsage() : SpaceUsageSource.UNKNOWN; } protected StorageLocationReport.Builder reportBuilder() { @@ -480,11 +480,11 @@ protected StorageLocationReport.Builder reportBuilder() { .setStorageType(storageType); if (!builder.isFailed()) { - SpaceUsageSource usage = getCurrentUsage(); + SpaceUsageSource usage = volumeUsage.getCurrentUsage(); builder.setCapacity(usage.getCapacity()) .setRemaining(usage.getAvailable()) - .setScmUsed(usage.getUsedSpace()); - getVolumeUsage().ifPresent(vu -> builder.setReserved(vu.getReservedInBytes())); + .setScmUsed(usage.getUsedSpace()) + .setReserved(volumeUsage.getReservedInBytes()); } return builder; @@ -512,22 +512,26 @@ public File getDiskCheckDir() { } public void refreshVolumeUsage() { - volumeUsage.ifPresent(VolumeUsage::refreshNow); + if (volumeUsage != null) { + volumeUsage.refreshNow(); + } } /** @see #getCurrentUsage() */ - public Optional getVolumeUsage() { + public VolumeUsage getVolumeUsage() { return volumeUsage; } public void incrementUsedSpace(long usedSpace) { - volumeUsage.ifPresent(usage -> usage - .incrementUsedSpace(usedSpace)); + if (volumeUsage != null) { + volumeUsage.incrementUsedSpace(usedSpace); + } } public void decrementUsedSpace(long reclaimedSpace) { - volumeUsage.ifPresent(usage -> usage - .decrementUsedSpace(reclaimedSpace)); + if (volumeUsage != null) { + volumeUsage.decrementUsedSpace(reclaimedSpace); + } } public VolumeSet getVolumeSet() { @@ -580,12 +584,16 @@ public DatanodeConfiguration getDatanodeConfig() { public void failVolume() { setState(VolumeState.FAILED); - volumeUsage.ifPresent(VolumeUsage::shutdown); + if (volumeUsage != null) { + volumeUsage.shutdown(); + } } public void shutdown() { setState(VolumeState.NON_EXISTENT); - volumeUsage.ifPresent(VolumeUsage::shutdown); + if (volumeUsage != null) { + volumeUsage.shutdown(); + } cleanTmpDiskCheckDir(); } diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/VolumeInfoMetrics.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/VolumeInfoMetrics.java index 8a6addf306a..7478e25a671 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/VolumeInfoMetrics.java +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/VolumeInfoMetrics.java @@ -183,7 +183,8 @@ public void incNumScansSkipped() { public void getMetrics(MetricsCollector collector, boolean all) { MetricsRecordBuilder builder = collector.addRecord(metricsSourceName); registry.snapshot(builder, all); - volume.getVolumeUsage().ifPresent(volumeUsage -> { + VolumeUsage volumeUsage = volume.getVolumeUsage(); + if (volumeUsage != null) { SpaceUsageSource usage = volumeUsage.getCurrentUsage(); long reserved = volumeUsage.getReservedInBytes(); builder @@ -192,6 +193,6 @@ public void getMetrics(MetricsCollector collector, boolean all) { .addGauge(USED, usage.getUsedSpace()) .addGauge(RESERVED, reserved) .addGauge(TOTAL_CAPACITY, usage.getCapacity() + reserved); - }); + } } } diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/VolumeUsage.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/VolumeUsage.java index 86b80afcdbd..f67ccfaef72 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/VolumeUsage.java +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/VolumeUsage.java @@ -21,7 +21,6 @@ import static org.apache.hadoop.hdds.scm.ScmConfigKeys.HDDS_DATANODE_DIR_DU_RESERVED_PERCENT; import static org.apache.hadoop.hdds.scm.ScmConfigKeys.HDDS_DATANODE_DIR_DU_RESERVED_PERCENT_DEFAULT; -import com.google.common.annotations.VisibleForTesting; import java.io.File; import java.io.IOException; import java.util.Collection; @@ -108,7 +107,6 @@ public class VolumeUsage { Preconditions.assertTrue(reservedInBytes >= 0, reservedInBytes + " < 0"); } - @VisibleForTesting SpaceUsageSource realUsage() { return source.snapshot(); } @@ -150,7 +148,7 @@ public void decrementUsedSpace(long reclaimedSpace) { * so there could be that DU value > totalUsed when there are deletes. * @return other used space */ - private static long getOtherUsed(SpaceUsageSource usage) { + static long getOtherUsed(SpaceUsageSource usage) { long totalUsed = usage.getCapacity() - usage.getAvailable(); return Math.max(totalUsed - usage.getUsedSpace(), 0L); } @@ -237,14 +235,4 @@ private static long getReserved(ConfigurationSource conf, String rootDir, return (long) Math.ceil(capacity * percentage); } - - public boolean isReservedUsagesInRange() { - SpaceUsageSource spaceUsageSource = realUsage(); - long reservedUsed = getOtherUsed(spaceUsageSource); - if (reservedInBytes > 0 && reservedUsed > reservedInBytes) { - LOG.warn("Reserved usages {} is higher than actual allocated reserved space {}.", reservedUsed, reservedInBytes); - return false; - } - return true; - } } diff --git a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/impl/TestHddsDispatcher.java b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/impl/TestHddsDispatcher.java index 8c664321c46..aac75cac29c 100644 --- a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/impl/TestHddsDispatcher.java +++ b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/impl/TestHddsDispatcher.java @@ -339,8 +339,7 @@ public void testContainerCloseActionWhenVolumeFull( HddsDispatcher hddsDispatcher = new HddsDispatcher( conf, containerSet, volumeSet, handlers, context, metrics, null); hddsDispatcher.setClusterId(scmId.toString()); - containerData.getVolume().getVolumeUsage() - .ifPresent(usage -> usage.incrementUsedSpace(60)); + containerData.getVolume().incrementUsedSpace(60); usedSpace.addAndGet(60); ContainerCommandResponseProto response = hddsDispatcher .dispatch(getWriteChunkRequest(dd.getUuidString(), 1L, 1L), null); diff --git a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/volume/TestReservedVolumeSpace.java b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/volume/TestReservedVolumeSpace.java index e2a9851b1c2..754bf353697 100644 --- a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/volume/TestReservedVolumeSpace.java +++ b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/volume/TestReservedVolumeSpace.java @@ -68,7 +68,7 @@ public void testDefaultConfig() throws Exception { // Gets the total capacity reported by Ozone, which may be limited to less than the volume's real capacity by the // DU reserved configurations. long volumeCapacity = hddsVolume.getCurrentUsage().getCapacity(); - VolumeUsage usage = hddsVolume.getVolumeUsage().get(); + VolumeUsage usage = hddsVolume.getVolumeUsage(); // Gets the actual total capacity without accounting for DU reserved space configurations. long totalCapacity = usage.realUsage().getCapacity(); @@ -92,7 +92,7 @@ public void testVolumeCapacityAfterReserve() throws Exception { HDDS_DATANODE_DIR_DU_RESERVED_PERCENT_DEFAULT); long volumeCapacity = hddsVolume.getCurrentUsage().getCapacity(); - VolumeUsage usage = hddsVolume.getVolumeUsage().get(); + VolumeUsage usage = hddsVolume.getVolumeUsage(); //Gets the actual total capacity long totalCapacity = usage.realUsage().getCapacity(); @@ -116,8 +116,7 @@ public void testReservedWhenBothConfigSet() throws Exception { folder.toString() + ":500B"); HddsVolume hddsVolume = volumeBuilder.conf(conf).build(); - long reservedFromVolume = hddsVolume.getVolumeUsage().get() - .getReservedInBytes(); + long reservedFromVolume = hddsVolume.getVolumeUsage().getReservedInBytes(); assertEquals(500, reservedFromVolume); } @@ -130,7 +129,7 @@ public void testFallbackToPercentConfig() throws Exception { temp.toString() + ":500B"); HddsVolume hddsVolume = volumeBuilder.conf(conf).build(); - VolumeUsage usage = hddsVolume.getVolumeUsage().get(); + VolumeUsage usage = hddsVolume.getVolumeUsage(); long reservedFromVolume = usage.getReservedInBytes(); assertNotEquals(0, reservedFromVolume); @@ -150,8 +149,7 @@ public void testInvalidConfig() throws Exception { folder.toString() + ":500C"); HddsVolume hddsVolume1 = volumeBuilder.conf(conf1).build(); - long reservedFromVolume1 = hddsVolume1.getVolumeUsage().get() - .getReservedInBytes(); + long reservedFromVolume1 = hddsVolume1.getVolumeUsage().getReservedInBytes(); assertEquals(getExpectedDefaultReserved(hddsVolume1), reservedFromVolume1); OzoneConfiguration conf2 = new OzoneConfiguration(); @@ -160,8 +158,7 @@ public void testInvalidConfig() throws Exception { conf2.set(HDDS_DATANODE_DIR_DU_RESERVED_PERCENT, "20"); HddsVolume hddsVolume2 = volumeBuilder.conf(conf2).build(); - long reservedFromVolume2 = hddsVolume2.getVolumeUsage().get() - .getReservedInBytes(); + long reservedFromVolume2 = hddsVolume2.getVolumeUsage().getReservedInBytes(); assertEquals(getExpectedDefaultReserved(hddsVolume2), reservedFromVolume2); } @@ -187,7 +184,7 @@ public void testPathsCanonicalized() throws Exception { conf.set(ScmConfigKeys.HDDS_DATANODE_DIR_DU_RESERVED, symlink + ":500B"); HddsVolume hddsVolume = volumeBuilder.conf(conf).build(); - long reservedFromVolume = hddsVolume.getVolumeUsage().get().getReservedInBytes(); + long reservedFromVolume = hddsVolume.getVolumeUsage().getReservedInBytes(); assertEquals(500, reservedFromVolume); } @@ -210,7 +207,7 @@ public void testMinFreeSpaceCalculator() throws Exception { } private long getExpectedDefaultReserved(HddsVolume volume) { - long totalCapacity = volume.getVolumeUsage().get().realUsage().getCapacity(); + long totalCapacity = volume.getVolumeUsage().realUsage().getCapacity(); return (long) Math.ceil(totalCapacity * HDDS_DATANODE_DIR_DU_RESERVED_PERCENT_DEFAULT); } } diff --git a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/volume/TestStorageVolumeHealthChecks.java b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/volume/TestStorageVolumeHealthChecks.java index 25c6f05585a..1c9b8bec8c8 100644 --- a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/volume/TestStorageVolumeHealthChecks.java +++ b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/volume/TestStorageVolumeHealthChecks.java @@ -122,7 +122,7 @@ public void verifyFullVolumeHealthWithDiskReadWriteStatus(StorageVolume.Builder< for (boolean result : checkResult) { StorageVolume volume = builder.build(); - VolumeUsage usage = volume.getVolumeUsage().get(); + VolumeUsage usage = volume.getVolumeUsage(); DatanodeConfiguration dnConf = CONF.getObject(DatanodeConfiguration.class); int minimumDiskSpace = dnConf.getVolumeHealthCheckFileSize() * 2; // Keep remaining space as just less than double of VolumeHealthCheckFileSize. diff --git a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/volume/TestVolumeSet.java b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/volume/TestVolumeSet.java index 19ccb492b96..1e13c7cc2da 100644 --- a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/volume/TestVolumeSet.java +++ b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/common/volume/TestVolumeSet.java @@ -235,7 +235,7 @@ public void testShutdown() throws Exception { // Verify that volume usage can be queried during shutdown. for (StorageVolume volume : volumesList) { - assertThat(volume.getVolumeUsage()).isPresent(); + assertThat(volume.getVolumeUsage()).isNotNull(); volume.getCurrentUsage(); } } diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/TestMiniOzoneCluster.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/TestMiniOzoneCluster.java index 086a3f045bc..a227242d302 100644 --- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/TestMiniOzoneCluster.java +++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/TestMiniOzoneCluster.java @@ -276,7 +276,7 @@ public void testMultipleDataDirs() throws Exception { volumeList.forEach(storageVolume -> assertEquals( (long) StorageSize.parse(reservedSpace).getValue(), - storageVolume.getVolumeUsage().get().getReservedInBytes())); + storageVolume.getVolumeUsage().getReservedInBytes())); } } diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestContainerStateMachineFailures.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestContainerStateMachineFailures.java index dbd2e6effb0..b97131aed8e 100644 --- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestContainerStateMachineFailures.java +++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/client/rpc/TestContainerStateMachineFailures.java @@ -94,6 +94,7 @@ import org.apache.hadoop.ozone.container.common.transport.server.ratis.ContainerStateMachine; import org.apache.hadoop.ozone.container.common.transport.server.ratis.XceiverServerRatis; import org.apache.hadoop.ozone.container.common.volume.StorageVolume; +import org.apache.hadoop.ozone.container.common.volume.VolumeUsage; import org.apache.hadoop.ozone.container.keyvalue.KeyValueContainerData; import org.apache.hadoop.ozone.container.ozoneimpl.OzoneContainer; import org.apache.hadoop.ozone.om.helpers.OmKeyArgs; @@ -820,14 +821,16 @@ void testContainerStateMachineDualFailureRetry() void testContainerStateMachineAllNodeFailure() throws Exception { // mark all dn volume as full to induce failure - List> increasedVolumeSpace = new ArrayList<>(); + List> increasedVolumeSpace = new ArrayList<>(); cluster.getHddsDatanodes().forEach( dn -> { List volumesList = dn.getDatanodeStateMachine().getContainer().getVolumeSet().getVolumesList(); volumesList.forEach(sv -> { - if (sv.getVolumeUsage().isPresent()) { - increasedVolumeSpace.add(Pair.of(sv, sv.getCurrentUsage().getAvailable())); - sv.getVolumeUsage().get().incrementUsedSpace(sv.getCurrentUsage().getAvailable()); + final VolumeUsage volumeUsage = sv.getVolumeUsage(); + if (volumeUsage != null) { + final long available = sv.getCurrentUsage().getAvailable(); + increasedVolumeSpace.add(Pair.of(volumeUsage, available)); + volumeUsage.incrementUsedSpace(available); } }); } @@ -843,14 +846,14 @@ void testContainerStateMachineAllNodeFailure() key.flush(); fail(); } catch (IOException ex) { - assertTrue(ex.getMessage().contains("Retry request failed. retries get failed due to exceeded" + - " maximum allowed retries number: 5"), ex.getMessage()); + assertThat(ex.getMessage()).contains("Retry request failed. retries get failed due to exceeded" + + " maximum allowed retries number: 5"); } finally { - increasedVolumeSpace.forEach(e -> e.getLeft().getVolumeUsage().ifPresent( - p -> p.decrementUsedSpace(e.getRight()))); + increasedVolumeSpace.forEach(e -> e.getLeft().decrementUsedSpace(e.getRight())); // test execution is less than 2 sec but to be safe putting 30 sec as without fix, taking more than 60 sec - assertTrue(Time.monotonicNow() - startTime < 30000, "Operation took longer than expected: " - + (Time.monotonicNow() - startTime)); + assertThat(Time.monotonicNow() - startTime) + .describedAs("Operation took longer than expected") + .isLessThan(30000); } // previous pipeline gets closed due to disk full failure, so created a new pipeline and write should succeed, diff --git a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/container/common/statemachine/commandhandler/TestRefreshVolumeUsageHandler.java b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/container/common/statemachine/commandhandler/TestRefreshVolumeUsageHandler.java index 1cc08ae6b6f..c8447194b38 100644 --- a/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/container/common/statemachine/commandhandler/TestRefreshVolumeUsageHandler.java +++ b/hadoop-ozone/integration-test/src/test/java/org/apache/hadoop/ozone/container/common/statemachine/commandhandler/TestRefreshVolumeUsageHandler.java @@ -131,7 +131,7 @@ public void test() throws Exception { // force refresh and verify used space in optimized flow cluster.getHddsDatanodes().get(0).getDatanodeStateMachine().getContainer().getVolumeSet().getVolumesList().get(0) - .getVolumeUsage().get().refreshNow(); + .getVolumeUsage().refreshNow(); GenericTestUtils.waitFor(() -> logCapture.getOutput().contains("container data usages 4"), 500, 10 * 1000); } }