Browse Source

HDFS-6902. FileWriter should be closed in finally block in BlockReceiver#receiveBlock() (Tsuyoshi OZAWA via Colin Patrick McCabe)

Colin Patrick Mccabe 10 years ago
parent
commit
b6b95ff667

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

@@ -655,6 +655,9 @@ Release 2.6.0 - UNRELEASED
 
 
     HDFS-6938. Cleanup javac warnings in FSNamesystem (Charles Lamb via wheat9)
     HDFS-6938. Cleanup javac warnings in FSNamesystem (Charles Lamb via wheat9)
 
 
+    HDFS-6902. FileWriter should be closed in finally block in
+    BlockReceiver#receiveBlock() (Tsuyoshi OZAWA via Colin Patrick McCabe)
+
 Release 2.5.1 - UNRELEASED
 Release 2.5.1 - UNRELEASED
 
 
   INCOMPATIBLE CHANGES
   INCOMPATIBLE CHANGES

+ 4 - 2
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/BlockReceiver.java

@@ -825,15 +825,17 @@ class BlockReceiver implements Closeable {
               LOG.warn("Failed to delete restart meta file: " +
               LOG.warn("Failed to delete restart meta file: " +
                   restartMeta.getPath());
                   restartMeta.getPath());
             }
             }
+            FileWriter out = null;
             try {
             try {
-              FileWriter out = new FileWriter(restartMeta);
+              out = new FileWriter(restartMeta);
               // write out the current time.
               // write out the current time.
               out.write(Long.toString(Time.now() + restartBudget));
               out.write(Long.toString(Time.now() + restartBudget));
               out.flush();
               out.flush();
-              out.close();
             } catch (IOException ioe) {
             } catch (IOException ioe) {
               // The worst case is not recovering this RBW replica. 
               // The worst case is not recovering this RBW replica. 
               // Client will fall back to regular pipeline recovery.
               // Client will fall back to regular pipeline recovery.
+            } finally {
+              IOUtils.cleanup(LOG, out);
             }
             }
             try {              
             try {              
               // Even if the connection is closed after the ack packet is
               // Even if the connection is closed after the ack packet is