浏览代码

HADOOP-12810. FileSystem#listLocatedStatus causes unnecessary RPC calls (Contributed by Ryan Blue)

(cherry picked from commit 96ea3094315bb1e1a5e268e3817c7fdedc3e9462)
(cherry picked from commit 2bf5a005fab287689a148c1928f3b04c0a8dcedf)
Vinayakumar B 9 年之前
父节点
当前提交
a9c1bb4241

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

@@ -13,6 +13,9 @@ Release 2.7.3 - UNRELEASED
 
   OPTIMIZATIONS
 
+    HADOOP-12810. FileSystem#listLocatedStatus causes unnecessary RPC calls
+    (Ryan Blue via vinayakumarb)
+
   BUG FIXES
 
     HADOOP-12296. when setnetgrent returns 0 in linux, exception should be

+ 3 - 1
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/FileSystem.java

@@ -1723,8 +1723,10 @@ public abstract class FileSystem extends Configured implements Closeable {
           throw new NoSuchElementException("No more entry in " + f);
         }
         FileStatus result = stats[i++];
+        // for files, use getBlockLocations(FileStatus, int, int) to avoid
+        // calling getFileStatus(Path) to load the FileStatus again
         BlockLocation[] locs = result.isFile() ?
-            getFileBlockLocations(result.getPath(), 0, result.getLen()) :
+            getFileBlockLocations(result, 0, result.getLen()) :
             null;
         return new LocatedFileStatus(result, locs);
       }