Просмотр исходного кода

HDFS-8253. DFSStripedOutputStream.closeThreads releases cellBuffers multiple times. Contributed by Kai Sasaki

Tsz-Wo Nicholas Sze 10 лет назад
Родитель
Сommit
093907d728

+ 3 - 0
hadoop-hdfs-project/hadoop-hdfs/CHANGES-HDFS-EC-7285.txt

@@ -320,3 +320,6 @@
 
     HDFS-8567. Erasure Coding: SafeMode handles file smaller than a full stripe.
     (Walter Su via jing9)
+
+    HDFS-8253. DFSStripedOutputStream.closeThreads releases cellBuffers
+    multiple times.  (Kai Sasaki via szetszwo)

+ 15 - 12
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/DFSStripedOutputStream.java

@@ -494,21 +494,24 @@ public class DFSStripedOutputStream extends DFSOutputStream {
   @Override
   protected void closeThreads(boolean force) throws IOException {
     final MultipleIOException.Builder b = new MultipleIOException.Builder();
-    for (StripedDataStreamer streamer : streamers) {
-      try {
-        streamer.close(force);
-        streamer.join();
-        streamer.closeSocket();
-      } catch(Exception e) {
+    try {
+      for (StripedDataStreamer streamer : streamers) {
         try {
-          handleStreamerFailure("force=" + force, e);
-        } catch(IOException ioe) {
-          b.add(ioe);
+          streamer.close(force);
+          streamer.join();
+          streamer.closeSocket();
+        } catch (Exception e) {
+          try {
+            handleStreamerFailure("force=" + force, e);
+          } catch (IOException ioe) {
+            b.add(ioe);
+          }
+        } finally {
+          streamer.setSocketToNull();
         }
-      } finally {
-        streamer.setSocketToNull();
-        setClosed();
       }
+    } finally {
+      setClosed();
     }
     final IOException ioe = b.build();
     if (ioe != null) {