You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by te...@apache.org on 2013/04/03 06:33:44 UTC

svn commit: r1463821 - /hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLogSplitter.java

Author: tedyu
Date: Wed Apr  3 04:33:44 2013
New Revision: 1463821

URL: http://svn.apache.org/r1463821
Log:
HBASE-8246 Backport HBASE-6318 to 0.94 where SplitLogWorker exits due to ConcurrentModificationException


Modified:
    hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLogSplitter.java

Modified: hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLogSplitter.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLogSplitter.java?rev=1463821&r1=1463820&r2=1463821&view=diff
==============================================================================
--- hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLogSplitter.java (original)
+++ hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLogSplitter.java Wed Apr  3 04:33:44 2013
@@ -1223,18 +1223,36 @@ public class HLogSplitter {
         if (thrown == null) {
           thrown = Lists.newArrayList();
         }
-        for (WriterAndPath wap : logWriters.values()) {
-          try {
-            wap.w.close();
-          } catch (IOException ioe) {
-            LOG.error("Couldn't close log at " + wap.p, ioe);
-            thrown.add(ioe);
-            continue;
+        try {
+          for (WriterThread t : writerThreads) {
+            while (t.isAlive()) {
+              t.shouldStop = true;
+              t.interrupt();
+              try {
+                t.join(10);
+              } catch (InterruptedException e) {
+                IOException iie = new InterruptedIOException();
+                iie.initCause(e);
+                throw iie;
+              }
+            }
           }
-          LOG.info("Closed path " + wap.p + " (wrote " + wap.editsWritten
-              + " edits in " + (wap.nanosSpent / 1000 / 1000) + "ms)");
+        } finally {
+          synchronized (logWriters) {
+            for (WriterAndPath wap : logWriters.values()) {
+              try {
+                wap.w.close();
+              } catch (IOException ioe) {
+                LOG.error("Couldn't close log at " + wap.p, ioe);
+                thrown.add(ioe);
+                continue;
+              }
+              LOG.info("Closed path " + wap.p + " (wrote " + wap.editsWritten
+                  + " edits in " + (wap.nanosSpent / 1000 / 1000) + "ms)");
+            }
+          }
+          logWritersClosed = true;
         }
-        logWritersClosed = true;
       }
       return thrown;
     }