[ 
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)

Reply via email to