Browse Source

HDFS-5482. DistributedFileSystem#listPathBasedCacheDirectives must support relative paths. Contributed by Colin Patrick McCabe.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1540257 13f79535-47bb-0310-9956-ffa450edef68
Chris Nauroth 11 years ago
parent
commit
25ebe6bfd7

+ 3 - 0
hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt

@@ -361,6 +361,9 @@ Trunk (Unreleased)
 
     HDFS-5394. Fix race conditions in DN caching and uncaching (cmccabe)
 
+    HDFS-5482. DistributedFileSystem#listPathBasedCacheDirectives must support
+    relative paths. (Colin Patrick McCabe via cnauroth)
+
 Release 2.3.0 - UNRELEASED
 
   INCOMPATIBLE CHANGES

+ 6 - 4
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DistributedFileSystem.java

@@ -1637,9 +1637,8 @@ public class DistributedFileSystem extends FileSystem {
     }
     if (filter.getPath() != null) {
       filter = new PathBasedCacheDirective.Builder(filter).
-          setPath(filter.getPath().
-              makeQualified(getUri(), filter.getPath())).
-                build();
+          setPath(new Path(getPathName(fixRelativePart(filter.getPath())))).
+          build();
     }
     final RemoteIterator<PathBasedCacheDirective> iter =
         dfs.listPathBasedCacheDirectives(filter);
@@ -1651,8 +1650,11 @@ public class DistributedFileSystem extends FileSystem {
 
       @Override
       public PathBasedCacheDirective next() throws IOException {
+        // Although the paths we get back from the NameNode should always be
+        // absolute, we call makeQualified to add the scheme and authority of
+        // this DistributedFilesystem.
         PathBasedCacheDirective desc = iter.next();
-        Path p = desc.getPath().makeQualified(getUri(), desc.getPath());
+        Path p = desc.getPath().makeQualified(getUri(), getWorkingDirectory());
         return new PathBasedCacheDirective.Builder(desc).setPath(p).build();
       }
     };

+ 1 - 1
hadoop-hdfs-project/hadoop-hdfs/src/test/resources/testCacheAdminConf.xml

@@ -335,7 +335,7 @@
         <cache-admin-command>-addDirective -path /bar -pool pool1</cache-admin-command>
         <cache-admin-command>-addDirective -path /foo -pool pool2</cache-admin-command>
         <cache-admin-command>-addDirective -path /bar -pool pool2</cache-admin-command>
-        <cache-admin-command>-removeDirectives -path /foo</cache-admin-command>
+        <cache-admin-command>-removeDirectives -path ../../foo</cache-admin-command>
         <cache-admin-command>-listDirectives</cache-admin-command>
       </test-commands>
       <cleanup-commands>