[ https://issues.apache.org/jira/browse/HBASE-6520?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Zhihong Ted Yu updated HBASE-6520: ---------------------------------- Summary: MSLab May cause the Bytes.toLong not work correctly for increment (was: MSLab May cause the Bytes.toLong does not work correctly for increment) > MSLab May cause the Bytes.toLong 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 > Fix For: 0.96.0 > > Attachments: HBASE-6520-trunk-v1.patch > > > 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