hbase-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jeffrey Zhong (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HBASE-11099) Two situations where we could open a region with smaller sequence number
Date Wed, 30 Apr 2014 17:18:16 GMT

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

Jeffrey Zhong commented on HBASE-11099:
---------------------------------------

[~mantonov] Please go ahead. Thanks.

[~saint.ack@gmail.com] 
{quote}
There are no writes coming in when I take the snapshot but there may be edits queued in the
ring buffer that have yet to take a seqid? These edits may be in the snapshot so could be
included in the hfile but because we took the flushSeqId before they finished?
{quote}
Yes, your understanding is same as mine. The major issue is that it breaks our sequence id
monotonically increase assumption which likely cause some unexpected issues.  


> Two situations where we could open a region with smaller sequence number
> ------------------------------------------------------------------------
>
>                 Key: HBASE-11099
>                 URL: https://issues.apache.org/jira/browse/HBASE-11099
>             Project: HBase
>          Issue Type: Bug
>          Components: regionserver
>    Affects Versions: 0.99.0
>            Reporter: Jeffrey Zhong
>             Fix For: 0.99.0
>
>
> Recently I happened to run into code where we potentially could open region with smaller
sequence number:
> 1) Inside function: HRegion#internalFlushcache. This is due to we change the way WAL
Sync where we use late binding(assign sequence number right before wal sync).
> The flushSeqId may less than the change sequence number included in the flush which may
cause later region opening code to use a smaller than expected sequence number when we reopen
the region.
> {code}
> flushSeqId = this.sequenceId.incrementAndGet();
> ...
> mvcc.waitForRead(w);
> {code}
> 2) HRegion#replayRecoveredEdits where we have following code:
> {code}
> ...
>           if (coprocessorHost != null) {
>             status.setStatus("Running pre-WAL-restore hook in coprocessors");
>             if (coprocessorHost.preWALRestore(this.getRegionInfo(), key, val)) {
>               // if bypass this log entry, ignore it ...
>               continue;
>             }
>           }
> ...
>           currentEditSeqId = key.getLogSeqNum();
> {code} 
> If coprocessor skip some tail WALEdits, then the function will return smaller currentEditSeqId.
In the end, a region may also open with a smaller sequence number. This may cause data loss
because Master may record a larger flushed sequence Id and some WALEdits maybe skipped during
recovery if the region fail again.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Mime
View raw message