blob: a439719cc8f5e942f1e4a0dd1109bd8cbed1aa75 [file] [log] [blame]
<!DOCTYPE HTML>
<html lang="en">
<head>
<!-- Generated by javadoc (17) -->
<title>HFileBlock.FSReaderImpl (Apache HBase 4.0.0-alpha-1-SNAPSHOT API)</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="description" content="declaration: package: org.apache.hadoop.hbase.io.hfile, class: HFileBlock, class: FSReaderImpl">
<meta name="generator" content="javadoc/ClassWriterImpl">
<link rel="stylesheet" type="text/css" href="../../../../../../stylesheet.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../script-dir/jquery-ui.min.css" title="Style">
<link rel="stylesheet" type="text/css" href="../../../../../../jquery-ui.overrides.css" title="Style">
<script type="text/javascript" src="../../../../../../script.js"></script>
<script type="text/javascript" src="../../../../../../script-dir/jquery-3.6.1.min.js"></script>
<script type="text/javascript" src="../../../../../../script-dir/jquery-ui.min.js"></script>
</head>
<body class="class-declaration-page">
<script type="text/javascript">var evenRowColor = "even-row-color";
var oddRowColor = "odd-row-color";
var tableTab = "table-tab";
var activeTableTab = "active-table-tab";
var pathtoroot = "../../../../../../";
loadScripts(document, 'script');</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<div class="flex-box">
<header role="banner" class="flex-header">
<nav role="navigation">
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="top-nav" id="navbar-top">
<div class="skip-nav"><a href="#skip-navbar-top" title="Skip navigation links">Skip navigation links</a></div>
<ul id="navbar-top-firstrow" class="nav-list" title="Navigation">
<li><a href="../../../../../../index.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="nav-bar-cell1-rev">Class</li>
<li><a href="class-use/HFileBlock.FSReaderImpl.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../../help-doc.html#class">Help</a></li>
</ul>
</div>
<div class="sub-nav">
<div>
<ul class="sub-nav-list">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li><a href="#field-summary">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor-summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-summary">Method</a></li>
</ul>
<ul class="sub-nav-list">
<li>Detail:&nbsp;</li>
<li><a href="#field-detail">Field</a>&nbsp;|&nbsp;</li>
<li><a href="#constructor-detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method-detail">Method</a></li>
</ul>
</div>
<div class="nav-list-search"><label for="search-input">SEARCH:</label>
<input type="text" id="search-input" value="search" disabled="disabled">
<input type="reset" id="reset-button" value="reset" disabled="disabled">
</div>
</div>
<!-- ========= END OF TOP NAVBAR ========= -->
<span class="skip-nav" id="skip-navbar-top"></span></nav>
</header>
<div class="flex-content">
<main role="main">
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="sub-title"><span class="package-label-in-type">Package</span>&nbsp;<a href="package-summary.html">org.apache.hadoop.hbase.io.hfile</a></div>
<h1 title="Class HFileBlock.FSReaderImpl" class="title">Class HFileBlock.FSReaderImpl</h1>
</div>
<div class="inheritance" title="Inheritance Tree"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">java.lang.Object</a>
<div class="inheritance">org.apache.hadoop.hbase.io.hfile.HFileBlock.FSReaderImpl</div>
</div>
<section class="class-description" id="class-description">
<dl class="notes">
<dt>All Implemented Interfaces:</dt>
<dd><code><a href="HFileBlock.FSReader.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileBlock.FSReader</a></code></dd>
</dl>
<dl class="notes">
<dt>Enclosing class:</dt>
<dd><a href="HFileBlock.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileBlock</a></dd>
</dl>
<hr>
<div class="type-signature"><span class="modifiers">static class </span><span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/HFileBlock.html#line-1347">HFileBlock.FSReaderImpl</a></span>
<span class="extends-implements">extends <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a>
implements <a href="HFileBlock.FSReader.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileBlock.FSReader</a></span></div>
<div class="block">Reads version 2 HFile blocks from the filesystem.</div>
</section>
<section class="summary">
<ul class="summary-list">
<!-- =========== FIELD SUMMARY =========== -->
<li>
<section class="field-summary" id="field-summary">
<h2>Field Summary</h2>
<div class="caption"><span>Fields</span></div>
<div class="summary-table three-column-summary">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Field</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color"><code>private final <a href="../ByteBuffAllocator.html" title="class in org.apache.hadoop.hbase.io">ByteBuffAllocator</a></code></div>
<div class="col-second even-row-color"><code><a href="#allocator" class="member-name-link">allocator</a></code></div>
<div class="col-last even-row-color">&nbsp;</div>
<div class="col-first odd-row-color"><code>private final <a href="../encoding/HFileBlockDefaultDecodingContext.html" title="class in org.apache.hadoop.hbase.io.encoding">HFileBlockDefaultDecodingContext</a></code></div>
<div class="col-second odd-row-color"><code><a href="#defaultDecodingCtx" class="member-name-link">defaultDecodingCtx</a></code></div>
<div class="col-last odd-row-color">
<div class="block">Default context used when BlockType != <a href="BlockType.html#ENCODED_DATA"><code>BlockType.ENCODED_DATA</code></a>.</div>
</div>
<div class="col-first even-row-color"><code>private <a href="../encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a></code></div>
<div class="col-second even-row-color"><code><a href="#encodedBlockDecodingCtx" class="member-name-link">encodedBlockDecodingCtx</a></code></div>
<div class="col-last even-row-color">&nbsp;</div>
<div class="col-first odd-row-color"><code>private <a href="HFileContext.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileContext</a></code></div>
<div class="col-second odd-row-color"><code><a href="#fileContext" class="member-name-link">fileContext</a></code></div>
<div class="col-last odd-row-color">&nbsp;</div>
<div class="col-first even-row-color"><code>private long</code></div>
<div class="col-second even-row-color"><code><a href="#fileSize" class="member-name-link">fileSize</a></code></div>
<div class="col-last even-row-color">
<div class="block">The size of the file we are reading from, or -1 if unknown.</div>
</div>
<div class="col-first odd-row-color"><code>static final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second odd-row-color"><code><a href="#FS_READER_WARN_TIME_MS" class="member-name-link">FS_READER_WARN_TIME_MS</a></code></div>
<div class="col-last odd-row-color">
<div class="block">If reading block cost time in milliseconds more than the threshold, a warning will be logged.</div>
</div>
<div class="col-first even-row-color"><code>protected final int</code></div>
<div class="col-second even-row-color"><code><a href="#hdrSize" class="member-name-link">hdrSize</a></code></div>
<div class="col-last even-row-color">
<div class="block">The size of the header</div>
</div>
<div class="col-first odd-row-color"><code>private <a href="../../fs/HFileSystem.html" title="class in org.apache.hadoop.hbase.fs">HFileSystem</a></code></div>
<div class="col-second odd-row-color"><code><a href="#hfs" class="member-name-link">hfs</a></code></div>
<div class="col-last odd-row-color">
<div class="block">The filesystem used to access data</div>
</div>
<div class="col-first even-row-color"><code>private final boolean</code></div>
<div class="col-second even-row-color"><code><a href="#isPreadAllBytes" class="member-name-link">isPreadAllBytes</a></code></div>
<div class="col-last even-row-color">&nbsp;</div>
<div class="col-first odd-row-color"><code>private <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second odd-row-color"><code><a href="#pathName" class="member-name-link">pathName</a></code></div>
<div class="col-last odd-row-color">&nbsp;</div>
<div class="col-first even-row-color"><code>private <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/atomic/AtomicReference.html" title="class or interface in java.util.concurrent.atomic" class="external-link">AtomicReference</a>&lt;<a href="HFileBlock.PrefetchedHeader.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileBlock.PrefetchedHeader</a>&gt;</code></div>
<div class="col-second even-row-color"><code><a href="#prefetchedHeader" class="member-name-link">prefetchedHeader</a></code></div>
<div class="col-last even-row-color">
<div class="block">Cache of the NEXT header after this.</div>
</div>
<div class="col-first odd-row-color"><code>private final long</code></div>
<div class="col-second odd-row-color"><code><a href="#readWarnTime" class="member-name-link">readWarnTime</a></code></div>
<div class="col-last odd-row-color">&nbsp;</div>
<div class="col-first even-row-color"><code>private final <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/locks/Lock.html" title="class or interface in java.util.concurrent.locks" class="external-link">Lock</a></code></div>
<div class="col-second even-row-color"><code><a href="#streamLock" class="member-name-link">streamLock</a></code></div>
<div class="col-last even-row-color">&nbsp;</div>
<div class="col-first odd-row-color"><code>private <a href="../FSDataInputStreamWrapper.html" title="class in org.apache.hadoop.hbase.io">FSDataInputStreamWrapper</a></code></div>
<div class="col-second odd-row-color"><code><a href="#streamWrapper" class="member-name-link">streamWrapper</a></code></div>
<div class="col-last odd-row-color">
<div class="block">The file system stream of the underlying <a href="HFile.html" title="class in org.apache.hadoop.hbase.io.hfile"><code>HFile</code></a> that does or doesn't do checksum
validations in the filesystem</div>
</div>
</div>
</section>
</li>
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<li>
<section class="constructor-summary" id="constructor-summary">
<h2>Constructor Summary</h2>
<div class="caption"><span>Constructors</span></div>
<div class="summary-table two-column-summary">
<div class="table-header col-first">Constructor</div>
<div class="table-header col-last">Description</div>
<div class="col-constructor-name even-row-color"><code><a href="#%3Cinit%3E(org.apache.hadoop.hbase.io.hfile.ReaderContext,org.apache.hadoop.hbase.io.hfile.HFileContext,org.apache.hadoop.hbase.io.ByteBuffAllocator,org.apache.hadoop.conf.Configuration)" class="member-name-link">FSReaderImpl</a><wbr>(<a href="ReaderContext.html" title="class in org.apache.hadoop.hbase.io.hfile">ReaderContext</a>&nbsp;readerContext,
<a href="HFileContext.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileContext</a>&nbsp;fileContext,
<a href="../ByteBuffAllocator.html" title="class in org.apache.hadoop.hbase.io">ByteBuffAllocator</a>&nbsp;allocator,
org.apache.hadoop.conf.Configuration&nbsp;conf)</code></div>
<div class="col-last even-row-color">&nbsp;</div>
</div>
</section>
</li>
<!-- ========== METHOD SUMMARY =========== -->
<li>
<section class="method-summary" id="method-summary">
<h2>Method Summary</h2>
<div id="method-summary-table">
<div class="table-tabs" role="tablist" aria-orientation="horizontal"><button id="method-summary-table-tab0" role="tab" aria-selected="true" aria-controls="method-summary-table.tabpanel" tabindex="0" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table', 3)" class="active-table-tab">All Methods</button><button id="method-summary-table-tab2" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab2', 3)" class="table-tab">Instance Methods</button><button id="method-summary-table-tab4" role="tab" aria-selected="false" aria-controls="method-summary-table.tabpanel" tabindex="-1" onkeydown="switchTab(event)" onclick="show('method-summary-table', 'method-summary-table-tab4', 3)" class="table-tab">Concrete Methods</button></div>
<div id="method-summary-table.tabpanel" role="tabpanel">
<div class="summary-table three-column-summary" aria-labelledby="method-summary-table-tab0">
<div class="table-header col-first">Modifier and Type</div>
<div class="table-header col-second">Method</div>
<div class="table-header col-last">Description</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>private <a href="../../nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#allocate(int,boolean)" class="member-name-link">allocate</a><wbr>(int&nbsp;size,
boolean&nbsp;intoHeap)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="HFileBlock.BlockIterator.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileBlock.BlockIterator</a></code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#blockRange(long,long)" class="member-name-link">blockRange</a><wbr>(long&nbsp;startOffset,
long&nbsp;endOffset)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Creates a block iterator over the given portion of the <a href="HFile.html" title="class in org.apache.hadoop.hbase.io.hfile"><code>HFile</code></a>.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>private void</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#cacheNextBlockHeader(long,org.apache.hadoop.hbase.nio.ByteBuff,int,int)" class="member-name-link">cacheNextBlockHeader</a><wbr>(long&nbsp;offset,
<a href="../../nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;onDiskBlock,
int&nbsp;onDiskSizeWithHeader,
int&nbsp;headerLength)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Save away the next blocks header in atomic reference.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>private boolean</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#checkCallerProvidedOnDiskSizeWithHeader(long)" class="member-name-link">checkCallerProvidedOnDiskSizeWithHeader</a><wbr>(long&nbsp;value)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Check that <code>value</code> provided by the calling context seems reasonable, within a large
margin of error.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>private boolean</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#checkOnDiskSizeWithHeader(int)" class="member-name-link">checkOnDiskSizeWithHeader</a><wbr>(int&nbsp;value)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Check that <code>value</code> read from a block header seems reasonable, within a large margin of
error.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#closeStreams()" class="member-name-link">closeStreams</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Closes the backing streams</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="../encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getBlockDecodingContext()" class="member-name-link">getBlockDecodingContext</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Get a decoder for <a href="BlockType.html#ENCODED_DATA"><code>BlockType.ENCODED_DATA</code></a> blocks from this file.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>private <a href="../../nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a></code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getCachedHeader(long)" class="member-name-link">getCachedHeader</a><wbr>(long&nbsp;offset)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Check atomic reference cache for this block's header.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="../encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getDefaultBlockDecodingContext()" class="member-name-link">getDefaultBlockDecodingContext</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Get the default decoder for blocks from this file.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>private int</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#getNextBlockOnDiskSize(org.apache.hadoop.hbase.nio.ByteBuff,int)" class="member-name-link">getNextBlockOnDiskSize</a><wbr>(<a href="../../nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;onDiskBlock,
int&nbsp;onDiskSizeWithHeader)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>private void</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#invalidateNextBlockHeader()" class="member-name-link">invalidateNextBlockHeader</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Clear the cached value when its integrity is suspect.</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>protected boolean</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#readAtOffset(org.apache.hadoop.fs.FSDataInputStream,org.apache.hadoop.hbase.nio.ByteBuff,int,boolean,long,boolean)" class="member-name-link">readAtOffset</a><wbr>(org.apache.hadoop.fs.FSDataInputStream&nbsp;istream,
<a href="../../nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;dest,
int&nbsp;size,
boolean&nbsp;peekIntoNextBlock,
long&nbsp;fileOffset,
boolean&nbsp;pread)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Does a positional read or a seek and read into the given byte buffer.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="HFileBlock.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileBlock</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#readBlockData(long,long,boolean,boolean,boolean)" class="member-name-link">readBlockData</a><wbr>(long&nbsp;offset,
long&nbsp;onDiskSizeWithHeaderL,
boolean&nbsp;pread,
boolean&nbsp;updateMetrics,
boolean&nbsp;intoHeap)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Reads a version 2 block (version 1 blocks not supported and not expected).</div>
</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>protected <a href="HFileBlock.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileBlock</a></code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#readBlockDataInternal(org.apache.hadoop.fs.FSDataInputStream,long,long,boolean,boolean,boolean,boolean)" class="member-name-link">readBlockDataInternal</a><wbr>(org.apache.hadoop.fs.FSDataInputStream&nbsp;is,
long&nbsp;offset,
long&nbsp;onDiskSizeWithHeaderL,
boolean&nbsp;pread,
boolean&nbsp;verifyChecksum,
boolean&nbsp;updateMetrics,
boolean&nbsp;intoHeap)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Reads a version 2 block.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#setDataBlockEncoder(org.apache.hadoop.hbase.io.hfile.HFileDataBlockEncoder,org.apache.hadoop.conf.Configuration)" class="member-name-link">setDataBlockEncoder</a><wbr>(<a href="HFileDataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileDataBlockEncoder</a>&nbsp;encoder,
org.apache.hadoop.conf.Configuration&nbsp;conf)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#setIncludesMemStoreTS(boolean)" class="member-name-link">setIncludesMemStoreTS</a><wbr>(boolean&nbsp;includesMemstoreTS)</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#toString()" class="member-name-link">toString</a>()</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">&nbsp;</div>
<div class="col-first odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>void</code></div>
<div class="col-second odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#unbufferStream()" class="member-name-link">unbufferStream</a>()</code></div>
<div class="col-last odd-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">To close the stream's socket.</div>
</div>
<div class="col-first even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code>private boolean</code></div>
<div class="col-second even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4"><code><a href="#validateChecksum(long,org.apache.hadoop.hbase.nio.ByteBuff,int)" class="member-name-link">validateChecksum</a><wbr>(long&nbsp;offset,
<a href="../../nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;data,
int&nbsp;hdrSize)</code></div>
<div class="col-last even-row-color method-summary-table method-summary-table-tab2 method-summary-table-tab4">
<div class="block">Generates the checksum for the header as well as the data and then validates it.</div>
</div>
</div>
</div>
</div>
<div class="inherited-list">
<h3 id="methods-inherited-from-class-java.lang.Object">Methods inherited from class&nbsp;java.lang.<a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></h3>
<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#clone()" title="class or interface in java.lang" class="external-link">clone</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)" title="class or interface in java.lang" class="external-link">equals</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#finalize()" title="class or interface in java.lang" class="external-link">finalize</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#getClass()" title="class or interface in java.lang" class="external-link">getClass</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#hashCode()" title="class or interface in java.lang" class="external-link">hashCode</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notify()" title="class or interface in java.lang" class="external-link">notify</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#notifyAll()" title="class or interface in java.lang" class="external-link">notifyAll</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait()" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long)" title="class or interface in java.lang" class="external-link">wait</a>, <a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#wait(long,int)" title="class or interface in java.lang" class="external-link">wait</a></code></div>
</section>
</li>
</ul>
</section>
<section class="details">
<ul class="details-list">
<!-- ============ FIELD DETAIL =========== -->
<li>
<section class="field-details" id="field-detail">
<h2>Field Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="streamWrapper">
<h3>streamWrapper</h3>
<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type"><a href="../FSDataInputStreamWrapper.html" title="class in org.apache.hadoop.hbase.io">FSDataInputStreamWrapper</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/HFileBlock.FSReaderImpl.html#line-1352">streamWrapper</a></span></div>
<div class="block">The file system stream of the underlying <a href="HFile.html" title="class in org.apache.hadoop.hbase.io.hfile"><code>HFile</code></a> that does or doesn't do checksum
validations in the filesystem</div>
</section>
</li>
<li>
<section class="detail" id="encodedBlockDecodingCtx">
<h3>encodedBlockDecodingCtx</h3>
<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type"><a href="../encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/HFileBlock.FSReaderImpl.html#line-1354">encodedBlockDecodingCtx</a></span></div>
</section>
</li>
<li>
<section class="detail" id="defaultDecodingCtx">
<h3>defaultDecodingCtx</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="../encoding/HFileBlockDefaultDecodingContext.html" title="class in org.apache.hadoop.hbase.io.encoding">HFileBlockDefaultDecodingContext</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/HFileBlock.FSReaderImpl.html#line-1357">defaultDecodingCtx</a></span></div>
<div class="block">Default context used when BlockType != <a href="BlockType.html#ENCODED_DATA"><code>BlockType.ENCODED_DATA</code></a>.</div>
</section>
</li>
<li>
<section class="detail" id="prefetchedHeader">
<h3>prefetchedHeader</h3>
<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/atomic/AtomicReference.html" title="class or interface in java.util.concurrent.atomic" class="external-link">AtomicReference</a>&lt;<a href="HFileBlock.PrefetchedHeader.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileBlock.PrefetchedHeader</a>&gt;</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/HFileBlock.FSReaderImpl.html#line-1364">prefetchedHeader</a></span></div>
<div class="block">Cache of the NEXT header after this. Check it is indeed next blocks header before using it.
TODO: Review. This overread into next block to fetch next blocks header seems unnecessary
given we usually get the block size from the hfile index. Review!</div>
</section>
</li>
<li>
<section class="detail" id="fileSize">
<h3>fileSize</h3>
<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/HFileBlock.FSReaderImpl.html#line-1368">fileSize</a></span></div>
<div class="block">The size of the file we are reading from, or -1 if unknown.</div>
</section>
</li>
<li>
<section class="detail" id="hdrSize">
<h3>hdrSize</h3>
<div class="member-signature"><span class="modifiers">protected final</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/HFileBlock.FSReaderImpl.html#line-1371">hdrSize</a></span></div>
<div class="block">The size of the header</div>
</section>
</li>
<li>
<section class="detail" id="hfs">
<h3>hfs</h3>
<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type"><a href="../../fs/HFileSystem.html" title="class in org.apache.hadoop.hbase.fs">HFileSystem</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/HFileBlock.FSReaderImpl.html#line-1374">hfs</a></span></div>
<div class="block">The filesystem used to access data</div>
</section>
</li>
<li>
<section class="detail" id="fileContext">
<h3>fileContext</h3>
<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type"><a href="HFileContext.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileContext</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/HFileBlock.FSReaderImpl.html#line-1376">fileContext</a></span></div>
</section>
</li>
<li>
<section class="detail" id="pathName">
<h3>pathName</h3>
<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/HFileBlock.FSReaderImpl.html#line-1378">pathName</a></span></div>
</section>
</li>
<li>
<section class="detail" id="allocator">
<h3>allocator</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="../ByteBuffAllocator.html" title="class in org.apache.hadoop.hbase.io">ByteBuffAllocator</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/HFileBlock.FSReaderImpl.html#line-1380">allocator</a></span></div>
</section>
</li>
<li>
<section class="detail" id="streamLock">
<h3>streamLock</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/concurrent/locks/Lock.html" title="class or interface in java.util.concurrent.locks" class="external-link">Lock</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/HFileBlock.FSReaderImpl.html#line-1382">streamLock</a></span></div>
</section>
</li>
<li>
<section class="detail" id="isPreadAllBytes">
<h3>isPreadAllBytes</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/HFileBlock.FSReaderImpl.html#line-1384">isPreadAllBytes</a></span></div>
</section>
</li>
<li>
<section class="detail" id="readWarnTime">
<h3>readWarnTime</h3>
<div class="member-signature"><span class="modifiers">private final</span>&nbsp;<span class="return-type">long</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/HFileBlock.FSReaderImpl.html#line-1386">readWarnTime</a></span></div>
</section>
</li>
<li>
<section class="detail" id="FS_READER_WARN_TIME_MS">
<h3>FS_READER_WARN_TIME_MS</h3>
<div class="member-signature"><span class="modifiers">public static final</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/HFileBlock.FSReaderImpl.html#line-1391">FS_READER_WARN_TIME_MS</a></span></div>
<div class="block">If reading block cost time in milliseconds more than the threshold, a warning will be logged.</div>
<dl class="notes">
<dt>See Also:</dt>
<dd>
<ul class="see-list">
<li><a href="../../../../../../constant-values.html#org.apache.hadoop.hbase.io.hfile.HFileBlock.FSReaderImpl.FS_READER_WARN_TIME_MS">Constant Field Values</a></li>
</ul>
</dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<li>
<section class="constructor-details" id="constructor-detail">
<h2>Constructor Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="&lt;init&gt;(org.apache.hadoop.hbase.io.hfile.ReaderContext,org.apache.hadoop.hbase.io.hfile.HFileContext,org.apache.hadoop.hbase.io.ByteBuffAllocator,org.apache.hadoop.conf.Configuration)">
<h3>FSReaderImpl</h3>
<div class="member-signature"><span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/HFileBlock.FSReaderImpl.html#line-1393">FSReaderImpl</a></span><wbr><span class="parameters">(<a href="ReaderContext.html" title="class in org.apache.hadoop.hbase.io.hfile">ReaderContext</a>&nbsp;readerContext,
<a href="HFileContext.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileContext</a>&nbsp;fileContext,
<a href="../ByteBuffAllocator.html" title="class in org.apache.hadoop.hbase.io">ByteBuffAllocator</a>&nbsp;allocator,
org.apache.hadoop.conf.Configuration&nbsp;conf)</span>
throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
<dl class="notes">
<dt>Throws:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></code></dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
<!-- ============ METHOD DETAIL ========== -->
<li>
<section class="method-details" id="method-detail">
<h2>Method Details</h2>
<ul class="member-list">
<li>
<section class="detail" id="blockRange(long,long)">
<h3>blockRange</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="HFileBlock.BlockIterator.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileBlock.BlockIterator</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/HFileBlock.FSReaderImpl.html#line-1414">blockRange</a></span><wbr><span class="parameters">(long&nbsp;startOffset,
long&nbsp;endOffset)</span></div>
<div class="block"><span class="descfrm-type-label">Description copied from interface:&nbsp;<code><a href="HFileBlock.FSReader.html#blockRange(long,long)">HFileBlock.FSReader</a></code></span></div>
<div class="block">Creates a block iterator over the given portion of the <a href="HFile.html" title="class in org.apache.hadoop.hbase.io.hfile"><code>HFile</code></a>. The iterator returns
blocks starting with offset such that offset &lt;= startOffset &lt; endOffset. Returned
blocks are always unpacked. Used when no hfile index available; e.g. reading in the hfile
index blocks themselves on file open.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="HFileBlock.FSReader.html#blockRange(long,long)">blockRange</a></code>&nbsp;in interface&nbsp;<code><a href="HFileBlock.FSReader.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileBlock.FSReader</a></code></dd>
<dt>Parameters:</dt>
<dd><code>startOffset</code> - the offset of the block to start iteration with</dd>
<dd><code>endOffset</code> - the offset to end iteration at (exclusive)</dd>
<dt>Returns:</dt>
<dd>an iterator of blocks between the two given offsets</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="readAtOffset(org.apache.hadoop.fs.FSDataInputStream,org.apache.hadoop.hbase.nio.ByteBuff,int,boolean,long,boolean)">
<h3>readAtOffset</h3>
<div class="member-signature"><span class="modifiers">protected</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/HFileBlock.FSReaderImpl.html#line-1477">readAtOffset</a></span><wbr><span class="parameters">(org.apache.hadoop.fs.FSDataInputStream&nbsp;istream,
<a href="../../nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;dest,
int&nbsp;size,
boolean&nbsp;peekIntoNextBlock,
long&nbsp;fileOffset,
boolean&nbsp;pread)</span>
throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
<div class="block">Does a positional read or a seek and read into the given byte buffer. We need take care that
we will call the <a href="../../nio/ByteBuff.html#release()"><code>ByteBuff.release()</code></a> for every exit to deallocate the ByteBuffers,
otherwise the memory leak may happen.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>dest</code> - destination buffer</dd>
<dd><code>size</code> - size of read</dd>
<dd><code>peekIntoNextBlock</code> - whether to read the next block's on-disk size</dd>
<dd><code>fileOffset</code> - position in the stream to read at</dd>
<dd><code>pread</code> - whether we should do a positional read</dd>
<dd><code>istream</code> - The input source of data</dd>
<dt>Returns:</dt>
<dd>true to indicate the destination buffer include the next block header, otherwise only
include the current block data without the next block header.</dd>
<dt>Throws:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></code> - if any IO error happen.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="readBlockData(long,long,boolean,boolean,boolean)">
<h3>readBlockData</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="HFileBlock.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileBlock</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/HFileBlock.FSReaderImpl.html#line-1524">readBlockData</a></span><wbr><span class="parameters">(long&nbsp;offset,
long&nbsp;onDiskSizeWithHeaderL,
boolean&nbsp;pread,
boolean&nbsp;updateMetrics,
boolean&nbsp;intoHeap)</span>
throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
<div class="block">Reads a version 2 block (version 1 blocks not supported and not expected). Tries to do as
little memory allocation as possible, using the provided on-disk size.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="HFileBlock.FSReader.html#readBlockData(long,long,boolean,boolean,boolean)">readBlockData</a></code>&nbsp;in interface&nbsp;<code><a href="HFileBlock.FSReader.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileBlock.FSReader</a></code></dd>
<dt>Parameters:</dt>
<dd><code>offset</code> - the offset in the stream to read at</dd>
<dd><code>onDiskSizeWithHeaderL</code> - 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.</dd>
<dd><code>pread</code> - whether to use a positional read</dd>
<dd><code>updateMetrics</code> - whether to update the metrics</dd>
<dd><code>intoHeap</code> - allocate ByteBuff of block from heap or off-heap.</dd>
<dt>Returns:</dt>
<dd>the newly read block</dd>
<dt>Throws:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></code></dd>
<dt>See Also:</dt>
<dd>
<ul class="see-list-long">
<li><a href="HFileBlock.FSReader.html#readBlockData(long,long,boolean,boolean,boolean)"><code>for more details about the
useHeap.</code></a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="checkOnDiskSizeWithHeader(int)">
<h3>checkOnDiskSizeWithHeader</h3>
<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/HFileBlock.FSReaderImpl.html#line-1595">checkOnDiskSizeWithHeader</a></span><wbr><span class="parameters">(int&nbsp;value)</span></div>
<div class="block">Check that <code>value</code> read from a block header seems reasonable, within a large margin of
error.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd><code>true</code> if the value is safe to proceed, <code>false</code> otherwise.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="checkCallerProvidedOnDiskSizeWithHeader(long)">
<h3>checkCallerProvidedOnDiskSizeWithHeader</h3>
<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/HFileBlock.FSReaderImpl.html#line-1619">checkCallerProvidedOnDiskSizeWithHeader</a></span><wbr><span class="parameters">(long&nbsp;value)</span></div>
<div class="block">Check that <code>value</code> provided by the calling context seems reasonable, within a large
margin of error.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd><code>true</code> if the value is safe to proceed, <code>false</code> otherwise.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="getCachedHeader(long)">
<h3>getCachedHeader</h3>
<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type"><a href="../../nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/HFileBlock.FSReaderImpl.html#line-1645">getCachedHeader</a></span><wbr><span class="parameters">(long&nbsp;offset)</span></div>
<div class="block">Check atomic reference cache for this block's header. Cache only good if next read coming
through is next in sequence in the block. We read next block's header on the tail of reading
the previous block to save a seek. Otherwise, we have to do a seek to read the header before
we can pull in the block OR we have to backup the stream because we over-read (the next
block's header).</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>The cached block header or null if not found.</dd>
<dt>See Also:</dt>
<dd>
<ul class="see-list-long">
<li><a href="HFileBlock.PrefetchedHeader.html" title="class in org.apache.hadoop.hbase.io.hfile"><code>HFileBlock.PrefetchedHeader</code></a></li>
<li><a href="#cacheNextBlockHeader(long,org.apache.hadoop.hbase.nio.ByteBuff,int,int)"><code>cacheNextBlockHeader(long, ByteBuff, int, int)</code></a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="cacheNextBlockHeader(long,org.apache.hadoop.hbase.nio.ByteBuff,int,int)">
<h3>cacheNextBlockHeader</h3>
<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/HFileBlock.FSReaderImpl.html#line-1655">cacheNextBlockHeader</a></span><wbr><span class="parameters">(long&nbsp;offset,
<a href="../../nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;onDiskBlock,
int&nbsp;onDiskSizeWithHeader,
int&nbsp;headerLength)</span></div>
<div class="block">Save away the next blocks header in atomic reference.</div>
<dl class="notes">
<dt>See Also:</dt>
<dd>
<ul class="see-list">
<li><a href="#getCachedHeader(long)"><code>getCachedHeader(long)</code></a></li>
<li><a href="HFileBlock.PrefetchedHeader.html" title="class in org.apache.hadoop.hbase.io.hfile"><code>HFileBlock.PrefetchedHeader</code></a></li>
</ul>
</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="invalidateNextBlockHeader()">
<h3>invalidateNextBlockHeader</h3>
<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/HFileBlock.FSReaderImpl.html#line-1666">invalidateNextBlockHeader</a></span>()</div>
<div class="block">Clear the cached value when its integrity is suspect.</div>
</section>
</li>
<li>
<section class="detail" id="getNextBlockOnDiskSize(org.apache.hadoop.hbase.nio.ByteBuff,int)">
<h3>getNextBlockOnDiskSize</h3>
<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">int</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/HFileBlock.FSReaderImpl.html#line-1670">getNextBlockOnDiskSize</a></span><wbr><span class="parameters">(<a href="../../nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;onDiskBlock,
int&nbsp;onDiskSizeWithHeader)</span></div>
</section>
</li>
<li>
<section class="detail" id="allocate(int,boolean)">
<h3>allocate</h3>
<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type"><a href="../../nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/HFileBlock.FSReaderImpl.html#line-1675">allocate</a></span><wbr><span class="parameters">(int&nbsp;size,
boolean&nbsp;intoHeap)</span></div>
</section>
</li>
<li>
<section class="detail" id="readBlockDataInternal(org.apache.hadoop.fs.FSDataInputStream,long,long,boolean,boolean,boolean,boolean)">
<h3>readBlockDataInternal</h3>
<div class="member-signature"><span class="modifiers">protected</span>&nbsp;<span class="return-type"><a href="HFileBlock.html" title="class in org.apache.hadoop.hbase.io.hfile">HFileBlock</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/HFileBlock.FSReaderImpl.html#line-1695">readBlockDataInternal</a></span><wbr><span class="parameters">(org.apache.hadoop.fs.FSDataInputStream&nbsp;is,
long&nbsp;offset,
long&nbsp;onDiskSizeWithHeaderL,
boolean&nbsp;pread,
boolean&nbsp;verifyChecksum,
boolean&nbsp;updateMetrics,
boolean&nbsp;intoHeap)</span>
throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
<div class="block">Reads a version 2 block.</div>
<dl class="notes">
<dt>Parameters:</dt>
<dd><code>offset</code> - the offset in the stream to read at.</dd>
<dd><code>onDiskSizeWithHeaderL</code> - 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.</dd>
<dd><code>pread</code> - whether to use a positional read</dd>
<dd><code>verifyChecksum</code> - 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.</dd>
<dd><code>updateMetrics</code> - whether need to update the metrics.</dd>
<dd><code>intoHeap</code> - allocate the ByteBuff of block from heap or off-heap.</dd>
<dt>Returns:</dt>
<dd>the HFileBlock or null if there is a HBase checksum mismatch</dd>
<dt>Throws:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></code></dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="setIncludesMemStoreTS(boolean)">
<h3>setIncludesMemStoreTS</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/HFileBlock.FSReaderImpl.html#line-1853">setIncludesMemStoreTS</a></span><wbr><span class="parameters">(boolean&nbsp;includesMemstoreTS)</span></div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="HFileBlock.FSReader.html#setIncludesMemStoreTS(boolean)">setIncludesMemStoreTS</a></code>&nbsp;in interface&nbsp;<code><a href="HFileBlock.FSReader.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileBlock.FSReader</a></code></dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="setDataBlockEncoder(org.apache.hadoop.hbase.io.hfile.HFileDataBlockEncoder,org.apache.hadoop.conf.Configuration)">
<h3>setDataBlockEncoder</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/HFileBlock.FSReaderImpl.html#line-1859">setDataBlockEncoder</a></span><wbr><span class="parameters">(<a href="HFileDataBlockEncoder.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileDataBlockEncoder</a>&nbsp;encoder,
org.apache.hadoop.conf.Configuration&nbsp;conf)</span></div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="HFileBlock.FSReader.html#setDataBlockEncoder(org.apache.hadoop.hbase.io.hfile.HFileDataBlockEncoder,org.apache.hadoop.conf.Configuration)">setDataBlockEncoder</a></code>&nbsp;in interface&nbsp;<code><a href="HFileBlock.FSReader.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileBlock.FSReader</a></code></dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="getBlockDecodingContext()">
<h3>getBlockDecodingContext</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="../encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/HFileBlock.FSReaderImpl.html#line-1864">getBlockDecodingContext</a></span>()</div>
<div class="block"><span class="descfrm-type-label">Description copied from interface:&nbsp;<code><a href="HFileBlock.FSReader.html#getBlockDecodingContext()">HFileBlock.FSReader</a></code></span></div>
<div class="block">Get a decoder for <a href="BlockType.html#ENCODED_DATA"><code>BlockType.ENCODED_DATA</code></a> blocks from this file.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="HFileBlock.FSReader.html#getBlockDecodingContext()">getBlockDecodingContext</a></code>&nbsp;in interface&nbsp;<code><a href="HFileBlock.FSReader.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileBlock.FSReader</a></code></dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="getDefaultBlockDecodingContext()">
<h3>getDefaultBlockDecodingContext</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="../encoding/HFileBlockDecodingContext.html" title="interface in org.apache.hadoop.hbase.io.encoding">HFileBlockDecodingContext</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/HFileBlock.FSReaderImpl.html#line-1869">getDefaultBlockDecodingContext</a></span>()</div>
<div class="block"><span class="descfrm-type-label">Description copied from interface:&nbsp;<code><a href="HFileBlock.FSReader.html#getDefaultBlockDecodingContext()">HFileBlock.FSReader</a></code></span></div>
<div class="block">Get the default decoder for blocks from this file.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="HFileBlock.FSReader.html#getDefaultBlockDecodingContext()">getDefaultBlockDecodingContext</a></code>&nbsp;in interface&nbsp;<code><a href="HFileBlock.FSReader.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileBlock.FSReader</a></code></dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="validateChecksum(long,org.apache.hadoop.hbase.nio.ByteBuff,int)">
<h3>validateChecksum</h3>
<div class="member-signature"><span class="modifiers">private</span>&nbsp;<span class="return-type">boolean</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/HFileBlock.FSReaderImpl.html#line-1879">validateChecksum</a></span><wbr><span class="parameters">(long&nbsp;offset,
<a href="../../nio/ByteBuff.html" title="class in org.apache.hadoop.hbase.nio">ByteBuff</a>&nbsp;data,
int&nbsp;hdrSize)</span></div>
<div class="block">Generates the checksum for the header as well as the data and then validates it. If the block
doesn't uses checksum, returns false.</div>
<dl class="notes">
<dt>Returns:</dt>
<dd>True if checksum matches, else false.</dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="closeStreams()">
<h3>closeStreams</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/HFileBlock.FSReaderImpl.html#line-1891">closeStreams</a></span>()
throws <span class="exceptions"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></span></div>
<div class="block"><span class="descfrm-type-label">Description copied from interface:&nbsp;<code><a href="HFileBlock.FSReader.html#closeStreams()">HFileBlock.FSReader</a></code></span></div>
<div class="block">Closes the backing streams</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="HFileBlock.FSReader.html#closeStreams()">closeStreams</a></code>&nbsp;in interface&nbsp;<code><a href="HFileBlock.FSReader.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileBlock.FSReader</a></code></dd>
<dt>Throws:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/io/IOException.html" title="class or interface in java.io" class="external-link">IOException</a></code></dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="unbufferStream()">
<h3>unbufferStream</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type">void</span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/HFileBlock.FSReaderImpl.html#line-1896">unbufferStream</a></span>()</div>
<div class="block"><span class="descfrm-type-label">Description copied from interface:&nbsp;<code><a href="HFileBlock.FSReader.html#unbufferStream()">HFileBlock.FSReader</a></code></span></div>
<div class="block">To close the stream's socket. Note: This can be concurrently called from multiple threads and
implementation should take care of thread safety.</div>
<dl class="notes">
<dt>Specified by:</dt>
<dd><code><a href="HFileBlock.FSReader.html#unbufferStream()">unbufferStream</a></code>&nbsp;in interface&nbsp;<code><a href="HFileBlock.FSReader.html" title="interface in org.apache.hadoop.hbase.io.hfile">HFileBlock.FSReader</a></code></dd>
</dl>
</section>
</li>
<li>
<section class="detail" id="toString()">
<h3>toString</h3>
<div class="member-signature"><span class="modifiers">public</span>&nbsp;<span class="return-type"><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/String.html" title="class or interface in java.lang" class="external-link">String</a></span>&nbsp;<span class="element-name"><a href="../../../../../../src-html/org/apache/hadoop/hbase/io/hfile/HFileBlock.FSReaderImpl.html#line-1909">toString</a></span>()</div>
<dl class="notes">
<dt>Overrides:</dt>
<dd><code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#toString()" title="class or interface in java.lang" class="external-link">toString</a></code>&nbsp;in class&nbsp;<code><a href="https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html" title="class or interface in java.lang" class="external-link">Object</a></code></dd>
</dl>
</section>
</li>
</ul>
</section>
</li>
</ul>
</section>
<!-- ========= END OF CLASS DATA ========= -->
</main>
<footer role="contentinfo">
<hr>
<p class="legal-copy"><small>Copyright &#169; 2007&#x2013;2020 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
</footer>
</div>
</div>
</body>
</html>