From 4c8b01abcb7ca4433a60e812d702902ca27b89b8 Mon Sep 17 00:00:00 2001 From: Masatake Iwasaki Date: Wed, 8 Jan 2020 11:28:34 +0900 Subject: [PATCH] HDFS-15072. HDFS MiniCluster fails to start when run in directory path with a %. (#1775) (cherry picked from commit a43c177f1d4c2b6149a2680dd23d91103eca3be0) --- .../datanode/fsdataset/impl/FsVolumeImpl.java | 3 ++- .../fsdataset/impl/TestFsDatasetImpl.java | 15 ++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) 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 4dc556d895b..5a8229aee14 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 @@ -196,9 +196,10 @@ public class FsVolumeImpl implements FsVolumeSpi { DFSConfigKeys.DFS_DATANODE_FSDATASETCACHE_MAX_THREADS_PER_VOLUME_KEY, DFSConfigKeys.DFS_DATANODE_FSDATASETCACHE_MAX_THREADS_PER_VOLUME_DEFAULT); + String escapedPath = parent.toString().replaceAll("%", "%%"); ThreadFactory workerFactory = new ThreadFactoryBuilder() .setDaemon(true) - .setNameFormat("FsVolumeImplWorker-" + parent.toString() + "-%d") + .setNameFormat("FsVolumeImplWorker-" + escapedPath + "-%d") .build(); ThreadPoolExecutor executor = new ThreadPoolExecutor( 1, maxNumThreads, diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/TestFsDatasetImpl.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/TestFsDatasetImpl.java index 9270be8c909..51a6e6e795c 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/TestFsDatasetImpl.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/TestFsDatasetImpl.java @@ -951,4 +951,17 @@ public class TestFsDatasetImpl { } } -} \ No newline at end of file + @Test(timeout=30000) + public void testDataDirWithPercent() throws IOException { + String baseDir = new FileSystemTestHelper().getTestRootDir(); + File dataDir = new File(baseDir, "invalidFormatString-%z"); + dataDir.mkdirs(); + FsVolumeImpl volumeFixed = new FsVolumeImplBuilder() + .setConf(new HdfsConfiguration()) + .setDataset(dataset) + .setStorageID("storage-id") + .setStorageDirectory( + new StorageDirectory(StorageLocation.parse(dataDir.getPath()))) + .build(); + } +}