HBASE-14398 - Create the fake keys required in the scan path to avoid copy
to byte[] (Ram)
This commit is contained in:
parent
2ea70c7e6c
commit
d5768d4a50
|
@ -1239,6 +1239,7 @@ public final class CellUtil {
|
||||||
if (cell instanceof ByteBufferedCell) {
|
if (cell instanceof ByteBufferedCell) {
|
||||||
return new FirstOnRowColByteBufferedCell(((ByteBufferedCell) cell).getRowByteBuffer(),
|
return new FirstOnRowColByteBufferedCell(((ByteBufferedCell) cell).getRowByteBuffer(),
|
||||||
((ByteBufferedCell) cell).getRowPositionInByteBuffer(), cell.getRowLength(),
|
((ByteBufferedCell) cell).getRowPositionInByteBuffer(), cell.getRowLength(),
|
||||||
|
HConstants.EMPTY_BYTE_BUFFER, 0, (byte) 0,
|
||||||
((ByteBufferedCell) cell).getQualifierByteBuffer(),
|
((ByteBufferedCell) cell).getQualifierByteBuffer(),
|
||||||
((ByteBufferedCell) cell).getQualifierPositionInByteBuffer(), cell.getQualifierLength());
|
((ByteBufferedCell) cell).getQualifierPositionInByteBuffer(), cell.getQualifierLength());
|
||||||
}
|
}
|
||||||
|
@ -1268,6 +1269,13 @@ public final class CellUtil {
|
||||||
* @return Last possible Cell on passed Cell's rk:cf and passed qualifier.
|
* @return Last possible Cell on passed Cell's rk:cf and passed qualifier.
|
||||||
*/
|
*/
|
||||||
public static Cell createFirstOnRowCol(final Cell cell, byte[] qArray, int qoffest, int qlength) {
|
public static Cell createFirstOnRowCol(final Cell cell, byte[] qArray, int qoffest, int qlength) {
|
||||||
|
if(cell instanceof ByteBufferedCell) {
|
||||||
|
return new FirstOnRowColByteBufferedCell(((ByteBufferedCell) cell).getRowByteBuffer(),
|
||||||
|
((ByteBufferedCell) cell).getRowPositionInByteBuffer(), cell.getRowLength(),
|
||||||
|
((ByteBufferedCell) cell).getFamilyByteBuffer(),
|
||||||
|
((ByteBufferedCell) cell).getFamilyPositionInByteBuffer(), cell.getFamilyLength(),
|
||||||
|
ByteBuffer.wrap(qArray), qoffest, qlength);
|
||||||
|
}
|
||||||
return new FirstOnRowColCell(cell.getRowArray(), cell.getRowOffset(),
|
return new FirstOnRowColCell(cell.getRowArray(), cell.getRowOffset(),
|
||||||
cell.getRowLength(), cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength(),
|
cell.getRowLength(), cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength(),
|
||||||
qArray, qoffest, qlength);
|
qArray, qoffest, qlength);
|
||||||
|
@ -1282,6 +1290,15 @@ public final class CellUtil {
|
||||||
* @param ts
|
* @param ts
|
||||||
*/
|
*/
|
||||||
public static Cell createFirstOnRowColTS(Cell cell, long ts) {
|
public static Cell createFirstOnRowColTS(Cell cell, long ts) {
|
||||||
|
if(cell instanceof ByteBufferedCell) {
|
||||||
|
return new FirstOnRowColTSByteBufferedCell(((ByteBufferedCell) cell).getRowByteBuffer(),
|
||||||
|
((ByteBufferedCell) cell).getRowPositionInByteBuffer(), cell.getRowLength(),
|
||||||
|
((ByteBufferedCell) cell).getFamilyByteBuffer(),
|
||||||
|
((ByteBufferedCell) cell).getFamilyPositionInByteBuffer(), cell.getFamilyLength(),
|
||||||
|
((ByteBufferedCell) cell).getQualifierByteBuffer(),
|
||||||
|
((ByteBufferedCell) cell).getQualifierPositionInByteBuffer(), cell.getQualifierLength(),
|
||||||
|
ts);
|
||||||
|
}
|
||||||
return new FirstOnRowColTSCell(cell.getRowArray(), cell.getRowOffset(),
|
return new FirstOnRowColTSCell(cell.getRowArray(), cell.getRowOffset(),
|
||||||
cell.getRowLength(), cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength(),
|
cell.getRowLength(), cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength(),
|
||||||
cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength(), ts);
|
cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength(), ts);
|
||||||
|
@ -1294,6 +1311,10 @@ public final class CellUtil {
|
||||||
* @return Last possible Cell on passed Cell's row.
|
* @return Last possible Cell on passed Cell's row.
|
||||||
*/
|
*/
|
||||||
public static Cell createLastOnRow(final Cell cell) {
|
public static Cell createLastOnRow(final Cell cell) {
|
||||||
|
if (cell instanceof ByteBufferedCell) {
|
||||||
|
return new LastOnRowByteBufferedCell(((ByteBufferedCell) cell).getRowByteBuffer(),
|
||||||
|
((ByteBufferedCell) cell).getRowPositionInByteBuffer(), cell.getRowLength());
|
||||||
|
}
|
||||||
return new LastOnRowCell(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength());
|
return new LastOnRowCell(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1306,6 +1327,14 @@ public final class CellUtil {
|
||||||
* @return Last possible Cell on passed Cell's rk:cf:q.
|
* @return Last possible Cell on passed Cell's rk:cf:q.
|
||||||
*/
|
*/
|
||||||
public static Cell createLastOnRowCol(final Cell cell) {
|
public static Cell createLastOnRowCol(final Cell cell) {
|
||||||
|
if (cell instanceof ByteBufferedCell) {
|
||||||
|
return new LastOnRowColByteBufferedCell(((ByteBufferedCell) cell).getRowByteBuffer(),
|
||||||
|
((ByteBufferedCell) cell).getRowPositionInByteBuffer(), cell.getRowLength(),
|
||||||
|
((ByteBufferedCell) cell).getFamilyByteBuffer(),
|
||||||
|
((ByteBufferedCell) cell).getFamilyPositionInByteBuffer(), cell.getFamilyLength(),
|
||||||
|
((ByteBufferedCell) cell).getQualifierByteBuffer(),
|
||||||
|
((ByteBufferedCell) cell).getQualifierPositionInByteBuffer(), cell.getQualifierLength());
|
||||||
|
}
|
||||||
return new LastOnRowColCell(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength(),
|
return new LastOnRowColCell(cell.getRowArray(), cell.getRowOffset(), cell.getRowLength(),
|
||||||
cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength(),
|
cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength(),
|
||||||
cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength());
|
cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength());
|
||||||
|
@ -1626,20 +1655,80 @@ public final class CellUtil {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@InterfaceAudience.Private
|
||||||
|
private static class LastOnRowByteBufferedCell extends EmptyByteBufferedCell {
|
||||||
|
private final ByteBuffer rowBuff;
|
||||||
|
private final int roffset;
|
||||||
|
private final short rlength;
|
||||||
|
|
||||||
|
public LastOnRowByteBufferedCell(final ByteBuffer row, int roffset, short rlength) {
|
||||||
|
this.rowBuff = row;
|
||||||
|
this.roffset = roffset;
|
||||||
|
this.rlength = rlength;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ByteBuffer getRowByteBuffer() {
|
||||||
|
return this.rowBuff;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getRowPositionInByteBuffer() {
|
||||||
|
return this.roffset;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public short getRowLength() {
|
||||||
|
return this.rlength;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getTimestamp() {
|
||||||
|
return HConstants.OLDEST_TIMESTAMP;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public byte getTypeByte() {
|
||||||
|
return Type.Minimum.getCode();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@InterfaceAudience.Private
|
@InterfaceAudience.Private
|
||||||
private static class FirstOnRowColByteBufferedCell extends FirstOnRowByteBufferedCell {
|
private static class FirstOnRowColByteBufferedCell extends FirstOnRowByteBufferedCell {
|
||||||
|
private final ByteBuffer famBuff;
|
||||||
|
private final int famOffset;
|
||||||
|
private final byte famLength;
|
||||||
private final ByteBuffer colBuff;
|
private final ByteBuffer colBuff;
|
||||||
private final int colOffset;
|
private final int colOffset;
|
||||||
private final int colLength;
|
private final int colLength;
|
||||||
|
|
||||||
public FirstOnRowColByteBufferedCell(final ByteBuffer row, int roffset, short rlength,
|
public FirstOnRowColByteBufferedCell(final ByteBuffer row, int roffset, short rlength,
|
||||||
final ByteBuffer col, final int colOffset, final int colLength) {
|
final ByteBuffer famBuff, final int famOffset, final byte famLength, final ByteBuffer col,
|
||||||
|
final int colOffset, final int colLength) {
|
||||||
super(row, roffset, rlength);
|
super(row, roffset, rlength);
|
||||||
|
this.famBuff = famBuff;
|
||||||
|
this.famOffset = famOffset;
|
||||||
|
this.famLength = famLength;
|
||||||
this.colBuff = col;
|
this.colBuff = col;
|
||||||
this.colOffset = colOffset;
|
this.colOffset = colOffset;
|
||||||
this.colLength = colLength;
|
this.colLength = colLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ByteBuffer getFamilyByteBuffer() {
|
||||||
|
return this.famBuff;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getFamilyPositionInByteBuffer() {
|
||||||
|
return this.famOffset;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public byte getFamilyLength() {
|
||||||
|
return famLength;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ByteBuffer getQualifierByteBuffer() {
|
public ByteBuffer getQualifierByteBuffer() {
|
||||||
return this.colBuff;
|
return this.colBuff;
|
||||||
|
@ -1654,16 +1743,6 @@ public final class CellUtil {
|
||||||
public int getQualifierLength() {
|
public int getQualifierLength() {
|
||||||
return this.colLength;
|
return this.colLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public long getTimestamp() {
|
|
||||||
return HConstants.LATEST_TIMESTAMP;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public byte getTypeByte() {
|
|
||||||
return Type.Maximum.getCode();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@InterfaceAudience.Private
|
@InterfaceAudience.Private
|
||||||
|
@ -1734,6 +1813,24 @@ public final class CellUtil {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@InterfaceAudience.Private
|
||||||
|
private static class FirstOnRowColTSByteBufferedCell extends FirstOnRowColByteBufferedCell {
|
||||||
|
|
||||||
|
private long ts;
|
||||||
|
|
||||||
|
public FirstOnRowColTSByteBufferedCell(ByteBuffer rBuffer, int roffset, short rlength,
|
||||||
|
ByteBuffer fBuffer, int foffset, byte flength, ByteBuffer qBuffer, int qoffset, int qlength,
|
||||||
|
long ts) {
|
||||||
|
super(rBuffer, roffset, rlength, fBuffer, foffset, flength, qBuffer, qoffset, qlength);
|
||||||
|
this.ts = ts;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getTimestamp() {
|
||||||
|
return this.ts;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@InterfaceAudience.Private
|
@InterfaceAudience.Private
|
||||||
private static class LastOnRowCell extends EmptyCell {
|
private static class LastOnRowCell extends EmptyCell {
|
||||||
private final byte[] rowArray;
|
private final byte[] rowArray;
|
||||||
|
@ -1823,6 +1920,58 @@ public final class CellUtil {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@InterfaceAudience.Private
|
||||||
|
private static class LastOnRowColByteBufferedCell extends LastOnRowByteBufferedCell {
|
||||||
|
private final ByteBuffer fBuffer;
|
||||||
|
private final int foffset;
|
||||||
|
private final byte flength;
|
||||||
|
private final ByteBuffer qBuffer;
|
||||||
|
private final int qoffset;
|
||||||
|
private final int qlength;
|
||||||
|
|
||||||
|
public LastOnRowColByteBufferedCell(ByteBuffer rBuffer, int roffset, short rlength,
|
||||||
|
ByteBuffer fBuffer, int foffset, byte flength, ByteBuffer qBuffer, int qoffset,
|
||||||
|
int qlength) {
|
||||||
|
super(rBuffer, roffset, rlength);
|
||||||
|
this.fBuffer = fBuffer;
|
||||||
|
this.foffset = foffset;
|
||||||
|
this.flength = flength;
|
||||||
|
this.qBuffer = qBuffer;
|
||||||
|
this.qoffset = qoffset;
|
||||||
|
this.qlength = qlength;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ByteBuffer getFamilyByteBuffer() {
|
||||||
|
return this.fBuffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getFamilyPositionInByteBuffer() {
|
||||||
|
return this.foffset;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public byte getFamilyLength() {
|
||||||
|
return this.flength;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ByteBuffer getQualifierByteBuffer() {
|
||||||
|
return this.qBuffer;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getQualifierPositionInByteBuffer() {
|
||||||
|
return this.qoffset;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getQualifierLength() {
|
||||||
|
return this.qlength;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@InterfaceAudience.Private
|
@InterfaceAudience.Private
|
||||||
private static class FirstOnRowDeleteFamilyCell extends EmptyCell {
|
private static class FirstOnRowDeleteFamilyCell extends EmptyCell {
|
||||||
private final byte[] row;
|
private final byte[] row;
|
||||||
|
|
Loading…
Reference in New Issue