From cd1277398a1373a8bd6fa5f700684cdc6bd6a947 Mon Sep 17 00:00:00 2001 From: Rakesh Radhakrishnan Date: Fri, 9 Aug 2019 14:07:54 +0530 Subject: [PATCH] HDFS-14700. Clean up pmem cache before setting pmem cache capacity. Contributed by Feilong He. (cherry picked from commit f6fa865d6fcb0ef0a25a00615f16f383e5032373) --- .../fsdataset/impl/PmemVolumeManager.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/PmemVolumeManager.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/PmemVolumeManager.java index 2d77f7ad96a..969d18b62a9 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/PmemVolumeManager.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/PmemVolumeManager.java @@ -218,6 +218,8 @@ public final class PmemVolumeManager { try { File pmemDir = new File(volumes[n]); File realPmemDir = verifyIfValidPmemVolume(pmemDir); + // Clean up the cache left before, if any. + cleanup(realPmemDir); this.pmemVolumes.add(realPmemDir.getPath()); long maxBytes; if (maxBytesPerPmem == -1) { @@ -242,17 +244,20 @@ public final class PmemVolumeManager { throw new IOException( "At least one valid persistent memory volume is required!"); } - cleanup(); + } + + void cleanup(File realPmemDir) { + try { + FileUtils.cleanDirectory(realPmemDir); + } catch (IOException e) { + LOG.error("Failed to clean up " + realPmemDir.getPath(), e); + } } void cleanup() { // Remove all files under the volume. - for (String pmemDir: pmemVolumes) { - try { - FileUtils.cleanDirectory(new File(pmemDir)); - } catch (IOException e) { - LOG.error("Failed to clean up " + pmemDir, e); - } + for (String pmemVolume : pmemVolumes) { + cleanup(new File(pmemVolume)); } }