@InterfaceAudience.LimitedPrivate(value="Coprocessor") public class StoreFileScanner extends java.lang.Object implements KeyValueScanner
Constructor and Description |
---|
StoreFileScanner(StoreFile.Reader reader,
HFileScanner hfs,
boolean useMVCC,
boolean hasMVCC,
long readPt)
Implements a
KeyValueScanner on top of the specified HFileScanner |
Modifier and Type | Method and Description |
---|---|
boolean |
backwardSeek(Cell key)
Seek the scanner at or before the row of specified Cell, it firstly
tries to seek the scanner at or after the specified Cell, return if
peek KeyValue of scanner has the same row with specified Cell,
otherwise seek the scanner at the first Cell of the row which is the
previous row of specified KeyValue
|
void |
close()
Close the KeyValue scanner.
|
void |
enforceSeek()
Does the real seek operation in case it was skipped by
seekToRowCol(KeyValue, boolean) (TODO: Whats this?).
|
Cell |
getNextIndexedKey() |
static java.util.List<StoreFileScanner> |
getScannersForStoreFiles(java.util.Collection<StoreFile> files,
boolean cacheBlocks,
boolean usePread,
boolean isCompaction,
long readPt)
Return an array of scanners corresponding to the given set of store files.
|
static java.util.List<StoreFileScanner> |
getScannersForStoreFiles(java.util.Collection<StoreFile> files,
boolean cacheBlocks,
boolean usePread,
boolean isCompaction,
ScanQueryMatcher matcher,
long readPt) |
static java.util.List<StoreFileScanner> |
getScannersForStoreFiles(java.util.Collection<StoreFile> files,
boolean cacheBlocks,
boolean usePread,
boolean isCompaction,
ScanQueryMatcher matcher,
long readPt,
boolean isPrimaryReplica)
Return an array of scanners corresponding to the given set of store files,
And set the ScanQueryMatcher for each store file scanner for further
optimization
|
static java.util.List<StoreFileScanner> |
getScannersForStoreFiles(java.util.Collection<StoreFile> files,
boolean cacheBlocks,
boolean usePread,
long readPt)
Return an array of scanners corresponding to the given
set of store files.
|
long |
getSequenceID()
Get the sequence id associated with this KeyValueScanner.
|
boolean |
isFileScanner() |
Cell |
next()
Return the next Cell in this scanner, iterating the scanner
|
Cell |
peek()
Look at the next Cell in this scanner, but do not iterate scanner.
|
boolean |
realSeekDone()
We optimize our store scanners by checking the most recent store file
first, so we sometimes pretend we have done a seek but delay it until the
store scanner bubbles up to the top of the key-value heap.
|
boolean |
requestSeek(Cell kv,
boolean forward,
boolean useBloom)
Pretend we have done a seek but don't do it yet, if possible.
|
boolean |
reseek(Cell key)
Reseek the scanner at or after the specified KeyValue.
|
boolean |
seek(Cell key)
Seek the scanner at or after the specified KeyValue.
|
static boolean |
seekAtOrAfter(HFileScanner s,
Cell k) |
boolean |
seekToLastRow()
Seek the scanner at the first KeyValue of last row
|
boolean |
seekToPreviousRow(Cell originalKey)
Seek the scanner at the first Cell of the row which is the previous row
of specified key
|
protected void |
setCurrentCell(Cell newVal) |
void |
setScanQueryMatcher(ScanQueryMatcher matcher) |
boolean |
shouldUseScanner(Scan scan,
java.util.SortedSet<byte[]> columns,
long oldestUnexpiredTS)
Allows to filter out scanners (both StoreFile and memstore) that we don't
want to use based on criteria such as Bloom filters and timestamp ranges.
|
protected boolean |
skipKVsNewerThanReadpoint() |
java.lang.String |
toString() |
public StoreFileScanner(StoreFile.Reader reader, HFileScanner hfs, boolean useMVCC, boolean hasMVCC, long readPt)
KeyValueScanner
on top of the specified HFileScanner
hfs
- HFile scannerpublic static java.util.List<StoreFileScanner> getScannersForStoreFiles(java.util.Collection<StoreFile> files, boolean cacheBlocks, boolean usePread, long readPt) throws java.io.IOException
java.io.IOException
public static java.util.List<StoreFileScanner> getScannersForStoreFiles(java.util.Collection<StoreFile> files, boolean cacheBlocks, boolean usePread, boolean isCompaction, long readPt) throws java.io.IOException
java.io.IOException
public static java.util.List<StoreFileScanner> getScannersForStoreFiles(java.util.Collection<StoreFile> files, boolean cacheBlocks, boolean usePread, boolean isCompaction, ScanQueryMatcher matcher, long readPt, boolean isPrimaryReplica) throws java.io.IOException
java.io.IOException
public static java.util.List<StoreFileScanner> getScannersForStoreFiles(java.util.Collection<StoreFile> files, boolean cacheBlocks, boolean usePread, boolean isCompaction, ScanQueryMatcher matcher, long readPt) throws java.io.IOException
java.io.IOException
public java.lang.String toString()
toString
in class java.lang.Object
public Cell peek()
KeyValueScanner
peek
in interface KeyValueScanner
public Cell next() throws java.io.IOException
KeyValueScanner
next
in interface KeyValueScanner
java.io.IOException
public boolean seek(Cell key) throws java.io.IOException
KeyValueScanner
seek
in interface KeyValueScanner
key
- seek valuejava.io.IOException
public boolean reseek(Cell key) throws java.io.IOException
KeyValueScanner
reseek
in interface KeyValueScanner
key
- seek value (should be non-null)java.io.IOException
protected void setCurrentCell(Cell newVal) throws java.io.IOException
java.io.IOException
protected boolean skipKVsNewerThanReadpoint() throws java.io.IOException
java.io.IOException
public void close()
KeyValueScanner
close
in interface KeyValueScanner
public static boolean seekAtOrAfter(HFileScanner s, Cell k) throws java.io.IOException
s
- k
- java.io.IOException
public long getSequenceID()
KeyValueScanner
getSequenceID
in interface KeyValueScanner
public boolean requestSeek(Cell kv, boolean forward, boolean useBloom) throws java.io.IOException
enforceSeek()
.
Note that this function does guarantee that the current KV of this scanner will be advanced to at least the given KV. Because of this, it does have to do a real seek in cases when the seek timestamp is older than the highest timestamp of the file, e.g. when we are trying to seek to the next row/column and use OLDEST_TIMESTAMP in the seek key.
requestSeek
in interface KeyValueScanner
forward
- do a forward-only "reseek" instead of a random-access seekuseBloom
- whether to enable multi-column Bloom filter optimizationjava.io.IOException
public boolean realSeekDone()
KeyValueScanner
realSeekDone
in interface KeyValueScanner
public void enforceSeek() throws java.io.IOException
KeyValueScanner
KeyValueScanner.realSeekDone()
first.enforceSeek
in interface KeyValueScanner
java.io.IOException
public void setScanQueryMatcher(ScanQueryMatcher matcher)
public boolean isFileScanner()
isFileScanner
in interface KeyValueScanner
public boolean shouldUseScanner(Scan scan, java.util.SortedSet<byte[]> columns, long oldestUnexpiredTS)
KeyValueScanner
shouldUseScanner
in interface KeyValueScanner
scan
- the scan that we are selecting scanners forcolumns
- the set of columns in the current column family, or null if
not specified by the scanoldestUnexpiredTS
- the oldest timestamp we are interested in for
this query, based on TTLpublic boolean seekToPreviousRow(Cell originalKey) throws java.io.IOException
KeyValueScanner
seekToPreviousRow
in interface KeyValueScanner
originalKey
- seek valuejava.io.IOException
public boolean seekToLastRow() throws java.io.IOException
KeyValueScanner
seekToLastRow
in interface KeyValueScanner
java.io.IOException
public boolean backwardSeek(Cell key) throws java.io.IOException
KeyValueScanner
backwardSeek
in interface KeyValueScanner
key
- seek KeyValuejava.io.IOException
public Cell getNextIndexedKey()
getNextIndexedKey
in interface KeyValueScanner