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 2014/04/24 07:24:49 UTC

svn commit: r1589590 - /hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java

Author: ramkrishna
Date: Thu Apr 24 05:24:49 2014
New Revision: 1589590

URL: http://svn.apache.org/r1589590
Log:
HBASE-10929 - Addendum that extracts out qualifierOffset, qualifierLength and timestamp

Modified:
    hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java

Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java?rev=1589590&r1=1589589&r2=1589590&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java Thu Apr 24 05:24:49 2014
@@ -278,10 +278,13 @@ public class ScanQueryMatcher {
       return MatchCode.SEEK_NEXT_ROW;
     }
 
+    int qualifierOffset = cell.getQualifierOffset();
+    int qualifierLength = cell.getQualifierLength();
+    long timestamp = cell.getTimestamp();
     // check for early out based on timestamp alone
-    if (columns.isDone(cell.getTimestamp())) {
-      return columns.getNextRowOrNextColumn(cell.getQualifierArray(), cell.getQualifierOffset(),
-          cell.getQualifierLength());
+    if (columns.isDone(timestamp)) {
+      return columns.getNextRowOrNextColumn(cell.getQualifierArray(), qualifierOffset,
+          qualifierLength);
     }
 
     /*
@@ -297,6 +300,8 @@ public class ScanQueryMatcher {
      * 7. Delete marker need to be version counted together with puts
      *    they affect
      */
+    byte typeByte = cell.getTypeByte();
+    long mvccVersion = cell.getMvccVersion();
     if (CellUtil.isDelete(cell)) {
       if (!keepDeletedCells) {
         // first ignore delete markers if the scanner can do so, and the
@@ -306,22 +311,22 @@ public class ScanQueryMatcher {
         // than the readpoint of any open scanner, this prevents deleted
         // rows that could still be seen by a scanner from being collected
         boolean includeDeleteMarker = seePastDeleteMarkers ?
-            tr.withinTimeRange(cell.getTimestamp()) :
-            tr.withinOrAfterTimeRange(cell.getTimestamp());
+            tr.withinTimeRange(timestamp) :
+            tr.withinOrAfterTimeRange(timestamp);
         if (includeDeleteMarker
-            && cell.getMvccVersion() <= maxReadPointToTrackVersions) {
-          this.deletes.add(cell.getQualifierArray(), cell.getQualifierOffset(),
-              cell.getQualifierLength(), cell.getTimestamp(), cell.getTypeByte());
+            && mvccVersion <= maxReadPointToTrackVersions) {
+          this.deletes.add(cell.getQualifierArray(), qualifierOffset,
+              qualifierLength, timestamp, typeByte);
         }
         // Can't early out now, because DelFam come before any other keys
       }
      
       if ((!isUserScan)
           && timeToPurgeDeletes > 0
-          && (EnvironmentEdgeManager.currentTimeMillis() - cell.getTimestamp()) 
+          && (EnvironmentEdgeManager.currentTimeMillis() - timestamp) 
             <= timeToPurgeDeletes) {
         return MatchCode.INCLUDE;
-      } else if (retainDeletesInOutput || cell.getMvccVersion() > maxReadPointToTrackVersions) {
+      } else if (retainDeletesInOutput || mvccVersion > maxReadPointToTrackVersions) {
         // always include or it is not time yet to check whether it is OK
         // to purge deltes or not
         if (!isUserScan) {
@@ -330,11 +335,11 @@ public class ScanQueryMatcher {
           return MatchCode.INCLUDE;
         }
       } else if (keepDeletedCells) {
-        if (cell.getTimestamp() < earliestPutTs) {
+        if (timestamp < earliestPutTs) {
           // keeping delete rows, but there are no puts older than
           // this delete in the store files.
           return columns.getNextRowOrNextColumn(cell.getQualifierArray(),
-              cell.getQualifierOffset(), cell.getQualifierLength());
+              qualifierOffset, qualifierLength);
         }
         // else: fall through and do version counting on the
         // delete markers
@@ -345,12 +350,12 @@ public class ScanQueryMatcher {
       // delete marker are not subject to other delete markers
     } else if (!this.deletes.isEmpty()) {
       DeleteResult deleteResult = deletes.isDeleted(cell.getQualifierArray(),
-          cell.getQualifierOffset(), cell.getQualifierLength(), cell.getTimestamp());
+          qualifierOffset, qualifierLength, timestamp);
       switch (deleteResult) {
         case FAMILY_DELETED:
         case COLUMN_DELETED:
           return columns.getNextRowOrNextColumn(cell.getQualifierArray(),
-              cell.getQualifierOffset(), cell.getQualifierLength());
+              qualifierOffset, qualifierLength);
         case VERSION_DELETED:
         case FAMILY_VERSION_DELETED:
           return MatchCode.SKIP;
@@ -361,17 +366,17 @@ public class ScanQueryMatcher {
         }
     }
 
-    int timestampComparison = tr.compare(cell.getTimestamp());
+    int timestampComparison = tr.compare(timestamp);
     if (timestampComparison >= 1) {
       return MatchCode.SKIP;
     } else if (timestampComparison <= -1) {
-      return columns.getNextRowOrNextColumn(cell.getQualifierArray(), cell.getQualifierOffset(),
-          cell.getQualifierLength());
+      return columns.getNextRowOrNextColumn(cell.getQualifierArray(), qualifierOffset,
+          qualifierLength);
     }
 
     // STEP 1: Check if the column is part of the requested columns
     MatchCode colChecker = columns.checkColumn(cell.getQualifierArray(), 
-        cell.getQualifierOffset(), cell.getQualifierLength(), cell.getTypeByte());
+        qualifierOffset, qualifierLength, typeByte);
     if (colChecker == MatchCode.INCLUDE) {
       ReturnCode filterResponse = ReturnCode.SKIP;
       // STEP 2: Yes, the column is part of the requested columns. Check if filter is present
@@ -383,7 +388,7 @@ public class ScanQueryMatcher {
           return MatchCode.SKIP;
         case NEXT_COL:
           return columns.getNextRowOrNextColumn(cell.getQualifierArray(), 
-              cell.getQualifierOffset(), cell.getQualifierLength());
+              qualifierOffset, qualifierLength);
         case NEXT_ROW:
           stickyNextRow = true;
           return MatchCode.SEEK_NEXT_ROW;
@@ -414,9 +419,9 @@ public class ScanQueryMatcher {
        * FilterResponse (INCLUDE_AND_SEEK_NEXT_COL) and ColumnChecker(INCLUDE)
        */
       colChecker =
-          columns.checkVersions(cell.getQualifierArray(), cell.getQualifierOffset(),
-              cell.getQualifierLength(), cell.getTimestamp(), cell.getTypeByte(),
-            cell.getMvccVersion() > maxReadPointToTrackVersions);
+          columns.checkVersions(cell.getQualifierArray(), qualifierOffset,
+              qualifierLength, timestamp, typeByte,
+            mvccVersion > maxReadPointToTrackVersions);
       //Optimize with stickyNextRow
       stickyNextRow = colChecker == MatchCode.INCLUDE_AND_SEEK_NEXT_ROW ? true : stickyNextRow;
       return (filterResponse == ReturnCode.INCLUDE_AND_NEXT_COL &&