[ https://issues.apache.org/jira/browse/HBASE-17872?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15959990#comment-15959990 ]
Chia-Ping Tsai commented on HBASE-17872: ---------------------------------------- bq. Then it becomes how to change a static final setting at test time The issue is not that complicated. We change the UNSAFE_AVAIL/UNSAFE_UNALIGNED before starting up a mini cluster when testing, so they shouldn't be declared volatile. Please see the v3 patch. Thanks. [~anoop.hbase] [~stack] > 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 > > Attachments: HBASE-17872.v0.patch, HBASE-17872.v1.patch, > HBASE-17872.v2.patch > > > 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)