diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/FsVolumeImpl.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/FsVolumeImpl.java index 517bbc68c8..9ffced1384 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/FsVolumeImpl.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/FsVolumeImpl.java @@ -163,6 +163,13 @@ public class FsVolumeImpl implements FsVolumeSpi { this.storageType = storageLocation.getStorageType(); this.configuredCapacity = -1; this.usage = usage; + if (this.usage != null) { + reserved = new ReservedSpaceCalculator.Builder(conf) + .setUsage(this.usage).setStorageType(storageType).build(); + } else { + reserved = null; + LOG.warn("Setting reserved to null as usage is null"); + } if (currentDir != null) { File parent = currentDir.getParentFile(); cacheExecutor = initializeCacheExecutor(parent); @@ -173,8 +180,6 @@ public class FsVolumeImpl implements FsVolumeSpi { } this.conf = conf; this.fileIoProvider = fileIoProvider; - this.reserved = new ReservedSpaceCalculator.Builder(conf) - .setUsage(usage).setStorageType(storageType).build(); } protected ThreadPoolExecutor initializeCacheExecutor(File parent) { @@ -473,7 +478,7 @@ public class FsVolumeImpl implements FsVolumeSpi { } long getReserved(){ - return reserved.getReserved(); + return reserved != null ? reserved.getReserved() : 0; } @VisibleForTesting diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/TestProvidedImpl.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/TestProvidedImpl.java index a48e2f8f37..f38359042e 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/TestProvidedImpl.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/TestProvidedImpl.java @@ -353,6 +353,14 @@ public class TestProvidedImpl { } } + @Test + public void testReserved() throws Exception { + for (FsVolumeSpi vol : providedVolumes) { + // the reserved space for provided volumes should be 0. + assertEquals(0, ((FsVolumeImpl) vol).getReserved()); + } + } + @Test public void testProvidedVolumeImpl() throws IOException {