diff --git a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/fs/SpaceUsageSource.java b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/fs/SpaceUsageSource.java index 7ef5c4f58230..2295d1c71e47 100644 --- a/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/fs/SpaceUsageSource.java +++ b/hadoop-hdds/common/src/main/java/org/apache/hadoop/hdds/fs/SpaceUsageSource.java @@ -28,7 +28,7 @@ @InterfaceAudience.Private @InterfaceStability.Evolving public interface SpaceUsageSource { - SpaceUsageSource UNKNOWN = new Fixed(0, 0, 0); + Fixed UNKNOWN = new Fixed(0, 0, 0); /** * @return space usage in bytes @@ -41,7 +41,7 @@ public interface SpaceUsageSource { long getAvailable(); - default SpaceUsageSource snapshot() { + default Fixed snapshot() { return new Fixed(getCapacity(), getAvailable(), getUsedSpace()); } @@ -77,7 +77,7 @@ public long getUsedSpace() { } @Override - public SpaceUsageSource snapshot() { + public Fixed snapshot() { return this; // immutable } diff --git a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/MutableVolumeSet.java b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/MutableVolumeSet.java index c704245be543..852a6f77299c 100644 --- a/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/MutableVolumeSet.java +++ b/hadoop-hdds/container-service/src/main/java/org/apache/hadoop/ozone/container/common/volume/MutableVolumeSet.java @@ -57,7 +57,7 @@ public class MutableVolumeSet implements VolumeSet { * Maintains a map of all active volumes in the DataNode. * Each volume has one-to-one mapping with a volumeInfo object. */ - private Map volumeMap; + private final Map volumeMap = new ConcurrentHashMap<>(); /** * Maintains a map of volumes which have failed. The keys in this map and * {@link #volumeMap} are mutually exclusive. @@ -147,7 +147,6 @@ public StorageVolumeChecker getVolumeChecker() { * Add DN volumes configured through ConfigKeys to volumeMap. */ private void initializeVolumeSet() throws IOException { - volumeMap = new ConcurrentHashMap<>(); failedVolumeMap = new ConcurrentHashMap<>(); volumeStateMap = new EnumMap<>(StorageType.class); @@ -452,8 +451,9 @@ public Map getVolumeMap() { } @VisibleForTesting - public void setVolumeMap(Map map) { - this.volumeMap = map; + public void setVolumeMapForTesting(Map map) { + volumeMap.clear(); + volumeMap.putAll(map); } @VisibleForTesting 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 45feede53a1e..b04771b85a2a 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 @@ -468,7 +468,7 @@ public String getVolumeRootDir() { } /** Get current usage of the volume. */ - public SpaceUsageSource getCurrentUsage() { + public SpaceUsageSource.Fixed getCurrentUsage() { return volumeUsage != null ? volumeUsage.getCurrentUsage() : SpaceUsageSource.UNKNOWN; } 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 f67ccfaef72b..75dcf3b46de0 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 @@ -107,7 +107,7 @@ public class VolumeUsage { Preconditions.assertTrue(reservedInBytes >= 0, reservedInBytes + " < 0"); } - SpaceUsageSource realUsage() { + SpaceUsageSource.Fixed realUsage() { return source.snapshot(); } @@ -123,9 +123,8 @@ SpaceUsageSource realUsage() { * * B) avail = fsAvail - Max(reserved - other, 0); */ - public SpaceUsageSource getCurrentUsage() { - SpaceUsageSource real = realUsage(); - + public SpaceUsageSource.Fixed getCurrentUsage() { + final SpaceUsageSource.Fixed real = realUsage(); return reservedInBytes == 0 ? real : new SpaceUsageSource.Fixed( diff --git a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/upgrade/TestDatanodeUpgradeToSchemaV3.java b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/upgrade/TestDatanodeUpgradeToSchemaV3.java index 28cf1c831acf..abee873cc8a8 100644 --- a/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/upgrade/TestDatanodeUpgradeToSchemaV3.java +++ b/hadoop-hdds/container-service/src/test/java/org/apache/hadoop/ozone/container/upgrade/TestDatanodeUpgradeToSchemaV3.java @@ -556,7 +556,7 @@ public void testFinalizeFailure(boolean schemaV3Enabled) throws Exception { createDbStore(any()); Map volumeMap = new HashMap(); volumeMap.put(dataVolume.getStorageID(), volume); - dsm.getContainer().getVolumeSet().setVolumeMap(volumeMap); + dsm.getContainer().getVolumeSet().setVolumeMapForTesting(volumeMap); // Finalize will fail because of DB creation failure try { diff --git a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/fs/CachingSpaceUsageSource.java b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/fs/CachingSpaceUsageSource.java index 4aee3a1484e5..27e6f7d4144f 100644 --- a/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/fs/CachingSpaceUsageSource.java +++ b/hadoop-hdds/framework/src/main/java/org/apache/hadoop/hdds/fs/CachingSpaceUsageSource.java @@ -50,7 +50,7 @@ public class CachingSpaceUsageSource implements SpaceUsageSource { private long cachedUsedSpace; private long cachedAvailable; private long cachedCapacity; - private SpaceUsageSource cachedUsage; + private Fixed cachedUsage; private final Duration refresh; private final SpaceUsageSource source; private final SpaceUsagePersistence persistence; @@ -102,7 +102,7 @@ public long getUsedSpace() { } @Override - public SpaceUsageSource snapshot() { + public Fixed snapshot() { try (AutoCloseableLock ignored = lock.readLock(null, null)) { if (cachedUsage != null) { return cachedUsage;