HBASE-21590 Optimize trySkipToNextColumn in StoreScanner a bit.

(cherry picked from commit 11193d7cc1)
This commit is contained in:
Lars Hofhansl 2018-12-13 11:56:39 -08:00 committed by Sean Busbey
parent 12dfc8bafd
commit 5c7c425e34
1 changed files with 10 additions and 2 deletions

View File

@ -808,12 +808,16 @@ public class StoreScanner extends NonReversedNonLazyKeyValueScanner
@VisibleForTesting @VisibleForTesting
protected boolean trySkipToNextRow(Cell cell) throws IOException { protected boolean trySkipToNextRow(Cell cell) throws IOException {
Cell nextCell = null; Cell nextCell = null;
// used to guard against a changed next indexed key by doing a identity comparison
// when the identity changes we need to compare the bytes again
Cell previousIndexedKey = null;
do { do {
Cell nextIndexedKey = getNextIndexedKey(); Cell nextIndexedKey = getNextIndexedKey();
if (nextIndexedKey != null && nextIndexedKey != KeyValueScanner.NO_NEXT_INDEXED_KEY if (nextIndexedKey != null && nextIndexedKey != KeyValueScanner.NO_NEXT_INDEXED_KEY
&& matcher.compareKeyForNextRow(nextIndexedKey, cell) >= 0) { && (nextIndexedKey == previousIndexedKey || matcher.compareKeyForNextRow(nextIndexedKey, cell) >= 0)) {
this.heap.next(); this.heap.next();
++kvsScanned; ++kvsScanned;
previousIndexedKey = nextIndexedKey;
} else { } else {
return false; return false;
} }
@ -829,12 +833,16 @@ public class StoreScanner extends NonReversedNonLazyKeyValueScanner
@VisibleForTesting @VisibleForTesting
protected boolean trySkipToNextColumn(Cell cell) throws IOException { protected boolean trySkipToNextColumn(Cell cell) throws IOException {
Cell nextCell = null; Cell nextCell = null;
// used to guard against a changed next indexed key by doing a identity comparison
// when the identity changes we need to compare the bytes again
Cell previousIndexedKey = null;
do { do {
Cell nextIndexedKey = getNextIndexedKey(); Cell nextIndexedKey = getNextIndexedKey();
if (nextIndexedKey != null && nextIndexedKey != KeyValueScanner.NO_NEXT_INDEXED_KEY if (nextIndexedKey != null && nextIndexedKey != KeyValueScanner.NO_NEXT_INDEXED_KEY
&& matcher.compareKeyForNextColumn(nextIndexedKey, cell) >= 0) { && (nextIndexedKey == previousIndexedKey || matcher.compareKeyForNextColumn(nextIndexedKey, cell) >= 0)) {
this.heap.next(); this.heap.next();
++kvsScanned; ++kvsScanned;
previousIndexedKey = nextIndexedKey;
} else { } else {
return false; return false;
} }