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 88e59c6d4b16..bd464f236a36 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 @@ -393,6 +393,8 @@ protected void doReplaceWriter(Path oldPath, Path newPath, Writer nextWriter) th inflightWALClosures.remove(oldPath.getName()); if (!isUnflushedEntries()) { markClosedAndClean(oldPath); + } else { + LOG.debug("WAL has unflushed entries path: " + oldPath); } } } else { diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestFSHLog.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestFSHLog.java index ec2231b3f98b..ce237a31264c 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestFSHLog.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/wal/TestFSHLog.java @@ -324,7 +324,7 @@ public void run() { /** * Test for jira https://issues.apache.org/jira/browse/HBASE-28665 */ - public void testWALClosureFailureAndCleanup() throws IOException { + public void testWALClosureFailureAndCleanup() throws IOException, InterruptedException { class FailingWriter implements WALProvider.Writer { @Override @@ -375,12 +375,15 @@ public void close() throws IOException { region.put(new Put(b).addColumn(b, b, b)); log.rollWriter(); } - assertEquals(2, log.getClosedErrorCount()); region.put(new Put(b).addColumn(b, b, b)); region.put(new Put(b).addColumn(b, b, b)); - region.flush(true); + log.highestUnsyncedTxid = log.highestSyncedTxid.get() + 100; + assertTrue("WAL has unflushed entries ", log.getUnflushedEntriesCount() > 0); log.rollWriter(); - assertEquals("WAL Files not cleaned ", 0, log.walFile2Props.size()); + assertEquals("WAL Files not cleaned ", 3, log.walFile2Props.size()); + region.flush(true); + log.markClosedAndClean(log.walFile2Props.firstKey()); + assertEquals("WAL Files not cleaned ", 1, log.walFile2Props.size()); region.close(); } }