diff --git a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/DistributedFileSystem.java b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/DistributedFileSystem.java index e2449c7d6b9..ce7546eedda 100644 --- a/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/DistributedFileSystem.java +++ b/hadoop-hdfs-project/hadoop-hdfs-client/src/main/java/org/apache/hadoop/hdfs/DistributedFileSystem.java @@ -2350,7 +2350,7 @@ public class DistributedFileSystem extends FileSystem { EncryptionZone ez = dfs.getEZForPath(parentSrc); if ((ez != null)) { return this.makeQualified( - new Path(ez.getPath() + "/" + FileSystem.TRASH_PREFIX + + new Path(ez.getPath(), FileSystem.TRASH_PREFIX + dfs.ugi.getShortUserName())); } } catch (IOException e) { diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt index 6af723f0bfc..27bac54ee7a 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt +++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt @@ -1014,6 +1014,8 @@ Release 2.8.0 - UNRELEASED HDFS-9084. Pagination, sorting and filtering of files/directories in the HDFS Web UI. (Ravi Prakash via ozawa) + HDFS-9844. Correct path creation in getTrashRoot to handle root dir. (zhz) + OPTIMIZATIONS HDFS-8026. Trace FSOutputSummer#writeChecksumChunks rather than diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestEncryptionZones.java b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestEncryptionZones.java index 551c333ac58..0057c0d5894 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestEncryptionZones.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestEncryptionZones.java @@ -1428,6 +1428,20 @@ public class TestEncryptionZones { verifyShellDeleteWithTrash(shell, topEZ); } + @Test(timeout = 120000) + public void testRootDirEZTrash() throws Exception { + final HdfsAdmin dfsAdmin = + new HdfsAdmin(FileSystem.getDefaultUri(conf), conf); + dfsAdmin.createEncryptionZone(new Path("/"), TEST_KEY); + final Path encFile = new Path("/encFile"); + final int len = 8192; + DFSTestUtil.createFile(fs, encFile, len, (short) 1, 0xFEED); + Configuration clientConf = new Configuration(conf); + clientConf.setLong(FS_TRASH_INTERVAL_KEY, 1); + FsShell shell = new FsShell(clientConf); + verifyShellDeleteWithTrash(shell, encFile); + } + private void verifyShellDeleteWithTrash(FsShell shell, Path path) throws Exception{ try {