ShiXing created HBASE-6520:
------------------------------

             Summary: MSLab May cause the Bytes.toLong does not work correctly 
for increment
                 Key: HBASE-6520
                 URL: https://issues.apache.org/jira/browse/HBASE-6520
             Project: HBase
          Issue Type: Bug
            Reporter: ShiXing
            Assignee: ShiXing


When use MemStoreLAB, the KeyValues will share the byte array allocated by the 
MemStoreLAB, all the KeyValues' "bytes" attributes are the same byte array. 
When use the functions such as Bytes.toLong(byte[] bytes, int offset):
{code}
  public static long toLong(byte[] bytes, int offset) {
    return toLong(bytes, offset, SIZEOF_LONG);
  }

  public static long toLong(byte[] bytes, int offset, final int length) {
    if (length != SIZEOF_LONG || offset + length > bytes.length) {
      throw explainWrongLengthOrOffset(bytes, offset, length, SIZEOF_LONG);
    }
    long l = 0;
    for(int i = offset; i < offset + length; i++) {
      l <<= 8;
      l ^= bytes[i] & 0xFF;
    }
    return l;
  }
{code}
If we do not put a long value to the KeyValue, and read it as a long value in 
HRegion.increment(),the check 
{code}
offset + length > bytes.length
{code}
will take no effects, because the bytes.length is not equal to 
keyLength+valueLength, indeed it is MemStoreLAB chunkSize which is default 2048 
* 1024.



I will paste the patch later.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to