Forráskód Böngészése

HDFS-5884. LoadDelegator should use IOUtils.readFully() to read the magic header. Contributed by Haohui Mai.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/HDFS-5698@1564557 13f79535-47bb-0310-9956-ffa450edef68
Jing Zhao 11 éve
szülő
commit
4b1a037c1f

+ 5 - 2
hadoop-hdfs-project/hadoop-hdfs/CHANGES_HDFS-5698.txt

@@ -1,6 +1,6 @@
 HDFS-5698 subtasks
 
-    HDFS-5717. Save FSImage header in protobuf. (Haohui Mai via jing9) 
+    HDFS-5717. Save FSImage header in protobuf. (Haohui Mai via jing9)
 
     HDFS-5738. Serialize INode information in protobuf. (Haohui Mai via jing9)
 
@@ -25,7 +25,7 @@ HDFS-5698 subtasks
 
     HDFS-5808. Implement cancellation when saving FSImage. (Haohui Mai via jing9)
 
-    HDFS-5826. Update the stored edit logs to be consistent with the changes in 
+    HDFS-5826. Update the stored edit logs to be consistent with the changes in
     HDFS-5698 branch. (Haohui Mai via jing9)
 
     HDFS-5797. Implement offline image viewer. (Haohui Mai via jing9)
@@ -34,3 +34,6 @@ HDFS-5698 subtasks
 
     HDFS-5871. Use PBHelper to serialize CacheDirectiveInfoExpirationProto.
     (Haohui Mai via jing9)
+
+    HDFS-5884. LoadDelegator should use IOUtils.readFully() to read the magic
+    header. (Haohui Mai via jing9)

+ 3 - 3
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/namenode/FSImageFormat.java

@@ -208,12 +208,12 @@ public class FSImageFormat {
     public void load(File file) throws IOException {
       Preconditions.checkState(impl == null, "Image already loaded!");
 
-      byte[] magic = new byte[FSImageUtil.MAGIC_HEADER.length];
       FileInputStream is = null;
       try {
         is = new FileInputStream(file);
-        if (is.read(magic) == magic.length
-            && Arrays.equals(magic, FSImageUtil.MAGIC_HEADER)) {
+        byte[] magic = new byte[FSImageUtil.MAGIC_HEADER.length];
+        IOUtils.readFully(is, magic, 0, magic.length);
+        if (Arrays.equals(magic, FSImageUtil.MAGIC_HEADER)) {
           FSImageFormatProtobuf.Loader loader = new FSImageFormatProtobuf.Loader(
               conf, fsn);
           impl = loader;