.../hadoop/hbase/io/hfile/HFileReaderImpl.java | 32 ++++++++++++++++++---- 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.java index 5af72b6..5d9993f 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.java @@ -927,7 +927,7 @@ public class HFileReaderImpl implements HFile.Reader, Configurable { // TODO : reduce the varieties of KV here. Check if based on a boolean // we can handle the 'no tags' case. if (currTagsLen > 0) { - if (this.curBlock.getMemoryType() == MemoryType.SHARED) { + if (this.curBlock.usesSharedMemory()) { ret = new ShareableMemoryKeyValue(blockBuffer.array(), blockBuffer.arrayOffset() + blockBuffer.position(), getCellBufSize(), seqId); } else { @@ -935,7 +935,7 @@ public class HFileReaderImpl implements HFile.Reader, Configurable { + blockBuffer.position(), cellBufSize, seqId); } } else { - if (this.curBlock.getMemoryType() == MemoryType.SHARED) { + if (this.curBlock.usesSharedMemory()) { ret = new ShareableMemoryNoTagsKeyValue(blockBuffer.array(), blockBuffer.arrayOffset() + blockBuffer.position(), getCellBufSize(), seqId); } else { @@ -945,11 +945,31 @@ public class HFileReaderImpl implements HFile.Reader, Configurable { } } else { ByteBuffer buf = blockBuffer.asSubByteBuffer(cellBufSize); - if (this.curBlock.getMemoryType() == MemoryType.SHARED) { - ret = new ShareableMemoryOffheapKeyValue(buf, buf.position(), cellBufSize, - currTagsLen > 0, seqId); + if (buf.isDirect()) { + if (this.curBlock.usesSharedMemory()) { + ret = new ShareableMemoryOffheapKeyValue(buf, buf.position(), cellBufSize, + currTagsLen > 0, seqId); + } else { + ret = new OffheapKeyValue(buf, buf.position(), cellBufSize, currTagsLen > 0, seqId); + } } else { - ret = new OffheapKeyValue(buf, buf.position(), cellBufSize, currTagsLen > 0, seqId); + if (this.curBlock.usesSharedMemory()) { + if (currTagsLen > 0) { + ret = new ShareableMemoryKeyValue(buf.array(), buf.arrayOffset() + buf.position(), + cellBufSize, seqId); + } else { + ret = new ShareableMemoryNoTagsKeyValue(buf.array(), + buf.arrayOffset() + buf.position(), cellBufSize, seqId); + } + } else { + if (currTagsLen > 0) { + ret = new SizeCachedKeyValue(buf.array(), buf.arrayOffset() + buf.position(), + cellBufSize, seqId); + } else { + ret = new SizeCachedNoTagsKeyValue(buf.array(), buf.arrayOffset() + buf.position(), + cellBufSize, seqId); + } + } } } return ret;