You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "Anoop Sam John (JIRA)" <ji...@apache.org> on 2017/04/04 10:20:41 UTC

[jira] [Commented] (HBASE-17872) Make ByteBufferUtils thread-safe

    [ https://issues.apache.org/jira/browse/HBASE-17872?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15954951#comment-15954951 ] 

Anoop Sam John commented on HBASE-17872:
----------------------------------------

ByteBufferUtils expects that the calling methods handles the multi thread possible cases.  A util method should not be handling threading things within itself. This will add lots of overhead if the callers themselves handle it and there is NO chance of util methods getting called in a multi threaded way. (I mean the buffers are with single thread only at a given time)

> Make ByteBufferUtils 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
>
> 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)