[ https://issues.apache.org/jira/browse/HBASE-12431?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14201615#comment-14201615 ]
Jingcheng Du commented on HBASE-12431: -------------------------------------- The test results are listed following. Before applying the patch loadValue(): 260087188618 getValue(): 280990331150 After applying the patch loadValue(): 262340481358 getValue(): 281435842873 In loadValue(), it shows 0.87% performance degrade. In getValue(), it shows 0.16% performance degrade. > 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 > Assignee: Jingcheng Du > Fix For: 2.0.0, 0.98.8, 0.99.2 > > Attachments: HBASE-12431-V2.diff, HBASE-12431-V3.diff, > HBASE-12431.diff > > > 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)