Repository: hadoop
Updated Branches:
  refs/heads/branch-2.7 e768f8b77 -> 7f43eb954


HDFS-9812. Streamer threads leak if failure happens when closing 
DFSOutputStream. Contributed by Lin Yiqun.

(cherry picked from commit 352d299cf8ebe330d24117df98d1e6a64ae38c26)
(cherry picked from commit fe0009a2bd17e26f9e9364ec3f772e9a3f138de8)


Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/7f43eb95
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/7f43eb95
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/7f43eb95

Branch: refs/heads/branch-2.7
Commit: 7f43eb9547fb0470b77df26eeea411dc2ab81644
Parents: e768f8b
Author: Akira Ajisaka <aajis...@apache.org>
Authored: Tue Mar 8 10:43:17 2016 +0900
Committer: Akira Ajisaka <aajis...@apache.org>
Committed: Tue Mar 8 11:15:27 2016 +0900

----------------------------------------------------------------------
 hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt                  | 3 +++
 .../main/java/org/apache/hadoop/hdfs/DFSOutputStream.java    | 8 ++++++--
 2 files changed, 9 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hadoop/blob/7f43eb95/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
----------------------------------------------------------------------
diff --git a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt 
b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
index 9878c90..7842890 100644
--- a/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
+++ b/hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt
@@ -138,6 +138,9 @@ Release 2.7.3 - UNRELEASED
     HDFS-9865. TestBlockReplacement fails intermittently in trunk
     (Lin Yiqun via iwasakims)
 
+    HDFS-9812. Streamer threads leak if failure happens when closing
+    DFSOutputStream. (Lin Yiqun via aajisaka)
+
 Release 2.7.2 - 2016-01-25
 
   INCOMPATIBLE CHANGES

http://git-wip-us.apache.org/repos/asf/hadoop/blob/7f43eb95/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSOutputStream.java
----------------------------------------------------------------------
diff --git 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSOutputStream.java
 
b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSOutputStream.java
index b8de7c4..ebeaacb 100755
--- 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSOutputStream.java
+++ 
b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSOutputStream.java
@@ -2262,7 +2262,6 @@ public class DFSOutputStream extends FSOutputSummer
       flushInternal();             // flush all data to Datanodes
       // get last block before destroying the streamer
       ExtendedBlock lastBlock = streamer.getBlock();
-      closeThreads(false);
       TraceScope scope = Trace.startSpan("completeFile", Sampler.NEVER);
       try {
         completeFile(lastBlock);
@@ -2271,7 +2270,12 @@ public class DFSOutputStream extends FSOutputSummer
       }
     } catch (ClosedChannelException e) {
     } finally {
-      setClosed();
+      // Failures may happen when flushing data.
+      // Streamers may keep waiting for the new block information.
+      // Thus need to force closing these threads.
+      // Don't need to call setClosed() because closeThreads(true)
+      // calls setClosed() in the finally block.
+      closeThreads(true);
     }
   }
 

Reply via email to