Return-Path: X-Original-To: apmail-hbase-issues-archive@www.apache.org Delivered-To: apmail-hbase-issues-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 8C3FE17D61 for ; Fri, 7 Nov 2014 05:24:34 +0000 (UTC) Received: (qmail 43495 invoked by uid 500); 7 Nov 2014 05:24:34 -0000 Delivered-To: apmail-hbase-issues-archive@hbase.apache.org Received: (qmail 43445 invoked by uid 500); 7 Nov 2014 05:24:34 -0000 Mailing-List: contact issues-help@hbase.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Delivered-To: mailing list issues@hbase.apache.org Received: (qmail 43432 invoked by uid 99); 7 Nov 2014 05:24:34 -0000 Received: from arcas.apache.org (HELO arcas.apache.org) (140.211.11.28) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 07 Nov 2014 05:24:34 +0000 Date: Fri, 7 Nov 2014 05:24:34 +0000 (UTC) From: "Jingcheng Du (JIRA)" To: issues@hbase.apache.org Message-ID: In-Reply-To: References: Subject: [jira] [Commented] (HBASE-12431) Use of getColumnLatestCell(byte[], int, int, byte[], int, int) is Not Thread Safe MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 [ 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 instead. -- This message was sent by Atlassian JIRA (v6.3.4#6332)