You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "stack (JIRA)" <ji...@apache.org> on 2014/07/18 19:00:09 UTC
[jira] [Commented] (HBASE-11541) Wrong result when scaning meta
with startRow
[ https://issues.apache.org/jira/browse/HBASE-11541?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14066523#comment-14066523 ]
stack commented on HBASE-11541:
-------------------------------
Hmm. I thought we were past all issues w/ our meta compare. Thanks for noticing and fixing this one. The patch looks good to me because it looks like how I thought this worked (smile). I will wait on hadoopqa. (I wonder if this compare was changed in the past?) The tests are very nice.
> Wrong result when scaning meta with startRow
> --------------------------------------------
>
> Key: HBASE-11541
> URL: https://issues.apache.org/jira/browse/HBASE-11541
> Project: HBase
> Issue Type: Bug
> Reporter: Liu Shaohui
> Assignee: Liu Shaohui
> Priority: Minor
> Attachments: HBASE-11541-trunk-v1.diff
>
>
> When we scan the meta with STARTROW optiion, wrong result may be returned.
> For exmaple: if there are two tables named "a" and "b" in hbase, when we scan the meta with startrow = 'b', the region location of table "a" will be returned but we expect to get the region location of table "b".
> {code}
> > create 'a', {NAME => 'f'}
> > create 'b', {NAME => 'f'}
> > scan '.META.', {STARTROW => 'b', LIMIT => 1}
> a,,1405655897758.f8b547476b6dc80545e6413c31396, xxxx
> {code}
> The reason is the wrong assumption in MetaKeyComparator
> See: KeyValue.java#2011
> {code}
> int leftDelimiter = getDelimiter(left, loffset, llength,
> HRegionInfo.DELIMITER);
> int rightDelimiter = getDelimiter(right, roffset, rlength,
> HRegionInfo.DELIMITER);
> if (leftDelimiter < 0 && rightDelimiter >= 0) {
> // Nothing between .META. and regionid. Its first key.
> return -1;
> } else if (rightDelimiter < 0 && leftDelimiter >= 0) {
> return 1;
> } else if (leftDelimiter < 0 && rightDelimiter < 0) {
> return 0;
> }
> {code}
> It's a little troublesome to fix this problem for given a start row which contains more than two "," for meta, it's not easy to extract the startKey of region.
> eg: STARTROW => 'aaa,bbb,ccc,xxx'.
> Comments and suggestions are welcomed. Thanks
--
This message was sent by Atlassian JIRA
(v6.2#6252)