static class HFileBlock.FSReaderImpl extends Object implements HFileBlock.FSReader
| Modifier and Type | Field and Description | 
|---|---|
| private ByteBuffAllocator | allocator | 
| private HFileBlockDefaultDecodingContext | defaultDecodingCtxDefault context used when BlockType !=  BlockType.ENCODED_DATA. | 
| private HFileBlockDecodingContext | encodedBlockDecodingCtx | 
| private HFileContext | fileContext | 
| private long | fileSizeThe size of the file we are reading from, or -1 if unknown. | 
| protected int | hdrSizeThe size of the header | 
| private HFileSystem | hfsThe filesystem used to access data | 
| private String | pathName | 
| private AtomicReference<HFileBlock.PrefetchedHeader> | prefetchedHeaderCache of the NEXT header after this. | 
| private Lock | streamLock | 
| private FSDataInputStreamWrapper | streamWrapperThe file system stream of the underlying  HFilethat
 does or doesn't do checksum validations in the filesystem | 
| Constructor and Description | 
|---|
| FSReaderImpl(ReaderContext readerContext,
            HFileContext fileContext,
            ByteBuffAllocator allocator) | 
| Modifier and Type | Method and Description | 
|---|---|
| private ByteBuff | allocate(int size,
        boolean intoHeap) | 
| HFileBlock.BlockIterator | blockRange(long startOffset,
          long endOffset)Creates a block iterator over the given portion of the  HFile. | 
| private void | cacheNextBlockHeader(long offset,
                    ByteBuff onDiskBlock,
                    int onDiskSizeWithHeader,
                    int headerLength)Save away the next blocks header in atomic reference. | 
| private static int | checkAndGetSizeAsInt(long onDiskSizeWithHeaderL,
                    int hdrSize) | 
| void | closeStreams()Closes the backing streams | 
| HFileBlockDecodingContext | getBlockDecodingContext()Get a decoder for  BlockType.ENCODED_DATAblocks from this file. | 
| private ByteBuff | getCachedHeader(long offset)Check atomic reference cache for this block's header. | 
| HFileBlockDecodingContext | getDefaultBlockDecodingContext()Get the default decoder for blocks from this file. | 
| private int | getNextBlockOnDiskSize(boolean readNextHeader,
                      ByteBuff onDiskBlock,
                      int onDiskSizeWithHeader) | 
| protected boolean | readAtOffset(org.apache.hadoop.fs.FSDataInputStream istream,
            ByteBuff dest,
            int size,
            boolean peekIntoNextBlock,
            long fileOffset,
            boolean pread)Does a positional read or a seek and read into the given byte buffer. | 
| HFileBlock | readBlockData(long offset,
             long onDiskSizeWithHeaderL,
             boolean pread,
             boolean updateMetrics,
             boolean intoHeap)Reads a version 2 block (version 1 blocks not supported and not expected). | 
| protected HFileBlock | readBlockDataInternal(org.apache.hadoop.fs.FSDataInputStream is,
                     long offset,
                     long onDiskSizeWithHeaderL,
                     boolean pread,
                     boolean verifyChecksum,
                     boolean updateMetrics,
                     boolean intoHeap)Reads a version 2 block. | 
| void | setDataBlockEncoder(HFileDataBlockEncoder encoder) | 
| void | setIncludesMemStoreTS(boolean includesMemstoreTS) | 
| String | toString() | 
| void | unbufferStream()To close the stream's socket. | 
| private boolean | validateChecksum(long offset,
                ByteBuff data,
                int hdrSize)Generates the checksum for the header as well as the data and then validates it. | 
| private void | verifyOnDiskSizeMatchesHeader(int passedIn,
                             ByteBuff headerBuf,
                             long offset,
                             boolean verifyChecksum)Verify the passed in onDiskSizeWithHeader aligns with what is in the header else something
 is not right. | 
private FSDataInputStreamWrapper streamWrapper
HFile that
 does or doesn't do checksum validations in the filesystemprivate HFileBlockDecodingContext encodedBlockDecodingCtx
