hbase-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Chia-Ping Tsai (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (HBASE-17872) The MSLABImpl generates the invaild cells when unsafe is not availble
Date Wed, 05 Apr 2017 12:17:41 GMT

     [ https://issues.apache.org/jira/browse/HBASE-17872?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Chia-Ping Tsai updated HBASE-17872:
-----------------------------------
    Description: 
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}

  was:
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}


> The MSLABImpl generates the invaild cells when unsafe is not availble
> ---------------------------------------------------------------------
>
>                 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
>
>
> 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)

Mime
View raw message