This is an automated email from the ASF dual-hosted git repository.
szetszwo 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 cafd9dd62ae HDDS-14176. Do not use Optional for volumeUsage (#9503)
cafd9dd62ae is described below
commit cafd9dd62aeeb0f7cf18878d034c219e82a858fa
Author: Doroszlai, Attila <[email protected]>
AuthorDate: Mon Dec 15 19:49:21 2025 +0100
HDDS-14176. Do not use Optional for volumeUsage (#9503)
---
.../ozone/container/common/volume/HddsVolume.java | 32 +++++++++-------
.../container/common/volume/StorageVolume.java | 44 +++++++++++++---------
.../container/common/volume/VolumeInfoMetrics.java | 5 ++-
.../ozone/container/common/volume/VolumeUsage.java | 14 +------
.../container/common/impl/TestHddsDispatcher.java | 3 +-
.../common/volume/TestReservedVolumeSpace.java | 19 ++++------
.../volume/TestStorageVolumeHealthChecks.java | 2 +-
.../container/common/volume/TestVolumeSet.java | 2 +-
.../apache/hadoop/ozone/TestMiniOzoneCluster.java | 2 +-
.../rpc/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<Boolean, VolumeCheckRes
private File tmpDir;
private File diskCheckDir;
- private final Optional<VolumeUsage> 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<VolumeUsage> 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<Pair<StorageVolume, Long>> increasedVolumeSpace = new ArrayList<>();
+ List<Pair<VolumeUsage, Long>> increasedVolumeSpace = new ArrayList<>();
cluster.getHddsDatanodes().forEach(
dn -> {
List<StorageVolume> 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);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]