private final HFileBlockDefaultDecodingContext defaultDecodingCtx
BlockType.ENCODED_DATA.private AtomicReference<HFileBlock.PrefetchedHeader> prefetchedHeader
private long fileSize
protected final int hdrSize
private HFileSystem hfs
private HFileContext fileContext
private final ByteBuffAllocator allocator
private final Lock streamLock
FSReaderImpl(ReaderContext readerContext, HFileContext fileContext, ByteBuffAllocator allocator) throws IOException
IOExceptionpublic HFileBlock.BlockIterator blockRange(long startOffset, long endOffset)
HFileBlock.FSReaderHFile.
 The iterator returns blocks starting with offset such that offset <=
 startOffset < endOffset. Returned blocks are always unpacked.
 Used when no hfile index available; e.g. reading in the hfile index
 blocks themselves on file open.blockRange in interface HFileBlock.FSReaderstartOffset - the offset of the block to start iteration withendOffset - the offset to end iteration at (exclusive)protected boolean readAtOffset(org.apache.hadoop.fs.FSDataInputStream istream, ByteBuff dest, int size, boolean peekIntoNextBlock, long fileOffset, boolean pread) throws IOException
ByteBuff.release() for every exit to deallocate the ByteBuffers,
 otherwise the memory leak may happen.dest - destination buffersize - size of readpeekIntoNextBlock - whether to read the next block's on-disk sizefileOffset - position in the stream to read atpread - whether we should do a positional readistream - The input source of dataIOException - if any IO error happen.public HFileBlock readBlockData(long offset, long onDiskSizeWithHeaderL, boolean pread, boolean updateMetrics, boolean intoHeap) throws IOException
readBlockData in interface HFileBlock.FSReaderoffset - the offset in the stream to read atonDiskSizeWithHeaderL - the on-disk size of the block, including the header, or -1 if
          unknown; i.e. when iterating over blocks reading in the file metadata info.pread - whether to use a positional readupdateMetrics - whether to update the metricsintoHeap - allocate ByteBuff of block from heap or off-heap.IOExceptionfor more details about the
      useHeap.private static int checkAndGetSizeAsInt(long onDiskSizeWithHeaderL, int hdrSize) throws IOException
onDiskSizeWithHeaderL size is healthy and then return it as an intIOExceptionprivate void verifyOnDiskSizeMatchesHeader(int passedIn, ByteBuff headerBuf, long offset, boolean verifyChecksum) throws IOException
IOExceptionprivate ByteBuff getCachedHeader(long offset)
HFileBlock.PrefetchedHeader, 
cacheNextBlockHeader(long, ByteBuff, int, int)private void cacheNextBlockHeader(long offset, ByteBuff onDiskBlock, int onDiskSizeWithHeader, int headerLength)
getCachedHeader(long), 
HFileBlock.PrefetchedHeaderprivate int getNextBlockOnDiskSize(boolean readNextHeader, ByteBuff onDiskBlock, int onDiskSizeWithHeader)
protected HFileBlock readBlockDataInternal(org.apache.hadoop.fs.FSDataInputStream is, long offset, long onDiskSizeWithHeaderL, boolean pread, boolean verifyChecksum, boolean updateMetrics, boolean intoHeap) throws IOException
offset - the offset in the stream to read at.onDiskSizeWithHeaderL - the on-disk size of the block, including the header and
          checksums if present or -1 if unknown (as a long). Can be -1 if we are doing raw
          iteration of blocks as when loading up file metadata; i.e. the first read of a new
          file. Usually non-null gotten from the file index.pread - whether to use a positional readverifyChecksum - Whether to use HBase checksums. If HBase checksum is switched off, then
          use HDFS checksum. Can also flip on/off reading same file if we hit a troublesome
          patch in an hfile.updateMetrics - whether need to update the metrics.intoHeap - allocate the ByteBuff of block from heap or off-heap.IOExceptionpublic void setIncludesMemStoreTS(boolean includesMemstoreTS)
setIncludesMemStoreTS in interface HFileBlock.FSReaderpublic void setDataBlockEncoder(HFileDataBlockEncoder encoder)
setDataBlockEncoder in interface HFileBlock.FSReaderpublic HFileBlockDecodingContext getBlockDecodingContext()
HFileBlock.FSReaderBlockType.ENCODED_DATA blocks from this file.getBlockDecodingContext in interface HFileBlock.FSReaderpublic HFileBlockDecodingContext getDefaultBlockDecodingContext()
HFileBlock.FSReadergetDefaultBlockDecodingContext in interface HFileBlock.FSReaderprivate boolean validateChecksum(long offset, ByteBuff data, int hdrSize)
public void closeStreams() throws IOException
HFileBlock.FSReadercloseStreams in interface HFileBlock.FSReaderIOExceptionpublic void unbufferStream()
HFileBlock.FSReaderunbufferStream in interface HFileBlock.FSReaderCopyright © 2007–2021 The Apache Software Foundation. All rights reserved.