[
https://issues.apache.org/jira/browse/HBASE-17407?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15797653#comment-15797653
]
Eshcar Hillel commented on HBASE-17407:
---------------------------------------
Here is what I read:
{code}
void abortCacheFlush(final byte[] encodedRegionName) {
// Method is called when we are crashing down because failed write flush
AND it is called
// if we fail prepare. The below is for the fail prepare case; we restore
the old sequence ids.
..
{code}
Let me rephrase what I said as a question:
Is it possible to execute WAL truncation based on the values in
SequenceIdAccounting while a flush is on going and between startCacheFlush()
and completeCacheFlush()?
My guess would be that it cannot happen. Having a startXXX/completeXXX/abortXXX
feels much like a transaction, and therefore some mutual exclusion mechanism
should prevent other protocols accessing resources (like in
SequenceIdAccounting) while the transaction access them.
If a WAL truncation may happen in parallel with the flush then you are right
and we have a problem with flushing the tail that needs to be fixed.
However if this is the case *and* the transaction can be aborted due to various
reasons (like failed prepare) then there is an even bigger problem - danger of
data loss upon every flush.
I suspect this is not the case.
> Correct update of maxFlushedSeqId in HRegion
> --------------------------------------------
>
> Key: HBASE-17407
> URL: https://issues.apache.org/jira/browse/HBASE-17407
> Project: HBase
> Issue Type: Bug
> Reporter: Eshcar Hillel
>
> The attribute maxFlushedSeqId in HRegion is used to track the max sequence id
> in the store files and is reported to HMaster. When flushing only part of the
> memstore content this value might be incorrect and may cause data loss.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)