stack commented on HBASE-20182:

Sorry for late review.

How comes we drop these checks?


    if (!info.getTable().equals(tableName)) {
      complete(tableName, req, null, new TableNotFoundException(
          "Table '" + tableName + "' was not found, got: '" + info.getTable() + 
    if (info.isSplit()) {
      complete(tableName, req, null,
        new RegionOfflineException(
            "the only available region for the required row is a split parent," 
              " the daughters should be online soon: '" + 
info.getRegionNameAsString() + "'"));


... and isOffline

The scan now has stop row. Does that explain why we no longer need the 
tablename check?

I like the refactor testing per next.

What is thinking on below....


We might end up scanning more than 5 rows... that'd be ok?

Looks like it was a tough one to debug.

Nice test.

> 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
>            Assignee: Duo Zhang
>            Priority: Blocker
>             Fix For: 2.0.0
>         Attachments: HBASE-20182-UT.patch, HBASE-20182-v1.patch, 
> HBASE-20182-v2.patch, HBASE-20182-v3.patch, HBASE-20182-v3.patch, 
> HBASE-20182-v3.patch, HBASE-20182.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

Reply via email to