hbase-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Liu Shaohui (JIRA)" <j...@apache.org>
Subject [jira] [Created] (HBASE-11541) Wrong result when scaning meta with startRow
Date Fri, 18 Jul 2014 05:17:05 GMT
Liu Shaohui created HBASE-11541:
-----------------------------------

             Summary: 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


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)

Mime
View raw message