You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by jx...@apache.org on 2012/07/19 02:00:41 UTC
svn commit: r1363180 -
/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLog.java
Author: jxiang
Date: Thu Jul 19 00:00:40 2012
New Revision: 1363180
URL: http://svn.apache.org/viewvc?rev=1363180&view=rev
Log:
HBASE-6420 Gracefully shutdown logsyncer
Modified:
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLog.java
Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLog.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLog.java?rev=1363180&r1=1363179&r2=1363180&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLog.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/HLog.java Thu Jul 19 00:00:40 2012
@@ -41,6 +41,7 @@ import java.util.TreeSet;
import java.util.UUID;
import java.util.concurrent.ConcurrentSkipListMap;
import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.locks.Lock;
@@ -984,7 +985,6 @@ public class HLog implements Syncable {
*/
public void close() throws IOException {
try {
- logSyncerThread.interrupt();
logSyncerThread.close();
// Make sure we synced everything
logSyncerThread.join(this.optionalFlushInterval*2);
@@ -1197,8 +1197,8 @@ public class HLog implements Syncable {
class LogSyncer extends HasThread {
private final long optionalFlushInterval;
-
- private boolean closeLogSyncer = false;
+
+ private AtomicBoolean closeLogSyncer = new AtomicBoolean(false);
// List of pending writes to the HLog. There corresponds to transactions
// that have not yet returned to the client. We keep them cached here
@@ -1217,11 +1217,13 @@ public class HLog implements Syncable {
try {
// awaiting with a timeout doesn't always
// throw exceptions on interrupt
- while(!this.isInterrupted() && !closeLogSyncer) {
+ while(!this.isInterrupted() && !closeLogSyncer.get()) {
try {
if (unflushedEntries.get() <= syncedTillHere) {
- Thread.sleep(this.optionalFlushInterval);
+ synchronized (closeLogSyncer) {
+ closeLogSyncer.wait(this.optionalFlushInterval);
+ }
}
sync();
} catch (IOException e) {
@@ -1260,9 +1262,12 @@ public class HLog implements Syncable {
writer.append(e);
}
}
-
- void close(){
- closeLogSyncer = true;
+
+ void close() {
+ synchronized (closeLogSyncer) {
+ closeLogSyncer.set(true);
+ closeLogSyncer.notifyAll();
+ }
}
}