@InterfaceAudience.Private public class StoreScanner extends NonReversedNonLazyKeyValueScanner implements KeyValueScanner, InternalScanner, ChangedReadersObserver
Modifier and Type | Class and Description |
---|---|
(package private) static class |
StoreScanner.StoreScannerCompactionRace |
Modifier and Type | Field and Description |
---|---|
protected boolean |
cacheBlocks |
protected long |
cellsPerHeartbeatCheck |
protected boolean |
closing |
protected NavigableSet<byte[]> |
columns |
protected long |
countPerRow |
static long |
DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK
Default value of
HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK . |
protected ExecutorService |
executor |
protected boolean |
explicitColumnQuery |
protected boolean |
get |
static String |
HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK
The number of cells scanned in between timeout checks.
|
protected KeyValueHeap |
heap |
private long |
kvsScanned
The number of KVs seen by the scanner.
|
protected Cell |
lastTop |
(package private) static boolean |
LAZY_SEEK_ENABLED_BY_DEFAULT
We don't ever expect to change this, the constant is just for clarity.
|
protected static boolean |
lazySeekEnabledGlobally
Used during unit testing to ensure that lazy seek does save seek ops
|
protected ReentrantLock |
lock |
private static org.apache.commons.logging.Log |
LOG |
protected ScanQueryMatcher |
matcher |
protected long |
maxRowSize |
protected int |
minVersions |
protected long |
now |
protected long |
oldestUnexpiredTS |
protected boolean |
parallelSeekEnabled
A flag that enables StoreFileScanner parallel-seeking
|
private Cell |
prevCell |
private long |
readPt |
protected Scan |
scan |
private boolean |
scanUsePread |
protected Store |
store |
protected int |
storeLimit |
protected int |
storeOffset |
static String |
STORESCANNER_PARALLEL_SEEK_ENABLE |
protected boolean |
useRowColBloom |
NO_NEXT_INDEXED_KEY
Modifier | Constructor and Description |
---|---|
(package private) |
StoreScanner(Scan scan,
ScanInfo scanInfo,
ScanType scanType,
NavigableSet<byte[]> columns,
List<KeyValueScanner> scanners) |
(package private) |
StoreScanner(Scan scan,
ScanInfo scanInfo,
ScanType scanType,
NavigableSet<byte[]> columns,
List<KeyValueScanner> scanners,
long earliestPutTs) |
private |
StoreScanner(Scan scan,
ScanInfo scanInfo,
ScanType scanType,
NavigableSet<byte[]> columns,
List<KeyValueScanner> scanners,
long earliestPutTs,
long readPt) |
|
StoreScanner(Store store,
ScanInfo scanInfo,
Scan scan,
List<? extends KeyValueScanner> scanners,
long smallestReadPoint,
long earliestPutTs,
byte[] dropDeletesFromRow,
byte[] dropDeletesToRow)
Used for compactions that drop deletes from a limited range of rows.
|
|
StoreScanner(Store store,
ScanInfo scanInfo,
Scan scan,
List<? extends KeyValueScanner> scanners,
ScanType scanType,
long smallestReadPoint,
long earliestPutTs)
Used for compactions.
|
private |
StoreScanner(Store store,
ScanInfo scanInfo,
Scan scan,
List<? extends KeyValueScanner> scanners,
ScanType scanType,
long smallestReadPoint,
long earliestPutTs,
byte[] dropDeletesFromRow,
byte[] dropDeletesToRow) |
|
StoreScanner(Store store,
ScanInfo scanInfo,
Scan scan,
NavigableSet<byte[]> columns,
long readPt)
Opens a scanner across memstore, snapshot, and all StoreFiles.
|
protected |
StoreScanner(Store store,
Scan scan,
ScanInfo scanInfo,
NavigableSet<byte[]> columns,
long readPt,
boolean cacheBlocks)
An internal constructor.
|
Modifier and Type | Method and Description |
---|---|
protected boolean |
checkReseek() |
protected void |
checkScanOrder(Cell prevKV,
Cell kv,
KeyValue.KVComparator comparator)
Check whether scan as expected order
|
void |
close()
Close the KeyValue scanner.
|
(package private) static void |
enableLazySeekGlobally(boolean enable) |
(package private) List<KeyValueScanner> |
getAllScannersForTesting()
Used in testing.
|
long |
getEstimatedNumberOfKvsScanned() |
Cell |
getNextIndexedKey() |
protected List<KeyValueScanner> |
getScannersNoCompaction()
Get a filtered list of scanners.
|
long |
getSequenceID()
Get the sequence id associated with this KeyValueScanner.
|
KeyValue |
next()
Return the next Cell in this scanner, iterating the scanner
|
boolean |
next(List<Cell> outResult)
Grab the next row's worth of values.
|
boolean |
next(List<Cell> outResult,
ScannerContext scannerContext)
Get the next row of values from this Store.
|
private ScanQueryMatcher.MatchCode |
optimize(ScanQueryMatcher.MatchCode qcode,
Cell cell) |
private void |
parallelSeek(List<? extends KeyValueScanner> scanners,
Cell kv)
Seek storefiles in parallel to optimize IO latency as much as possible
|
Cell |
peek()
Look at the next Cell in this scanner, but do not iterate scanner.
|
boolean |
reseek(Cell kv)
Reseek the scanner at or after the specified KeyValue.
|
protected void |
resetKVHeap(List<? extends KeyValueScanner> scanners,
KeyValue.KVComparator comparator) |
protected void |
resetScannerStack(Cell lastTopKey) |
boolean |
seek(Cell key)
Seek the scanner at or after the specified KeyValue.
|
protected boolean |
seekAsDirection(Cell kv)
Do a reseek in a normal StoreScanner(scan forward)
|
protected void |
seekScanners(List<? extends KeyValueScanner> scanners,
Cell seekKey,
boolean isLazy,
boolean isParallelSeek)
Seek the specified scanners with the given key
|
protected boolean |
seekToNextRow(Cell kv) |
protected List<KeyValueScanner> |
selectScannersFrom(List<? extends KeyValueScanner> allScanners)
Filters the given list of scanners using Bloom filter, time range, and
TTL.
|
void |
updateReaders()
Notify observers.
|
backwardSeek, seekToLastRow, seekToPreviousRow
doRealSeek, enforceSeek, isFileScanner, realSeekDone, requestSeek, shouldUseScanner
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
backwardSeek, enforceSeek, isFileScanner, realSeekDone, requestSeek, seekToLastRow, seekToPreviousRow, shouldUseScanner
private static final org.apache.commons.logging.Log LOG
protected final Store store
protected ScanQueryMatcher matcher
protected KeyValueHeap heap
protected boolean cacheBlocks
protected long countPerRow
protected int storeLimit
protected int storeOffset
protected boolean closing
protected final boolean get
protected final boolean explicitColumnQuery
protected final boolean useRowColBloom
protected boolean parallelSeekEnabled
protected ExecutorService executor
protected final Scan scan
protected final NavigableSet<byte[]> columns
protected final long oldestUnexpiredTS
protected final long now
protected final int minVersions
protected final long maxRowSize
protected final long cellsPerHeartbeatCheck
private long kvsScanned
private Cell prevCell
static final boolean LAZY_SEEK_ENABLED_BY_DEFAULT
public static final String STORESCANNER_PARALLEL_SEEK_ENABLE
protected static boolean lazySeekEnabledGlobally
public static final String HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK
public static final long DEFAULT_HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK
HBASE_CELLS_SCANNED_PER_HEARTBEAT_CHECK
.protected Cell lastTop
private boolean scanUsePread
protected ReentrantLock lock
private final long readPt
protected StoreScanner(Store store, Scan scan, ScanInfo scanInfo, NavigableSet<byte[]> columns, long readPt, boolean cacheBlocks)
public StoreScanner(Store store, ScanInfo scanInfo, Scan scan, NavigableSet<byte[]> columns, long readPt) throws IOException
store
- who we scanscan
- the speccolumns
- which columns we are scanningIOException
public StoreScanner(Store store, ScanInfo scanInfo, Scan scan, List<? extends KeyValueScanner> scanners, ScanType scanType, long smallestReadPoint, long earliestPutTs) throws IOException
Opens a scanner across specified StoreFiles.
store
- who we scanscan
- the specscanners
- ancillary scannerssmallestReadPoint
- the readPoint that we should use for tracking
versionsIOException
public StoreScanner(Store store, ScanInfo scanInfo, Scan scan, List<? extends KeyValueScanner> scanners, long smallestReadPoint, long earliestPutTs, byte[] dropDeletesFromRow, byte[] dropDeletesToRow) throws IOException
Opens a scanner across specified StoreFiles.
store
- who we scanscan
- the specscanners
- ancillary scannerssmallestReadPoint
- the readPoint that we should use for tracking versionsdropDeletesFromRow
- The inclusive left bound of the range; can be EMPTY_START_ROW.dropDeletesToRow
- The exclusive right bound of the range; can be EMPTY_END_ROW.IOException
private StoreScanner(Store store, ScanInfo scanInfo, Scan scan, List<? extends KeyValueScanner> scanners, ScanType scanType, long smallestReadPoint, long earliestPutTs, byte[] dropDeletesFromRow, byte[] dropDeletesToRow) throws IOException
IOException
StoreScanner(Scan scan, ScanInfo scanInfo, ScanType scanType, NavigableSet<byte[]> columns, List<KeyValueScanner> scanners) throws IOException
IOException
StoreScanner(Scan scan, ScanInfo scanInfo, ScanType scanType, NavigableSet<byte[]> columns, List<KeyValueScanner> scanners, long earliestPutTs) throws IOException
IOException
private StoreScanner(Scan scan, ScanInfo scanInfo, ScanType scanType, NavigableSet<byte[]> columns, List<KeyValueScanner> scanners, long earliestPutTs, long readPt) throws IOException
IOException
protected List<KeyValueScanner> getScannersNoCompaction() throws IOException
IOException
protected void seekScanners(List<? extends KeyValueScanner> scanners, Cell seekKey, boolean isLazy, boolean isParallelSeek) throws IOException
scanners
- seekKey
- isLazy
- true if using lazy seekisParallelSeek
- true if using parallel seekIOException
protected void resetKVHeap(List<? extends KeyValueScanner> scanners, KeyValue.KVComparator comparator) throws IOException
IOException
protected List<KeyValueScanner> selectScannersFrom(List<? extends KeyValueScanner> allScanners)
public Cell peek()
KeyValueScanner
peek
in interface KeyValueScanner
public KeyValue next()
KeyValueScanner
next
in interface KeyValueScanner
public void close()
KeyValueScanner
close
in interface Closeable
close
in interface AutoCloseable
close
in interface InternalScanner
close
in interface KeyValueScanner
public boolean seek(Cell key) throws IOException
KeyValueScanner
seek
in interface KeyValueScanner
key
- seek valueIOException
public boolean next(List<Cell> outResult) throws IOException
InternalScanner
next
in interface InternalScanner
outResult
- return output arrayIOException
- epublic boolean next(List<Cell> outResult, ScannerContext scannerContext) throws IOException
next
in interface InternalScanner
outResult
- scannerContext
- IOException
- eprivate ScanQueryMatcher.MatchCode optimize(ScanQueryMatcher.MatchCode qcode, Cell cell)
public void updateReaders() throws IOException
ChangedReadersObserver
updateReaders
in interface ChangedReadersObserver
IOException
- eprotected boolean checkReseek() throws IOException
IOException
protected void resetScannerStack(Cell lastTopKey) throws IOException
IOException
protected void checkScanOrder(Cell prevKV, Cell kv, KeyValue.KVComparator comparator) throws IOException
prevKV
- kv
- comparator
- IOException
protected boolean seekToNextRow(Cell kv) throws IOException
IOException
protected boolean seekAsDirection(Cell kv) throws IOException
kv
- IOException
public boolean reseek(Cell kv) throws IOException
KeyValueScanner
reseek
in interface KeyValueScanner
kv
- seek value (should be non-null)IOException
public long getSequenceID()
KeyValueScanner
getSequenceID
in interface KeyValueScanner
private void parallelSeek(List<? extends KeyValueScanner> scanners, Cell kv) throws IOException
scanners
- the list KeyValueScanner
s to be read fromkv
- the KeyValue on which the operation is being requestedIOException
List<KeyValueScanner> getAllScannersForTesting()
static void enableLazySeekGlobally(boolean enable)
public long getEstimatedNumberOfKvsScanned()
public Cell getNextIndexedKey()
getNextIndexedKey
in interface KeyValueScanner
getNextIndexedKey
in class NonLazyKeyValueScanner
Copyright © 2007–2019 The Apache Software Foundation. All rights reserved.