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

Duo Zhang commented on HBASE-20182:
-----------------------------------

Let me try to describe it more clearly...

First the table has two regions
[-infinite,  1), [1, + infinite)

And then I split the second one, it becomes
[-infinite, 1), [1, 2), [2, +infinite)

And then I merge the first two regions, it becomes
[-infinite, 2), [2, +infinite)

So when I want to locate row 1 in the table, it should return the first region 
above right? But the meta table is like this

table,,...
table,1,..., offline=true, split=true
table,2,...

See? The record for the old [1, +infinite) region is still there, with offline 
= true and split = true. So if I want to locate row 1 then it will always 
locate to the offlined region and throw an exception...

Is this clear enough?

Thanks.



> Can not locate region after split and merge
> -------------------------------------------
>
>                 Key: HBASE-20182
>                 URL: https://issues.apache.org/jira/browse/HBASE-20182
>             Project: HBase
>          Issue Type: Bug
>          Components: Region Assignment
>            Reporter: Duo Zhang
>            Priority: Blocker
>             Fix For: 2.0.0
>
>         Attachments: HBASE-20182-UT.patch
>
>
> When implementing serial replication feature in HBASE-20046, I found that 
> when splitting a region, we will not remove the parent region, instead we 
> will mark it offline.
> And when locating a region, we will only scan one row so if we locate to the 
> offlined region then we are dead.
> This will not happen for splitting, since one of the new daughter regions 
> have the same start row with the parent region, and the timestamp is greater 
> so when doing reverse scan we will always hit the daughter first.
> But if we also consider merge then bad things happen. Consider we have two 
> regions A and B, we split B to C and D, and then merge A and C to E, then 
> ideally the regions should be E and D, but actually the regions in meta will 
> be E, B and D, and they all have different start rows. If you use a row 
> within the range of old region C, then we will always locate to B and throw 
> exception.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to