Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 8F423200C5B for ; Wed, 5 Apr 2017 07:01:45 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 836D0160BA1; Wed, 5 Apr 2017 05:01:45 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id C876D160B90 for ; Wed, 5 Apr 2017 07:01:44 +0200 (CEST) Received: (qmail 97175 invoked by uid 500); 5 Apr 2017 05:01:43 -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 97161 invoked by uid 99); 5 Apr 2017 05:01:43 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd2-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 05 Apr 2017 05:01:43 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd2-us-west.apache.org (ASF Mail Server at spamd2-us-west.apache.org) with ESMTP id 391B41AF911 for ; Wed, 5 Apr 2017 05:01:43 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd2-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -99.202 X-Spam-Level: X-Spam-Status: No, score=-99.202 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, RP_MATCHES_RCVD=-0.001, SPF_PASS=-0.001, USER_IN_WHITELIST=-100] autolearn=disabled Received: from mx1-lw-us.apache.org ([10.40.0.8]) by localhost (spamd2-us-west.apache.org [10.40.0.9]) (amavisd-new, port 10024) with ESMTP id sPTPDemBc-PW for ; Wed, 5 Apr 2017 05:01:42 +0000 (UTC) Received: from mailrelay1-us-west.apache.org (mailrelay1-us-west.apache.org [209.188.14.139]) by mx1-lw-us.apache.org (ASF Mail Server at mx1-lw-us.apache.org) with ESMTP id 4BB7A5FBA4 for ; Wed, 5 Apr 2017 05:01:42 +0000 (UTC) Received: from jira-lw-us.apache.org (unknown [207.244.88.139]) by mailrelay1-us-west.apache.org (ASF Mail Server at mailrelay1-us-west.apache.org) with ESMTP id CF8CCE04AB for ; Wed, 5 Apr 2017 05:01:41 +0000 (UTC) Received: from jira-lw-us.apache.org (localhost [127.0.0.1]) by jira-lw-us.apache.org (ASF Mail Server at jira-lw-us.apache.org) with ESMTP id 89C9024017 for ; Wed, 5 Apr 2017 05:01:41 +0000 (UTC) Date: Wed, 5 Apr 2017 05:01:41 +0000 (UTC) From: "Anoop Sam John (JIRA)" To: issues@hbase.apache.org Message-ID: In-Reply-To: References: Subject: [jira] [Commented] (HBASE-17872) Make BBU#copyFromBufferToBuffer thread-safe MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 archived-at: Wed, 05 Apr 2017 05:01:45 -0000 [ https://issues.apache.org/jira/browse/HBASE-17872?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15956304#comment-15956304 ] Anoop Sam John commented on HBASE-17872: ---------------------------------------- Yes. We should not make the pos of any of the BBs affected by the ops in BBUtils.. Unsafe way is ok as all are relative reads/writes. When unsafe is not availble, we should take the path of BB.duplicate() if we need to change the position so that the original BBs are unaffected wrt pos or limit. Nice find.. All such cases u can unify. Will see once u attach patch.. Thanks so much. > Make BBU#copyFromBufferToBuffer thread-safe > ------------------------------------------- > > Key: HBASE-17872 > URL: https://issues.apache.org/jira/browse/HBASE-17872 > Project: HBase > Issue Type: Bug > Reporter: Chia-Ping Tsai > Assignee: Chia-Ping Tsai > Priority: Critical > Fix For: 2.0.0 > > > A case is shown below. > We will get the wrong position of buffer in multithreaded environment, so the method makes the invalid cell in MSLAB. > {noformat} > public static int copyFromBufferToBuffer(ByteBuffer in, ByteBuffer out, int sourceOffset, > int destinationOffset, int length) { > if (in.hasArray() && out.hasArray()) { > // ... > } else if (UNSAFE_AVAIL) { > // ... > } else { > int outOldPos = out.position(); > out.position(destinationOffset); > ByteBuffer inDup = in.duplicate(); > inDup.position(sourceOffset).limit(sourceOffset + length); > out.put(inDup); > out.position(outOldPos); > } > return destinationOffset + length; > } > {noformat} -- This message was sent by Atlassian JIRA (v6.3.15#6346)