Skip to content

Commit 01c8201

Browse files
committed
HBASE-26832 Check epoch in AsyncFSWAL#syncCompleted, to avoid repeated release of flushed wal entries
1 parent a49d147 commit 01c8201

File tree

1 file changed

+16
-3
lines changed
  • hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal

1 file changed

+16
-3
lines changed

hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/AsyncFSWAL.java

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -343,12 +343,25 @@ private void syncFailed(long epochWhenSync, Throwable error) {
343343
}
344344
}
345345

346-
private void syncCompleted(AsyncWriter writer, long processedTxid, long startTimeNs) {
346+
private void syncCompleted(long epochWhenSync, AsyncWriter writer, long processedTxid,
347+
long startTimeNs) {
347348
highestSyncedTxid.set(processedTxid);
349+
boolean epochChanged = false;
350+
consumeLock.lock();
351+
try {
352+
int currentEpochAndState = epochAndState;
353+
if (epoch(currentEpochAndState) != epochWhenSync) {
354+
epochChanged = true;
355+
}
356+
} finally {
357+
consumeLock.unlock();
358+
}
348359
for (Iterator<FSWALEntry> iter = unackedAppends.iterator(); iter.hasNext();) {
349360
FSWALEntry entry = iter.next();
350361
if (entry.getTxid() <= processedTxid) {
351-
entry.release();
362+
if (!epochChanged) {
363+
entry.release();
364+
}
352365
iter.remove();
353366
} else {
354367
break;
@@ -399,7 +412,7 @@ private void sync(AsyncWriter writer) {
399412
if (error != null) {
400413
syncFailed(epoch, error);
401414
} else {
402-
syncCompleted(writer, currentHighestProcessedAppendTxid, startTimeNs);
415+
syncCompleted(epoch, writer, currentHighestProcessedAppendTxid, startTimeNs);
403416
}
404417
}, consumeExecutor);
405418
}

0 commit comments

Comments
 (0)