[ 
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)

Reply via email to