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

Reply via email to