Details
-
Sub-task
-
Status: Closed
-
Major
-
Resolution: Fixed
-
None
-
None
-
Reviewed
Description
HBASE-14832 is not enough to handle this. Doing the remaining needed here.
if (cell instanceof ByteBufferedCell) { 890 out.writeShort(rowLen); 891 ByteBufferUtils.copyBufferToStream(out, ((ByteBufferedCell) cell).getRowByteBuffer(), 892 ((ByteBufferedCell) cell).getRowPosition(), rowLen); 893 out.writeByte(fLen); 894 ByteBufferUtils.copyBufferToStream(out, ((ByteBufferedCell) cell).getFamilyByteBuffer(), 895 ((ByteBufferedCell) cell).getFamilyPosition(), fLen); 896 ByteBufferUtils.copyBufferToStream(out, ((ByteBufferedCell) cell).getQualifierByteBuffer(), 897 ((ByteBufferedCell) cell).getQualifierPosition(), qLen);
We have done this but it is not really helping us!
In ByteBufferUtils#copyBufferToStream
public static void copyBufferToStream(OutputStream out, ByteBuffer in, int offset, int length) throws IOException { if (in.hasArray()) { out.write(in.array(), in.arrayOffset() + offset, length); } else { for (int i = 0; i < length; ++i) { out.write(toByte(in, offset + i)); } } }
So for DBB it is so costly op writing byte by byte reading each to on heap.
Even if we use writeByteBuffer(OutputStream out, ByteBuffer b, int offset, int length), it won't help us as the underlying stream is a ByteArrayOutputStream and so we will end up in copying.
Attachments
Attachments
Issue Links
- is related to
-
HBASE-14832 Ensure write paths work with ByteBufferedCells in case of compaction
- Closed