[ 
https://issues.apache.org/jira/browse/HBASE-16994?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15630352#comment-15630352
 ] 

Enis Soztutar commented on HBASE-16994:
---------------------------------------

In master, we acquire the region updates lock as a write lock before we call 
{{wal.startCacheFlush()}}. Unlike branch-1 code, we hold the region's update 
lock as a read lock for the whole duration of the batch mutation
{code}
      // STEP 7. Release row locks, etc.
      if (locked) {
        this.updatesLock.readLock().unlock();
        locked = false;
      }
{code}
which should make sure that there is no ongoing append or on flight transaction 
going on by the time we are able to acquire the write lock for flush. 

> Region report a last flushed sequence id that is less than the previous last 
> flushed sequence id 
> -------------------------------------------------------------------------------------------------
>
>                 Key: HBASE-16994
>                 URL: https://issues.apache.org/jira/browse/HBASE-16994
>             Project: HBase
>          Issue Type: Bug
>            Reporter: binlijin
>         Attachments: HBASE-16994_master_v1.patch, HBASE-16994_master_v2.patch
>
>
> Since append will be published to RingBuffer and handled asynchronously, it's 
> possible that one append (say append-X) of the region handled by 
> RingBufferEventHandler between startCacheFlush and getNextSequenceId, and 
> reset FSHLog#oldestUnflushedStoreSequenceIds which we just cleared in 
> #startCacheFlush. This might disturb ServerManager#flushedSequenceIdByRegion 
> like shown below (assume region-A has two CF: cfA and cfB)
>    
> 1. flush-A runs to startCacheFlush and it will flush both cfA and cfB, 
> oldestUnflushedStoreSequenceIds of regionA got cleared
>  2. append-X on cfB handled by RingBufferEventHandler, 
> oldestUnflushedStoreSequenceIds set to 10, for example
>  3. flush-A runs to getNextSequenceId and returned 11
>  4. ServerManager#flushedSequenceIdByRegion for regionA set to 11
>  5. flush-A finishes
>  6. flush-B starts and only flush cfA, getNextSequenceId returned 10, and 
> flushedSeqId will return 9, and cause warning in ServerManager
> Since this append-X will also got flushed, we should clear the 
> oldestUnflushedStoreSequenceIds again to make sure we won't disturb
>  ServerManager#flushedSequenceIdByRegion.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to