[ 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)