|
@@ -41,6 +41,7 @@ import org.apache.hadoop.hdfs.server.datanode.fsdataset.FsVolumeSpi;
|
|
import org.apache.hadoop.hdfs.server.datanode.fsdataset.VolumeChoosingPolicy;
|
|
import org.apache.hadoop.hdfs.server.datanode.fsdataset.VolumeChoosingPolicy;
|
|
import org.apache.hadoop.hdfs.server.datanode.BlockScanner;
|
|
import org.apache.hadoop.hdfs.server.datanode.BlockScanner;
|
|
import org.apache.hadoop.hdfs.server.protocol.DatanodeStorage;
|
|
import org.apache.hadoop.hdfs.server.protocol.DatanodeStorage;
|
|
|
|
+import org.apache.hadoop.io.IOUtils;
|
|
import org.apache.hadoop.util.DiskChecker.DiskErrorException;
|
|
import org.apache.hadoop.util.DiskChecker.DiskErrorException;
|
|
import org.apache.hadoop.util.Time;
|
|
import org.apache.hadoop.util.Time;
|
|
|
|
|
|
@@ -292,6 +293,10 @@ class FsVolumeList {
|
|
}
|
|
}
|
|
if (blockScanner != null) {
|
|
if (blockScanner != null) {
|
|
blockScanner.addVolumeScanner(ref);
|
|
blockScanner.addVolumeScanner(ref);
|
|
|
|
+ } else {
|
|
|
|
+ // If the volume is not put into a volume scanner, it does not need to
|
|
|
|
+ // hold the reference.
|
|
|
|
+ IOUtils.cleanup(FsDatasetImpl.LOG, ref);
|
|
}
|
|
}
|
|
// If the volume is used to replace a failed volume, it needs to reset the
|
|
// If the volume is used to replace a failed volume, it needs to reset the
|
|
// volume failure info for this volume.
|
|
// volume failure info for this volume.
|