[ https://issues.apache.org/jira/browse/HBASE-12431?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14199440#comment-14199440 ]
stack commented on HBASE-12431: ------------------------------- Here is the commit that added it: {code} HBASE-5625 Avoid byte buffer allocations when reading a value from a … …Result object (Tudor Scurtu) git-svn-id: https://svn.apache.org/repos/asf/hbase/trunk@1333159 13f79535-47bb-0310-9956-ffa450edef68 master hbase-0.96.1RC1 … 0.94.0mvnrelease commit d032ea818beb7578e75e7c286cc58d6e8aad3449 1 parent 00cfc8f Zhihong Yu authored on May 2, 2012 {code} Should have doc on what its about. Thread-local sounds like way to go since purging it looks like it'd be a perf regression. > Use of getColumnLatestCell(byte[], int, int, byte[], int, int) is Not Thread > Safe > --------------------------------------------------------------------------------- > > Key: HBASE-12431 > URL: https://issues.apache.org/jira/browse/HBASE-12431 > Project: HBase > Issue Type: Bug > Components: Client > Affects Versions: 0.98.1 > Reporter: Jonathan Jarvis > > Result declares that it is NOT THREAD SAFE at the top of the source code, but > one would assume that refers to many different threads accessing the same > Result object. I've run into an issue when I have several different threads > accessing their own Result object that runs into an issue because of use of > common static member variable. > I noticed the problem when I switched from: > getColumnLatestCell(byte[], byte[]) to > getColumnLatestCell(byte[], int, int, byte[], int, int) > These methods call different binarySearch methods, the latter invoking: > protected int binarySearch(final Cell [] kvs, > 309 final byte [] family, final int foffset, final int flength, > 310 final byte [] qualifier, final int qoffset, final int qlength) { > This method utilizes a private static member variable called "buffer" > If more than one thread is utilizing "buffer" you'll see unpredictable > behavior unless you synchronize(Result.class) {}. > If buffer is to remain a static variable, I would recommend changing it to a > ThreadLocal<byte[]> instead. -- This message was sent by Atlassian JIRA (v6.3.4#6332)