From c8ea82299c945e25e4fc4674d4310dc32a02eaa5 Mon Sep 17 00:00:00 2001 From: zhangduo Date: Wed, 30 Nov 2016 21:41:29 +0800 Subject: [PATCH] HBASE-17206 FSHLog may roll a new writer successfully with unflushed entries --- .../hadoop/hbase/regionserver/wal/FSHLog.java | 20 ++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/FSHLog.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/FSHLog.java index c92996b39b3..5fd79126746 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/FSHLog.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/FSHLog.java @@ -1654,6 +1654,12 @@ public class FSHLog implements WAL { */ private volatile CountDownLatch safePointReleasedLatch = new CountDownLatch(1); + private void checkIfSyncFailed(SyncFuture syncFuture) throws FailedSyncBeforeLogCloseException { + if (syncFuture.isThrowable()) { + throw new FailedSyncBeforeLogCloseException(syncFuture.getThrowable()); + } + } + /** * For Thread A to call when it is ready to wait on the 'safe point' to be attained. * Thread A will be held in here until Thread B calls {@link #safePointAttained()} @@ -1664,16 +1670,12 @@ public class FSHLog implements WAL { * @return The passed syncFuture * @throws FailedSyncBeforeLogCloseException */ - SyncFuture waitSafePoint(final SyncFuture syncFuture) - throws InterruptedException, FailedSyncBeforeLogCloseException { - while (true) { - if (this.safePointAttainedLatch.await(1, TimeUnit.MILLISECONDS)) { - break; - } - if (syncFuture.isThrowable()) { - throw new FailedSyncBeforeLogCloseException(syncFuture.getThrowable()); - } + SyncFuture waitSafePoint(SyncFuture syncFuture) throws InterruptedException, + FailedSyncBeforeLogCloseException { + while (!this.safePointAttainedLatch.await(1, TimeUnit.MILLISECONDS)) { + checkIfSyncFailed(syncFuture); } + checkIfSyncFailed(syncFuture); return syncFuture; }