You are viewing a plain text version of this content. The canonical link for it is here.
Posted to hdfs-commits@hadoop.apache.org by dh...@apache.org on 2010/05/15 07:05:10 UTC

svn commit: r944566 - in /hadoop/hdfs/trunk: CHANGES.txt src/java/org/apache/hadoop/hdfs/server/namenode/FSImage.java src/java/org/apache/hadoop/hdfs/server/namenode/TransferFsImage.java

Author: dhruba
Date: Sat May 15 05:05:10 2010
New Revision: 944566

URL: http://svn.apache.org/viewvc?rev=944566&view=rev
Log:
HDFS-970. fsync fsimage to disk before closing fsimage file.
(Todd Lipcon via dhruba)


Modified:
    hadoop/hdfs/trunk/CHANGES.txt
    hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/FSImage.java
    hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/TransferFsImage.java

Modified: hadoop/hdfs/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hadoop/hdfs/trunk/CHANGES.txt?rev=944566&r1=944565&r2=944566&view=diff
==============================================================================
--- hadoop/hdfs/trunk/CHANGES.txt (original)
+++ hadoop/hdfs/trunk/CHANGES.txt Sat May 15 05:05:10 2010
@@ -18,6 +18,9 @@ Trunk (unreleased changes)
     HDFS 1021. specify correct server principal for RefreshAuthorizationPolicyProtocol 
     and RefreshUserToGroupMappingsProtocol protocols in DFSAdmin (for HADOOP-6612) (boryas)
 
+    HDFS-970. fsync fsimage to disk before closing fsimage file.
+    (Todd Lipcon via dhruba)
+
 Release 0.21.0 - Unreleased
 
   INCOMPATIBLE CHANGES

Modified: hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/FSImage.java
URL: http://svn.apache.org/viewvc/hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/FSImage.java?rev=944566&r1=944565&r2=944566&view=diff
==============================================================================
--- hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/FSImage.java (original)
+++ hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/FSImage.java Sat May 15 05:05:10 2010
@@ -728,10 +728,12 @@ public class FSImage extends Storage {
         LOG.error("Cannot delete chekpoint time file: "
                   + timeFile.getCanonicalPath());
     }
-    DataOutputStream out = new DataOutputStream(
-                                                new FileOutputStream(timeFile));
+    FileOutputStream fos = new FileOutputStream(timeFile);
+    DataOutputStream out = new DataOutputStream(fos);
     try {
       out.writeLong(checkpointTime);
+      out.flush();
+      fos.getChannel().force(true);
     } finally {
       out.close();
     }
@@ -1229,9 +1231,9 @@ public class FSImage extends Storage {
     //
     // Write out data
     //
+    FileOutputStream fos = new FileOutputStream(newFile);
     DataOutputStream out = new DataOutputStream(
-                                                new BufferedOutputStream(
-                                                                         new FileOutputStream(newFile)));
+      new BufferedOutputStream(fos));
     try {
       out.writeInt(FSConstants.LAYOUT_VERSION);
       out.writeInt(namespaceID);
@@ -1246,6 +1248,9 @@ public class FSImage extends Storage {
       fsNamesys.saveFilesUnderConstruction(out);
       fsNamesys.saveSecretManagerState(out);
       strbuf = null;
+
+      out.flush();
+      fos.getChannel().force(true);
     } finally {
       out.close();
     }

Modified: hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/TransferFsImage.java
URL: http://svn.apache.org/viewvc/hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/TransferFsImage.java?rev=944566&r1=944565&r2=944566&view=diff
==============================================================================
--- hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/TransferFsImage.java (original)
+++ hadoop/hdfs/trunk/src/java/org/apache/hadoop/hdfs/server/namenode/TransferFsImage.java Sat May 15 05:05:10 2010
@@ -195,6 +195,7 @@ class TransferFsImage implements FSConst
       if (output != null) {
         for (int i = 0; i < output.length; i++) {
           if (output[i] != null) {
+            output[i].getChannel().force(true);
             output[i].close();
           }
         }