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

Zheng Hu edited comment on HBASE-18066 at 5/18/17 12:18 PM:
------------------------------------------------------------

[~timoha], Thanks for your report.   Gist code your provided almost always 
tested failed (for better testing, I upload a unit test), and after the check,  
I think the problem is:  the HRegion.getClosestRowBefore() method search the 
closest existed rowKey without mvcc readpoint , but search the value by a scan 
with the current mvcc readpoint & rowKey found in the previous step. So if 
SplitRegion procedure put a Mutation into hbase:meta table,  we may get the 
closest rowKey but return a NONE KeyValue by a Get with closestRowBefore true , 
because we can not see the key-value in MVCC. 


was (Author: openinx):
[~timoha], Thanks for your report.   Gist code your provided almost always 
tested failed (for better testing, I upload a unit test), and after the check,  
I think the problem is:  the HRegion.getClosestRowBefore() method search the 
closest existed rowKey without mvcc readpoint , but search the value by a scan 
with the current mvcc readpoint & rowKey found in the previous step. So if 
SplitRegion procedure put a Mutation into hbase:meta table,  we may get the 
closest rowKey but return a NONE KeyValue by a Get with closestRowBefore true. 

> Get with closest_row_before on "hbase:meta" can return empty Cell during 
> region merge/split
> -------------------------------------------------------------------------------------------
>
>                 Key: HBASE-18066
>                 URL: https://issues.apache.org/jira/browse/HBASE-18066
>             Project: HBase
>          Issue Type: Bug
>          Components: hbase, regionserver
>    Affects Versions: 1.3.1
>         Environment: Linux (16.04.2), MacOS 10.11.6.
> Standalone and distributed HBase setup.
>            Reporter: Andrey Elenskiy
>         Attachments: TestGetWithClosestRowBeforeWhenSplit.java
>
>
> During region split/merge there's a brief period of time where doing a "Get" 
> with "closest_row_before=true" on "hbase:meta" may return empty 
> "GetResponse.result.cell" field even though parent, splitA and splitB regions 
> are all in "hbase:meta". Both gohbase (https://github.com/tsuna/gohbase) and 
> AsyncHBase (https://github.com/OpenTSDB/asynchbase) interprets this as 
> "TableDoesNotExist", which is returned to the client.
> Here's a gist that reproduces this problem: 
> https://gist.github.com/Timoha/c7a236b768be9220e85e53e1ca53bf96. Note that 
> you have to use older HTable client (I used 1.2.4) as current versions ignore 
> `Get.setClosestRowBefore(bool)` option.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to