diff --git a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.java b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.java index 8764ff0..6dc33b4 100644 --- a/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.java +++ b/hbase-procedure/src/main/java/org/apache/hadoop/hbase/procedure2/store/wal/WALProcedureStore.java @@ -499,6 +499,18 @@ public class WALProcedureStore extends ProcedureStoreBase { return syncException.get() != null; } + protected void periodicRoll() throws IOException { + long logId; + boolean removeOldLogs; + synchronized (storeTracker) { + logId = flushLogId; + removeOldLogs = storeTracker.isEmpty(); + } + if (checkAndTryRoll() && removeOldLogs) { + removeAllLogs(logId); + } + } + private void syncLoop() throws Throwable { inSync.set(false); lock.lock(); @@ -516,8 +528,8 @@ public class WALProcedureStore extends ProcedureStoreBase { waitCond.await(getMillisToNextPeriodicRoll(), TimeUnit.MILLISECONDS); if (slotIndex == 0) { - // no data.. probably a stop() - checkAndTryRoll(); + // no data.. probably a stop() or a periodic roll + periodicRoll(); continue; } } diff --git a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.java b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.java index 19396aa..5bd3d97 100644 --- a/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.java +++ b/hbase-procedure/src/test/java/org/apache/hadoop/hbase/procedure2/store/wal/TestWALProcedureStore.java @@ -97,6 +97,15 @@ public class TestWALProcedureStore { } @Test + public void testEmptyRoll() throws Exception { + for (int i = 0; i < 10; ++i) { + procStore.periodicRoll(); + } + FileStatus[] status = fs.listStatus(logDir); + assertEquals(1, status.length); + } + + @Test public void testEmptyLogLoad() throws Exception { LoadCounter loader = new LoadCounter(); storeRestart(loader);