Explorar o código

HDFS-9844. Correct path creation in getTrashRoot to handle root dir.

Change-Id: I5afe6c7176063892e3e632698c849bd9f4b92906
Zhe Zhang %!s(int64=9) %!d(string=hai) anos
pai
achega
9ecb71f92c

+ 1 - 1
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);
       EncryptionZone ez = dfs.getEZForPath(parentSrc);
       if ((ez != null)) {
       if ((ez != null)) {
         return this.makeQualified(
         return this.makeQualified(
-            new Path(ez.getPath() + "/" + FileSystem.TRASH_PREFIX +
+            new Path(ez.getPath(), FileSystem.TRASH_PREFIX +
                 dfs.ugi.getShortUserName()));
                 dfs.ugi.getShortUserName()));
       }
       }
     } catch (IOException e) {
     } catch (IOException e) {

+ 2 - 0
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-9084. Pagination, sorting and filtering of files/directories in the
     HDFS Web UI. (Ravi Prakash via ozawa)
     HDFS Web UI. (Ravi Prakash via ozawa)
 
 
+    HDFS-9844. Correct path creation in getTrashRoot to handle root dir. (zhz)
+
   OPTIMIZATIONS
   OPTIMIZATIONS
 
 
     HDFS-8026. Trace FSOutputSummer#writeChecksumChunks rather than
     HDFS-8026. Trace FSOutputSummer#writeChecksumChunks rather than

+ 14 - 0
hadoop-hdfs-project/hadoop-hdfs/src/test/java/org/apache/hadoop/hdfs/TestEncryptionZones.java

@@ -1428,6 +1428,20 @@ public class TestEncryptionZones {
     verifyShellDeleteWithTrash(shell, topEZ);
     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)
   private void verifyShellDeleteWithTrash(FsShell shell, Path path)
       throws Exception{
       throws Exception{
     try {
     try {