[
https://issues.apache.org/jira/browse/HBASE-15785?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Anoop Sam John updated HBASE-15785:
-----------------------------------
Description:
{code}
Lock lock = locks[i];
lock.lock();
try {
ByteBuffer bb = buffers[i];
if (i == startBuffer) {
cnt = bufferSize - startBufferOffset;
if (cnt > len) cnt = len;
ByteBuffer dup = bb.duplicate();
dup.limit(startBufferOffset + cnt).position(startBufferOffset);
mbb[j] = dup.slice();
{code}
In asSubByteBuff, we work on the duplicate BB and set limit and position on
that.. The locking is not needed here.
The locking is added because we set limit and position on the BBs in the array.
We can duplicate the BBs and do positioning and limit on them. The locking
can be fully avoided.
was:
{code}
Lock lock = locks[i];
lock.lock();
try {
ByteBuffer bb = buffers[i];
if (i == startBuffer) {
cnt = bufferSize - startBufferOffset;
if (cnt > len) cnt = len;
ByteBuffer dup = bb.duplicate();
dup.limit(startBufferOffset + cnt).position(startBufferOffset);
mbb[j] = dup.slice();
{code}
In asSubByteBuff, we work on the duplicate BB and set limit and position on
that.. The locking is not needed here.
> Unnecessary lock in ByteBufferArray
> -----------------------------------
>
> Key: HBASE-15785
> URL: https://issues.apache.org/jira/browse/HBASE-15785
> Project: HBase
> Issue Type: Sub-task
> Components: regionserver, Scanners
> Affects Versions: 2.0.0
> Reporter: Anoop Sam John
> Assignee: Anoop Sam John
> Fix For: 2.0.0
>
> Attachments: HBASE-15785.patch, HBASE-15785_V2.patch,
> HBASE-15785_V3.patch
>
>
> {code}
> Lock lock = locks[i];
> lock.lock();
> try {
> ByteBuffer bb = buffers[i];
> if (i == startBuffer) {
> cnt = bufferSize - startBufferOffset;
> if (cnt > len) cnt = len;
> ByteBuffer dup = bb.duplicate();
> dup.limit(startBufferOffset + cnt).position(startBufferOffset);
> mbb[j] = dup.slice();
> {code}
> In asSubByteBuff, we work on the duplicate BB and set limit and position on
> that.. The locking is not needed here.
> The locking is added because we set limit and position on the BBs in the
> array. We can duplicate the BBs and do positioning and limit on them. The
> locking can be fully avoided.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)