You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ra...@apache.org on 2015/09/29 13:10:43 UTC

hbase git commit: HBASE-14398 - Create the fake keys required in the scan path to avoid copy to byte[] (Ram)

Repository: hbase
Updated Branches:
  refs/heads/master 2ea70c7e6 -> d5768d4a5


HBASE-14398 - Create the fake keys required in the scan path to avoid copy
to byte[] (Ram)


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/d5768d4a
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/d5768d4a
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/d5768d4a

Branch: refs/heads/master
Commit: d5768d4a50d276cc56a069793e3ba9da2a3277e6
Parents: 2ea70c7
Author: ramkrishna <ra...@gmail.com>
Authored: Tue Sep 29 16:39:57 2015 +0530
Committer: ramkrishna <ra...@gmail.com>
Committed: Tue Sep 29 16:39:57 2015 +0530

----------------------------------------------------------------------
 .../java/org/apache/hadoop/hbase/CellUtil.java  | 173 +++++++++++++++++--
 1 file changed, 161 insertions(+), 12 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/d5768d4a/hbase-common/src/main/java/org/apache/hadoop/hbase/CellUtil.java
----------------------------------------------------------------------
diff --git a/hbase-common/src/main/java/org/apache/hadoop/hbase/CellUtil.java b/hbase-common/src/main/java/org/apache/hadoop/hbase/CellUtil.java
index d2d5fe2..bbd670f 100644
--- a/hbase-common/src/main/java/org/apache/hadoop/hbase/CellUtil.java
+++ b/hbase-common/src/main/java/org/apache/hadoop/hbase/CellUtil.java
@@ -1238,7 +1238,8 @@ public final class CellUtil {
   public static Cell createFirstOnRowCol(final Cell cell) {
     if (cell instanceof ByteBufferedCell) {
       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).getQualifierPositionInByteBuffer(), cell.getQualifierLength());
     }
@@ -1268,6 +1269,13 @@ public final class CellUtil {
    * @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) {
+    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(),
         cell.getRowLength(), cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength(),
         qArray, qoffest, qlength);
@@ -1282,6 +1290,15 @@ public final class CellUtil {
    * @param 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(),
         cell.getRowLength(), cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength(),
         cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength(), ts);
@@ -1294,6 +1311,10 @@ public final class CellUtil {
    * @return Last possible Cell on passed Cell's row.
    */
   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());
   }
 
@@ -1306,6 +1327,14 @@ public final class CellUtil {
    * @return Last possible Cell on passed Cell's rk:cf:q.
    */
   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(),
         cell.getFamilyArray(), cell.getFamilyOffset(), cell.getFamilyLength(),
         cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength());
@@ -1627,42 +1656,92 @@ 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
   private static class FirstOnRowColByteBufferedCell extends FirstOnRowByteBufferedCell {
+    private final ByteBuffer famBuff;
+    private final int famOffset;
+    private final byte famLength;
     private final ByteBuffer colBuff;
     private final int colOffset;
     private final int colLength;
 
     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);
+      this.famBuff = famBuff;
+      this.famOffset = famOffset;
+      this.famLength = famLength;
       this.colBuff = col;
       this.colOffset = colOffset;
       this.colLength = colLength;
     }
 
     @Override
-    public ByteBuffer getQualifierByteBuffer() {
-      return this.colBuff;
+    public ByteBuffer getFamilyByteBuffer() {
+      return this.famBuff;
     }
 
     @Override
-    public int getQualifierPositionInByteBuffer() {
-      return this.colOffset;
+    public int getFamilyPositionInByteBuffer() {
+      return this.famOffset;
     }
 
     @Override
-    public int getQualifierLength() {
-      return this.colLength;
+    public byte getFamilyLength() {
+      return famLength;
     }
 
     @Override
-    public long getTimestamp() {
-      return HConstants.LATEST_TIMESTAMP;
+    public ByteBuffer getQualifierByteBuffer() {
+      return this.colBuff;
     }
 
     @Override
-    public byte getTypeByte() {
-      return Type.Maximum.getCode();
+    public int getQualifierPositionInByteBuffer() {
+      return this.colOffset;
+    }
+
+    @Override
+    public int getQualifierLength() {
+      return this.colLength;
     }
   }
 
@@ -1735,6 +1814,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
   private static class LastOnRowCell extends EmptyCell {
     private final byte[] rowArray;
     private final int roffset;
@@ -1824,6 +1921,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
   private static class FirstOnRowDeleteFamilyCell extends EmptyCell {
     private final byte[] row;
     private final byte[] fam;