Index: src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java (revision 1463815) +++ src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java (working copy) @@ -224,15 +224,22 @@ short rowLength = Bytes.toShort(bytes, offset, Bytes.SIZEOF_SHORT); offset += Bytes.SIZEOF_SHORT; - int ret = this.rowComparator.compareRows(row, this.rowOffset, this.rowLength, - bytes, offset, rowLength); - if (ret <= -1) { - return MatchCode.DONE; - } else if (ret >= 1) { - // could optimize this, if necessary? - // Could also be called SEEK_TO_CURRENT_ROW, but this - // should be rare/never happens. - return MatchCode.SEEK_NEXT_ROW; + if (this.row == null) { + this.row = bytes; + this.rowOffset = offset; + this.rowLength = rowLength; + } else { + int ret = this.rowComparator.compareRows(this.row, this.rowOffset, this.rowLength, + bytes, offset, rowLength); + if (ret <= -1) { + reset(); + return MatchCode.DONE; + } else if (ret >= 1) { + // could optimize this, if necessary? + // Could also be called SEEK_TO_CURRENT_ROW, but this + // should be rare/never happens. + return MatchCode.SEEK_NEXT_ROW; + } } // optimize case. @@ -383,20 +390,10 @@ } } - /** - * Set current row - * @param row - */ - public void setRow(byte [] row, int offset, short length) { - this.row = row; - this.rowOffset = offset; - this.rowLength = length; - reset(); - } - public void reset() { this.deletes.reset(); this.columns.reset(); + this.row = null; stickyNextRow = false; } Index: src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java =================================================================== --- src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java (revision 1463815) +++ src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java (working copy) @@ -338,15 +338,6 @@ return false; } - // only call setRow if the row changes; avoids confusing the query matcher - // if scanning intra-row - byte[] row = peeked.getBuffer(); - int offset = peeked.getRowOffset(); - short length = peeked.getRowLength(); - if ((matcher.row == null) || !Bytes.equals(row, offset, length, matcher.row, matcher.rowOffset, matcher.rowLength)) { - matcher.setRow(row, offset, length); - } - KeyValue kv; KeyValue prevKV = null; @@ -529,7 +520,6 @@ short length = kv.getRowLength(); if ((matcher.row == null) || !Bytes.equals(row, offset, length, matcher.row, matcher.rowOffset, matcher.rowLength)) { matcher.reset(); - matcher.setRow(row, offset, length); } } Index: src/test/java/org/apache/hadoop/hbase/regionserver/TestQueryMatcher.java =================================================================== --- src/test/java/org/apache/hadoop/hbase/regionserver/TestQueryMatcher.java (revision 1463815) +++ src/test/java/org/apache/hadoop/hbase/regionserver/TestQueryMatcher.java (working copy) @@ -113,8 +113,6 @@ memstore.add(new KeyValue(row2, fam1, col1, data)); List actual = new ArrayList(); - KeyValue k = memstore.get(0); - qm.setRow(k.getBuffer(), k.getRowOffset(), k.getRowLength()); for (KeyValue kv : memstore){ actual.add(qm.match(kv)); @@ -159,9 +157,6 @@ List actual = new ArrayList(); - KeyValue k = memstore.get(0); - qm.setRow(k.getBuffer(), k.getRowOffset(), k.getRowLength()); - for(KeyValue kv : memstore) { actual.add(qm.match(kv)); } @@ -212,9 +207,6 @@ new KeyValue(row2, fam1, col1, now-10, data) }; - KeyValue k = kvs[0]; - qm.setRow(k.getBuffer(), k.getRowOffset(), k.getRowLength()); - List actual = new ArrayList(kvs.length); for (KeyValue kv : kvs) { actual.add( qm.match(kv) ); @@ -265,8 +257,6 @@ new KeyValue(row1, fam2, col5, now-10000, data), new KeyValue(row2, fam1, col1, now-10, data) }; - KeyValue k = kvs[0]; - qm.setRow(k.getBuffer(), k.getRowOffset(), k.getRowLength()); List actual = new ArrayList(kvs.length);