Bläddra i källkod

HDFS-462. loadFSImage should close edits file. Contributed by Jakob Homan.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/hdfs/trunk@793747 13f79535-47bb-0310-9956-ffa450edef68
Konstantin Shvachko 16 år sedan
förälder
incheckning
dc96e2286c
2 ändrade filer med 13 tillägg och 7 borttagningar
  1. 3 1
      CHANGES.txt
  2. 10 6
      src/java/org/apache/hadoop/hdfs/server/namenode/FSImage.java

+ 3 - 1
CHANGES.txt

@@ -57,7 +57,7 @@ Trunk (unreleased changes)
     HDFS-441. Remove TestFTPFileSystem.  (szetszwo)
 
     HDFS-440. Fix javadoc broken links in DFSClient.  (szetszwo)
-    
+
     HDFS-480. Fix a typo in the jar name in build.xml.  
     (Konstantin Shvachko via gkesavan)
 
@@ -67,6 +67,8 @@ Trunk (unreleased changes)
     HDFS-415. BlockReceiver hangs in case of certain runtime exceptions.
     (Konstantin Boudnik via rangadi)
 
+    HDFS-462. loadFSImage should close edits file. (Jakob Homan via shv)
+
 Release 0.20.1 - Unreleased
 
   IMPROVEMENTS

+ 10 - 6
src/java/org/apache/hadoop/hdfs/server/namenode/FSImage.java

@@ -47,6 +47,7 @@ import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.Path;
 import org.apache.hadoop.fs.permission.FsPermission;
 import org.apache.hadoop.fs.permission.PermissionStatus;
+import org.apache.hadoop.hdfs.DeprecatedUTF8;
 import org.apache.hadoop.hdfs.protocol.Block;
 import org.apache.hadoop.hdfs.protocol.DatanodeID;
 import org.apache.hadoop.hdfs.protocol.FSConstants;
@@ -63,7 +64,6 @@ import org.apache.hadoop.hdfs.server.protocol.CheckpointCommand;
 import org.apache.hadoop.hdfs.server.protocol.NamenodeCommand;
 import org.apache.hadoop.hdfs.server.protocol.NamenodeProtocol;
 import org.apache.hadoop.hdfs.server.protocol.NamenodeRegistration;
-import org.apache.hadoop.hdfs.DeprecatedUTF8;
 import org.apache.hadoop.io.Writable;
 
 /**
@@ -471,7 +471,14 @@ public class FSImage extends Storage {
     case REGULAR:
       // just load the image
     }
-    return loadFSImage();
+    
+    boolean needToSave = loadFSImage();
+
+    assert editLog != null : "editLog must be initialized";
+    if(!editLog.isOpen())
+      editLog.open();
+    
+    return needToSave;
   }
 
   private void doUpgrade() throws IOException {
@@ -516,6 +523,7 @@ public class FSImage extends Storage {
       assert curDir.exists() : "Current directory must exist.";
       assert !prevDir.exists() : "prvious directory must not exist.";
       assert !tmpDir.exists() : "prvious.tmp directory must not exist.";
+      assert !editLog.isOpen() : "Edits log must not be open.";
       // rename current to tmp
       rename(curDir, tmpDir);
       // save new image
@@ -979,10 +987,6 @@ public class FSImage extends Storage {
     
     // Load latest edits
     needToSave |= (loadFSEdits(latestEditsSD) > 0);
-
-    assert editLog != null : "editLog must be initialized";
-    if(!editLog.isOpen())
-      editLog.open();
     
     return needToSave;
   }