saintstack commented on a change in pull request #762: HBASE-23157 WAL
unflushed seqId tracking may wrong when Durability.AS…
URL: https://github.com/apache/hbase/pull/762#discussion_r362702196
##########
File path:
hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/wal/SequenceIdAccounting.java
##########
@@ -356,9 +356,36 @@ Long startCacheFlush(final byte[] encodedRegionName,
final Map<byte[], Long> fam
return lowestUnflushedInRegion;
}
- void completeCacheFlush(final byte[] encodedRegionName) {
+ void completeCacheFlush(byte[] encodedRegionName, long maxFlushedSeqId) {
+ // This is a simple hack to avoid maxFlushedSeqId go backwards.
+ // The system works fine normally, but if we make use of
Durability.ASYNC_WAL and we are going
+ // to flush all the stores, the maxFlushedSeqId will be next seq id of the
region, but we may
+ // still have some unsynced WAL entries in the ringbuffer after we call
startCacheFlush, and
+ // then it will be recorded as the lowestUnflushedSeqId by the above
update method, which is
+ // less than the current maxFlushedSeqId. And if next time we only flush
the family with this
+ // unusual lowestUnflushedSeqId, the maxFlushedSeqId will go backwards.
+ // This is an unexpected behavior so we should fix it, otherwise it may
cause unexpected
Review comment:
... maybe a slight hiccup for the async wal case -- maybe, given sync'ing to
HDFS is such an erratic affair -- but we will also be more 'correct' having
pushed out all in the ring buffer ahead of this flush sync w/o having to
rewrite their sequenceid.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services