hbase-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "stack (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HBASE-12431) Use of getColumnLatestCell(byte[], int, int, byte[], int, int) is Not Thread Safe
Date Thu, 06 Nov 2014 00:21:34 GMT

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

Mime
View raw message