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;
}