protected static class HFileReaderImpl.HFileScannerImpl extends Object implements HFileScanner
| Modifier and Type | Field and Description |
|---|---|
protected boolean |
cacheBlocks |
protected HFileBlock |
curBlock |
protected boolean |
isCompaction |
protected Cell |
nextIndexedKey
The next indexed key is to keep track of the indexed key of the next data block.
|
protected boolean |
pread |
protected ArrayList<HFileBlock> |
prevBlocks |
protected HFile.Reader |
reader |
| Constructor and Description |
|---|
HFileScannerImpl(HFile.Reader reader,
boolean cacheBlocks,
boolean pread,
boolean isCompaction) |
| Modifier and Type | Method and Description |
|---|---|
protected void |
assertSeeked() |
protected int |
blockSeek(Cell key,
boolean seekBefore)
Within a loaded block, seek looking for the last key that is smaller than (or equal to?) the
key we are interested in.
|
protected boolean |
checkKeyLen(int v)
Returns True if v <= 0 or v > current block buffer limit.
|
protected void |
checkKeyValueLen()
Check key and value lengths are wholesome.
|
protected boolean |
checkLen(int v)
Returns True if v < 0 or v > current block buffer limit.
|
void |
close()
Close this HFile scanner and do necessary cleanup.
|
int |
compareKey(CellComparator comparator,
Cell key) |
Cell |
getCell()
Returns Instance of
Cell. |
DataBlockEncoding |
getEffectiveDataBlockEncoding() |
protected Cell |
getFirstKeyCellInBlock(HFileBlock curBlock) |
Cell |
getKey()
Gets the current key in the form of a cell.
|
String |
getKeyString()
Convenience method to get a copy of the key as a string - interpreting the bytes as UTF8.
|
Cell |
getNextIndexedKey()
Returns the next key in the index (the key to seek to the next block)
|
HFile.Reader |
getReader()
Returns Reader that underlies this Scanner instance.
|
ByteBuffer |
getValue()
Gets a buffer view to the current value.
|
String |
getValueString()
Convenience method to get a copy of the value as a string - interpreting the bytes as UTF8.
|
boolean |
isSeeked() |
protected int |
loadBlockAndSeekToKey(HFileBlock seekToBlock,
Cell nextIndexedKey,
boolean rewind,
Cell key,
boolean seekBefore) |
boolean |
next()
Go to the next key/value in the block section.
|
protected boolean |
processFirstDataBlock() |
protected void |
readAndUpdateNewBlock(long firstDataBlockOffset) |
protected void |
readKeyValueLen() |
protected void |
readMvccVersion(int offsetFromPos)
Read mvcc.
|
protected HFileBlock |
readNextDataBlock()
Scans blocks in the "scanned" section of the
HFile until the next data block is
found. |
protected void |
releaseIfNotCurBlock(HFileBlock block)
The curBlock will be released by shipping or close method, so only need to consider releasing
the block, which was read from HFile before and not referenced by curBlock.
|
int |
reseekTo(Cell key)
Reseek to or just before the passed
cell. |
boolean |
seekBefore(Cell key)
Consider the cell stream of all the cells in the file,
c[0] .. |
boolean |
seekTo()
Positions this scanner at the start of the file.
|
int |
seekTo(Cell key)
SeekTo or just before the passed
cell. |
int |
seekTo(Cell key,
boolean rewind)
An internal API function.
|
protected void |
setNonSeekedState() |
void |
shipped()
Called after a batch of rows scanned and set to be returned to client.
|
String |
toString() |
protected void |
updateCurrentBlock(HFileBlock newBlock)
Updates the current block to be the given
HFileBlock. |
protected final boolean cacheBlocks
protected final boolean pread
protected final boolean isCompaction
protected final HFile.Reader reader
protected Cell nextIndexedKey
protected HFileBlock curBlock
protected final ArrayList<HFileBlock> prevBlocks
public HFileScannerImpl(HFile.Reader reader, boolean cacheBlocks, boolean pread, boolean isCompaction)
public boolean isSeeked()
isSeeked in interface HFileScannerHFileScanner.seekBefore(Cell)
or HFileScanner.seekTo() or HFileScanner.seekTo(Cell). Otherwise returns false.protected void assertSeeked()
public HFile.Reader getReader()
HFileScannergetReader in interface HFileScannerpublic void close()
HFileScannerclose in interface Closeableclose in interface AutoCloseableclose in interface HFileScannerprotected void readKeyValueLen()
protected void readMvccVersion(int offsetFromPos)
protected int blockSeek(Cell key, boolean seekBefore)
public Cell getNextIndexedKey()
HFileScannergetNextIndexedKey in interface HFileScannerpublic int seekTo(Cell key) throws IOException
HFileScannercell. Examine the return code to figure whether
we found the cell or not. Consider the cell stream of all the cells in the file,
c[0] .. c[n], where there are n cells in the file.seekTo in interface HFileScannerIOExceptionpublic int reseekTo(Cell key) throws IOException
HFileScannercell. Similar to seekTo except that this can
be called even if the scanner is not at the beginning of a file. This can be used to seek only
to cells which come after the current position of the scanner. Consider the cell stream of all
the cells in the file, c[0] .. c[n], where there are n cellc in the file after
current position of HFileScanner. The scanner will position itself between c[i] and c[i+1]
where c[i] < cell <= c[i+1]. If there is no cell c[i+1] greater than or equal to the
input cell, then the scanner will position itself at the end of the file and next() will return
false when it is called.reseekTo in interface HFileScannerkey - Cell to find (should be non-null)IOExceptionpublic int seekTo(Cell key, boolean rewind) throws IOException
key - - a cell representing the key that we need to fetchrewind - whether to rewind to the first key of the block before doing the seek. If this
is false, we are assuming we never go back, otherwise the result is undefined.IOExceptionpublic boolean seekBefore(Cell key) throws IOException
HFileScannerc[0] .. c[n], where there
are n cells in the file.seekBefore in interface HFileScannerkey - Cell to findIOExceptionprotected void releaseIfNotCurBlock(HFileBlock block)
protected HFileBlock readNextDataBlock() throws IOException
HFile until the next data block is
found.IOExceptionpublic DataBlockEncoding getEffectiveDataBlockEncoding()
public Cell getCell()
HFileScannerCell.getCell in interface HFileScannerpublic Cell getKey()
HFileScannerHFileScanner.seekTo(Cell) before this
method.getKey in interface HFileScannerpublic ByteBuffer getValue()
HFileScannerHFileScanner.seekTo(Cell) before this
method.getValue in interface HFileScannerprotected void setNonSeekedState()
public boolean next()
throws IOException
getKey() and getValue() can be called.next in interface HFileScannerIOExceptionpublic boolean seekTo()
throws IOException
seekTo in interface HFileScannerIOExceptionprotected boolean processFirstDataBlock()
throws IOException
IOExceptionprotected void readAndUpdateNewBlock(long firstDataBlockOffset)
throws IOException
IOExceptionprotected int loadBlockAndSeekToKey(HFileBlock seekToBlock, Cell nextIndexedKey, boolean rewind, Cell key, boolean seekBefore) throws IOException
IOExceptionprotected final boolean checkKeyLen(int v)
protected final boolean checkLen(int v)
protected final void checkKeyValueLen()
protected void updateCurrentBlock(HFileBlock newBlock) throws IOException
HFileBlock. Seeks to the the first
key/value pair.newBlock - the block read by HFileReaderImpl.readBlock(long, long, boolean, boolean, boolean, boolean, org.apache.hadoop.hbase.io.hfile.BlockType, org.apache.hadoop.hbase.io.encoding.DataBlockEncoding), it's a totally new block
with new allocated ByteBuff, so if no further reference to this
block, we should release it carefully.IOExceptionprotected Cell getFirstKeyCellInBlock(HFileBlock curBlock)
public String getKeyString()
HFileScannerHFileScanner.seekTo(Cell) before this method.getKeyString in interface HFileScannerpublic String getValueString()
HFileScannerHFileScanner.seekTo(Cell) before this method.getValueString in interface HFileScannerpublic int compareKey(CellComparator comparator, Cell key)
public void shipped()
throws IOException
Shippershipped in interface ShipperIOExceptionCopyright © 2007–2020 The Apache Software Foundation. All rights reserved.