You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by mi...@apache.org on 2016/02/04 18:31:24 UTC

[04/23] hbase-site git commit: Published site at 2cf8af5bf1d501156cbb3b421cf75c1051ead7d9.

http://git-wip-us.apache.org/repos/asf/hbase-site/blob/32672884/xref/org/apache/hadoop/hbase/io/hfile/HFileBlock.html
----------------------------------------------------------------------
diff --git a/xref/org/apache/hadoop/hbase/io/hfile/HFileBlock.html b/xref/org/apache/hadoop/hbase/io/hfile/HFileBlock.html
index 4b7478a..cae54a4 100644
--- a/xref/org/apache/hadoop/hbase/io/hfile/HFileBlock.html
+++ b/xref/org/apache/hadoop/hbase/io/hfile/HFileBlock.html
@@ -1363,609 +1363,610 @@
 <a class="jxr_linenumber" name="1353" href="#1353">1353</a>     <em class="jxr_javadoccomment">/**</em><em class="jxr_javadoccomment"> The filesystem used to access data */</em>
 <a class="jxr_linenumber" name="1354" href="#1354">1354</a>     <strong class="jxr_keyword">protected</strong> <a href="../../../../../../org/apache/hadoop/hbase/fs/HFileSystem.html">HFileSystem</a> hfs;
 <a class="jxr_linenumber" name="1355" href="#1355">1355</a> 
-<a class="jxr_linenumber" name="1356" href="#1356">1356</a>     <em class="jxr_javadoccomment">/**</em><em class="jxr_javadoccomment"> The path (if any) where this data is coming from */</em>
-<a class="jxr_linenumber" name="1357" href="#1357">1357</a>     <strong class="jxr_keyword">protected</strong> Path path;
-<a class="jxr_linenumber" name="1358" href="#1358">1358</a> 
-<a class="jxr_linenumber" name="1359" href="#1359">1359</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> Lock streamLock = <strong class="jxr_keyword">new</strong> ReentrantLock();
+<a class="jxr_linenumber" name="1356" href="#1356">1356</a>     <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">final</strong> Lock streamLock = <strong class="jxr_keyword">new</strong> ReentrantLock();
+<a class="jxr_linenumber" name="1357" href="#1357">1357</a> 
+<a class="jxr_linenumber" name="1358" href="#1358">1358</a>     <em class="jxr_javadoccomment">/**</em><em class="jxr_javadoccomment"> The default buffer size for our buffered streams */</em>
+<a class="jxr_linenumber" name="1359" href="#1359">1359</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> DEFAULT_BUFFER_SIZE = 1 &lt;&lt; 20;
 <a class="jxr_linenumber" name="1360" href="#1360">1360</a> 
-<a class="jxr_linenumber" name="1361" href="#1361">1361</a>     <em class="jxr_javadoccomment">/**</em><em class="jxr_javadoccomment"> The default buffer size for our buffered streams */</em>
-<a class="jxr_linenumber" name="1362" href="#1362">1362</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">int</strong> DEFAULT_BUFFER_SIZE = 1 &lt;&lt; 20;
-<a class="jxr_linenumber" name="1363" href="#1363">1363</a> 
-<a class="jxr_linenumber" name="1364" href="#1364">1364</a>     <strong class="jxr_keyword">protected</strong> <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileContext.html">HFileContext</a> fileContext;
-<a class="jxr_linenumber" name="1365" href="#1365">1365</a> 
-<a class="jxr_linenumber" name="1366" href="#1366">1366</a>     <strong class="jxr_keyword">public</strong> <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.html">FSReaderImpl</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/FSDataInputStreamWrapper.html">FSDataInputStreamWrapper</a> stream, <strong class="jxr_keyword">long</strong> fileSize, <a href="../../../../../../org/apache/hadoop/hbase/fs/HFileSystem.html">HFileSystem</a> hfs, Path path,
-<a class="jxr_linenumber" name="1367" href="#1367">1367</a>         <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileContext.html">HFileContext</a> fileContext) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1368" href="#1368">1368</a>       <strong class="jxr_keyword">this</strong>.fileSize = fileSize;
-<a class="jxr_linenumber" name="1369" href="#1369">1369</a>       <strong class="jxr_keyword">this</strong>.hfs = hfs;
-<a class="jxr_linenumber" name="1370" href="#1370">1370</a>       <strong class="jxr_keyword">this</strong>.path = path;
-<a class="jxr_linenumber" name="1371" href="#1371">1371</a>       <strong class="jxr_keyword">this</strong>.fileContext = fileContext;
-<a class="jxr_linenumber" name="1372" href="#1372">1372</a>       <strong class="jxr_keyword">this</strong>.hdrSize = headerSize(fileContext.isUseHBaseChecksum());
-<a class="jxr_linenumber" name="1373" href="#1373">1373</a> 
-<a class="jxr_linenumber" name="1374" href="#1374">1374</a>       <strong class="jxr_keyword">this</strong>.streamWrapper = stream;
-<a class="jxr_linenumber" name="1375" href="#1375">1375</a>       <em class="jxr_comment">// Older versions of HBase didn't support checksum.</em>
-<a class="jxr_linenumber" name="1376" href="#1376">1376</a>       <strong class="jxr_keyword">this</strong>.streamWrapper.prepareForBlockReader(!fileContext.isUseHBaseChecksum());
-<a class="jxr_linenumber" name="1377" href="#1377">1377</a>       defaultDecodingCtx = <strong class="jxr_keyword">new</strong> <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDefaultDecodingContext.html">HFileBlockDefaultDecodingContext</a>(fileContext);
-<a class="jxr_linenumber" name="1378" href="#1378">1378</a>       encodedBlockDecodingCtx = defaultDecodingCtx;
-<a class="jxr_linenumber" name="1379" href="#1379">1379</a>     }
-<a class="jxr_linenumber" name="1380" href="#1380">1380</a> 
-<a class="jxr_linenumber" name="1381" href="#1381">1381</a>     <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="1382" href="#1382">1382</a> <em class="jxr_javadoccomment">     * A constructor that reads files with the latest minor version.</em>
-<a class="jxr_linenumber" name="1383" href="#1383">1383</a> <em class="jxr_javadoccomment">     * This is used by unit tests only.</em>
-<a class="jxr_linenumber" name="1384" href="#1384">1384</a> <em class="jxr_javadoccomment">     */</em>
-<a class="jxr_linenumber" name="1385" href="#1385">1385</a>     <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.html">FSReaderImpl</a>(FSDataInputStream istream, <strong class="jxr_keyword">long</strong> fileSize, <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileContext.html">HFileContext</a> fileContext)
-<a class="jxr_linenumber" name="1386" href="#1386">1386</a>     <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1387" href="#1387">1387</a>       <strong class="jxr_keyword">this</strong>(<strong class="jxr_keyword">new</strong> <a href="../../../../../../org/apache/hadoop/hbase/io/FSDataInputStreamWrapper.html">FSDataInputStreamWrapper</a>(istream), fileSize, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>, fileContext);
-<a class="jxr_linenumber" name="1388" href="#1388">1388</a>     }
-<a class="jxr_linenumber" name="1389" href="#1389">1389</a> 
-<a class="jxr_linenumber" name="1390" href="#1390">1390</a>     <strong class="jxr_keyword">public</strong> <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.html">BlockIterator</a> blockRange(<strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">long</strong> startOffset, <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">long</strong> endOffset) {
-<a class="jxr_linenumber" name="1391" href="#1391">1391</a>       <strong class="jxr_keyword">final</strong> <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.html">FSReader</a> owner = <strong class="jxr_keyword">this</strong>; <em class="jxr_comment">// handle for inner class</em>
-<a class="jxr_linenumber" name="1392" href="#1392">1392</a>       <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.html">BlockIterator</a>() {
-<a class="jxr_linenumber" name="1393" href="#1393">1393</a>         <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">long</strong> offset = startOffset;
-<a class="jxr_linenumber" name="1394" href="#1394">1394</a> 
-<a class="jxr_linenumber" name="1395" href="#1395">1395</a>         @Override
-<a class="jxr_linenumber" name="1396" href="#1396">1396</a>         <strong class="jxr_keyword">public</strong> <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.html">HFileBlock</a> nextBlock() <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1397" href="#1397">1397</a>           <strong class="jxr_keyword">if</strong> (offset &gt;= endOffset)
-<a class="jxr_linenumber" name="1398" href="#1398">1398</a>             <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="1399" href="#1399">1399</a>           <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.html">HFileBlock</a> b = readBlockData(offset, -1, -1, false);
-<a class="jxr_linenumber" name="1400" href="#1400">1400</a>           offset += b.getOnDiskSizeWithHeader();
-<a class="jxr_linenumber" name="1401" href="#1401">1401</a>           <strong class="jxr_keyword">return</strong> b.unpack(fileContext, owner);
-<a class="jxr_linenumber" name="1402" href="#1402">1402</a>         }
-<a class="jxr_linenumber" name="1403" href="#1403">1403</a> 
-<a class="jxr_linenumber" name="1404" href="#1404">1404</a>         @Override
-<a class="jxr_linenumber" name="1405" href="#1405">1405</a>         <strong class="jxr_keyword">public</strong> <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.html">HFileBlock</a> nextBlockWithBlockType(<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html">BlockType</a> blockType)
-<a class="jxr_linenumber" name="1406" href="#1406">1406</a>             <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1407" href="#1407">1407</a>           <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.html">HFileBlock</a> blk = nextBlock();
-<a class="jxr_linenumber" name="1408" href="#1408">1408</a>           <strong class="jxr_keyword">if</strong> (blk.getBlockType() != blockType) {
-<a class="jxr_linenumber" name="1409" href="#1409">1409</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IOException(<span class="jxr_string">"Expected block of type "</span> + blockType
-<a class="jxr_linenumber" name="1410" href="#1410">1410</a>                 + <span class="jxr_string">" but found "</span> + blk.getBlockType());
-<a class="jxr_linenumber" name="1411" href="#1411">1411</a>           }
-<a class="jxr_linenumber" name="1412" href="#1412">1412</a>           <strong class="jxr_keyword">return</strong> blk;
-<a class="jxr_linenumber" name="1413" href="#1413">1413</a>         }
-<a class="jxr_linenumber" name="1414" href="#1414">1414</a>       };
-<a class="jxr_linenumber" name="1415" href="#1415">1415</a>     }
-<a class="jxr_linenumber" name="1416" href="#1416">1416</a> 
-<a class="jxr_linenumber" name="1417" href="#1417">1417</a>     <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="1418" href="#1418">1418</a> <em class="jxr_javadoccomment">     * Does a positional read or a seek and read into the given buffer. Returns</em>
-<a class="jxr_linenumber" name="1419" href="#1419">1419</a> <em class="jxr_javadoccomment">     * the on-disk size of the next block, or -1 if it could not be determined.</em>
-<a class="jxr_linenumber" name="1420" href="#1420">1420</a> <em class="jxr_javadoccomment">     *</em>
-<a class="jxr_linenumber" name="1421" href="#1421">1421</a> <em class="jxr_javadoccomment">     * @param dest destination buffer</em>
-<a class="jxr_linenumber" name="1422" href="#1422">1422</a> <em class="jxr_javadoccomment">     * @param destOffset offset in the destination buffer</em>
-<a class="jxr_linenumber" name="1423" href="#1423">1423</a> <em class="jxr_javadoccomment">     * @param size size of the block to be read</em>
-<a class="jxr_linenumber" name="1424" href="#1424">1424</a> <em class="jxr_javadoccomment">     * @param peekIntoNextBlock whether to read the next block's on-disk size</em>
-<a class="jxr_linenumber" name="1425" href="#1425">1425</a> <em class="jxr_javadoccomment">     * @param fileOffset position in the stream to read at</em>
-<a class="jxr_linenumber" name="1426" href="#1426">1426</a> <em class="jxr_javadoccomment">     * @param pread whether we should do a positional read</em>
-<a class="jxr_linenumber" name="1427" href="#1427">1427</a> <em class="jxr_javadoccomment">     * @param istream The input source of data</em>
-<a class="jxr_linenumber" name="1428" href="#1428">1428</a> <em class="jxr_javadoccomment">     * @return the on-disk size of the next block with header size included, or</em>
-<a class="jxr_linenumber" name="1429" href="#1429">1429</a> <em class="jxr_javadoccomment">     *         -1 if it could not be determined</em>
-<a class="jxr_linenumber" name="1430" href="#1430">1430</a> <em class="jxr_javadoccomment">     * @throws IOException</em>
-<a class="jxr_linenumber" name="1431" href="#1431">1431</a> <em class="jxr_javadoccomment">     */</em>
-<a class="jxr_linenumber" name="1432" href="#1432">1432</a>     <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">int</strong> readAtOffset(FSDataInputStream istream,
-<a class="jxr_linenumber" name="1433" href="#1433">1433</a>         byte[] dest, <strong class="jxr_keyword">int</strong> destOffset, <strong class="jxr_keyword">int</strong> size,
-<a class="jxr_linenumber" name="1434" href="#1434">1434</a>         <strong class="jxr_keyword">boolean</strong> peekIntoNextBlock, <strong class="jxr_keyword">long</strong> fileOffset, <strong class="jxr_keyword">boolean</strong> pread)
-<a class="jxr_linenumber" name="1435" href="#1435">1435</a>         <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1436" href="#1436">1436</a>       <strong class="jxr_keyword">if</strong> (peekIntoNextBlock &amp;&amp;
-<a class="jxr_linenumber" name="1437" href="#1437">1437</a>           destOffset + size + hdrSize &gt; dest.length) {
-<a class="jxr_linenumber" name="1438" href="#1438">1438</a>         <em class="jxr_comment">// We are asked to read the next block's header as well, but there is</em>
-<a class="jxr_linenumber" name="1439" href="#1439">1439</a>         <em class="jxr_comment">// not enough room in the array.</em>
-<a class="jxr_linenumber" name="1440" href="#1440">1440</a>         <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IOException(<span class="jxr_string">"Attempted to read "</span> + size + <span class="jxr_string">" bytes and "</span> +
-<a class="jxr_linenumber" name="1441" href="#1441">1441</a>             hdrSize + <span class="jxr_string">" bytes of next header into a "</span> + dest.length +
-<a class="jxr_linenumber" name="1442" href="#1442">1442</a>             <span class="jxr_string">"-byte array at offset "</span> + destOffset);
-<a class="jxr_linenumber" name="1443" href="#1443">1443</a>       }
-<a class="jxr_linenumber" name="1444" href="#1444">1444</a> 
-<a class="jxr_linenumber" name="1445" href="#1445">1445</a>       <strong class="jxr_keyword">if</strong> (!pread &amp;&amp; streamLock.tryLock()) {
-<a class="jxr_linenumber" name="1446" href="#1446">1446</a>         <em class="jxr_comment">// Seek + read. Better for scanning.</em>
-<a class="jxr_linenumber" name="1447" href="#1447">1447</a>         <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="1448" href="#1448">1448</a>           istream.seek(fileOffset);
-<a class="jxr_linenumber" name="1449" href="#1449">1449</a> 
-<a class="jxr_linenumber" name="1450" href="#1450">1450</a>           <strong class="jxr_keyword">long</strong> realOffset = istream.getPos();
-<a class="jxr_linenumber" name="1451" href="#1451">1451</a>           <strong class="jxr_keyword">if</strong> (realOffset != fileOffset) {
-<a class="jxr_linenumber" name="1452" href="#1452">1452</a>             <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IOException(<span class="jxr_string">"Tried to seek to "</span> + fileOffset + <span class="jxr_string">" to "</span>
-<a class="jxr_linenumber" name="1453" href="#1453">1453</a>                 + <span class="jxr_string">"read "</span> + size + <span class="jxr_string">" bytes, but pos="</span> + realOffset
-<a class="jxr_linenumber" name="1454" href="#1454">1454</a>                 + <span class="jxr_string">" after seek"</span>);
-<a class="jxr_linenumber" name="1455" href="#1455">1455</a>           }
-<a class="jxr_linenumber" name="1456" href="#1456">1456</a> 
-<a class="jxr_linenumber" name="1457" href="#1457">1457</a>           <strong class="jxr_keyword">if</strong> (!peekIntoNextBlock) {
-<a class="jxr_linenumber" name="1458" href="#1458">1458</a>             IOUtils.readFully(istream, dest, destOffset, size);
-<a class="jxr_linenumber" name="1459" href="#1459">1459</a>             <strong class="jxr_keyword">return</strong> -1;
-<a class="jxr_linenumber" name="1460" href="#1460">1460</a>           }
-<a class="jxr_linenumber" name="1461" href="#1461">1461</a> 
-<a class="jxr_linenumber" name="1462" href="#1462">1462</a>           <em class="jxr_comment">// Try to read the next block header.</em>
-<a class="jxr_linenumber" name="1463" href="#1463">1463</a>           <strong class="jxr_keyword">if</strong> (!readWithExtra(istream, dest, destOffset, size, hdrSize))
-<a class="jxr_linenumber" name="1464" href="#1464">1464</a>             <strong class="jxr_keyword">return</strong> -1;
-<a class="jxr_linenumber" name="1465" href="#1465">1465</a>         } <strong class="jxr_keyword">finally</strong> {
-<a class="jxr_linenumber" name="1466" href="#1466">1466</a>           streamLock.unlock();
-<a class="jxr_linenumber" name="1467" href="#1467">1467</a>         }
-<a class="jxr_linenumber" name="1468" href="#1468">1468</a>       } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="1469" href="#1469">1469</a>         <em class="jxr_comment">// Positional read. Better for random reads; or when the streamLock is already locked.</em>
-<a class="jxr_linenumber" name="1470" href="#1470">1470</a>         <strong class="jxr_keyword">int</strong> extraSize = peekIntoNextBlock ? hdrSize : 0;
-<a class="jxr_linenumber" name="1471" href="#1471">1471</a>         <strong class="jxr_keyword">if</strong> (!positionalReadWithExtra(istream, fileOffset, dest, destOffset,
-<a class="jxr_linenumber" name="1472" href="#1472">1472</a>             size, extraSize)) {
-<a class="jxr_linenumber" name="1473" href="#1473">1473</a>           <strong class="jxr_keyword">return</strong> -1;
-<a class="jxr_linenumber" name="1474" href="#1474">1474</a>         }
-<a class="jxr_linenumber" name="1475" href="#1475">1475</a>       }
-<a class="jxr_linenumber" name="1476" href="#1476">1476</a> 
-<a class="jxr_linenumber" name="1477" href="#1477">1477</a>       assert peekIntoNextBlock;
-<a class="jxr_linenumber" name="1478" href="#1478">1478</a>       <strong class="jxr_keyword">return</strong> Bytes.toInt(dest, destOffset + size + BlockType.MAGIC_LENGTH) + hdrSize;
-<a class="jxr_linenumber" name="1479" href="#1479">1479</a>     }
-<a class="jxr_linenumber" name="1480" href="#1480">1480</a> 
-<a class="jxr_linenumber" name="1481" href="#1481">1481</a>     <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="1482" href="#1482">1482</a> <em class="jxr_javadoccomment">     * Reads a version 2 block (version 1 blocks not supported and not expected). Tries to do as</em>
-<a class="jxr_linenumber" name="1483" href="#1483">1483</a> <em class="jxr_javadoccomment">     * little memory allocation as possible, using the provided on-disk size.</em>
-<a class="jxr_linenumber" name="1484" href="#1484">1484</a> <em class="jxr_javadoccomment">     *</em>
-<a class="jxr_linenumber" name="1485" href="#1485">1485</a> <em class="jxr_javadoccomment">     * @param offset the offset in the stream to read at</em>
-<a class="jxr_linenumber" name="1486" href="#1486">1486</a> <em class="jxr_javadoccomment">     * @param onDiskSizeWithHeaderL the on-disk size of the block, including</em>
-<a class="jxr_linenumber" name="1487" href="#1487">1487</a> <em class="jxr_javadoccomment">     *          the header, or -1 if unknown</em>
-<a class="jxr_linenumber" name="1488" href="#1488">1488</a> <em class="jxr_javadoccomment">     * @param uncompressedSize the uncompressed size of the the block. Always</em>
-<a class="jxr_linenumber" name="1489" href="#1489">1489</a> <em class="jxr_javadoccomment">     *          expected to be -1. This parameter is only used in version 1.</em>
-<a class="jxr_linenumber" name="1490" href="#1490">1490</a> <em class="jxr_javadoccomment">     * @param pread whether to use a positional read</em>
-<a class="jxr_linenumber" name="1491" href="#1491">1491</a> <em class="jxr_javadoccomment">     */</em>
-<a class="jxr_linenumber" name="1492" href="#1492">1492</a>     @Override
-<a class="jxr_linenumber" name="1493" href="#1493">1493</a>     <strong class="jxr_keyword">public</strong> <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.html">HFileBlock</a> readBlockData(<strong class="jxr_keyword">long</strong> offset, <strong class="jxr_keyword">long</strong> onDiskSizeWithHeaderL,
-<a class="jxr_linenumber" name="1494" href="#1494">1494</a>         <strong class="jxr_keyword">int</strong> uncompressedSize, <strong class="jxr_keyword">boolean</strong> pread)
-<a class="jxr_linenumber" name="1495" href="#1495">1495</a>     <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1496" href="#1496">1496</a> 
-<a class="jxr_linenumber" name="1497" href="#1497">1497</a>       <em class="jxr_comment">// get a copy of the current state of whether to validate</em>
-<a class="jxr_linenumber" name="1498" href="#1498">1498</a>       <em class="jxr_comment">// hbase checksums or not for this read call. This is not</em>
-<a class="jxr_linenumber" name="1499" href="#1499">1499</a>       <em class="jxr_comment">// thread-safe but the one constaint is that if we decide</em>
-<a class="jxr_linenumber" name="1500" href="#1500">1500</a>       <em class="jxr_comment">// to skip hbase checksum verification then we are</em>
-<a class="jxr_linenumber" name="1501" href="#1501">1501</a>       <em class="jxr_comment">// guaranteed to use hdfs checksum verification.</em>
-<a class="jxr_linenumber" name="1502" href="#1502">1502</a>       <strong class="jxr_keyword">boolean</strong> doVerificationThruHBaseChecksum = streamWrapper.shouldUseHBaseChecksum();
-<a class="jxr_linenumber" name="1503" href="#1503">1503</a>       FSDataInputStream is = streamWrapper.getStream(doVerificationThruHBaseChecksum);
-<a class="jxr_linenumber" name="1504" href="#1504">1504</a> 
-<a class="jxr_linenumber" name="1505" href="#1505">1505</a>       <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.html">HFileBlock</a> blk = readBlockDataInternal(is, offset,
-<a class="jxr_linenumber" name="1506" href="#1506">1506</a>                          onDiskSizeWithHeaderL,
-<a class="jxr_linenumber" name="1507" href="#1507">1507</a>                          uncompressedSize, pread,
-<a class="jxr_linenumber" name="1508" href="#1508">1508</a>                          doVerificationThruHBaseChecksum);
-<a class="jxr_linenumber" name="1509" href="#1509">1509</a>       <strong class="jxr_keyword">if</strong> (blk == <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="1510" href="#1510">1510</a>         HFile.LOG.warn(<span class="jxr_string">"HBase checksum verification failed for file "</span> +
-<a class="jxr_linenumber" name="1511" href="#1511">1511</a>                        path + <span class="jxr_string">" at offset "</span> +
-<a class="jxr_linenumber" name="1512" href="#1512">1512</a>                        offset + <span class="jxr_string">" filesize "</span> + fileSize +
-<a class="jxr_linenumber" name="1513" href="#1513">1513</a>                        <span class="jxr_string">". Retrying read with HDFS checksums turned on..."</span>);
-<a class="jxr_linenumber" name="1514" href="#1514">1514</a> 
-<a class="jxr_linenumber" name="1515" href="#1515">1515</a>         <strong class="jxr_keyword">if</strong> (!doVerificationThruHBaseChecksum) {
-<a class="jxr_linenumber" name="1516" href="#1516">1516</a>           String msg = <span class="jxr_string">"HBase checksum verification failed for file "</span> +
-<a class="jxr_linenumber" name="1517" href="#1517">1517</a>                        path + <span class="jxr_string">" at offset "</span> +
-<a class="jxr_linenumber" name="1518" href="#1518">1518</a>                        offset + <span class="jxr_string">" filesize "</span> + fileSize +
-<a class="jxr_linenumber" name="1519" href="#1519">1519</a>                        <span class="jxr_string">" but this cannot happen because doVerify is "</span> +
-<a class="jxr_linenumber" name="1520" href="#1520">1520</a>                        doVerificationThruHBaseChecksum;
-<a class="jxr_linenumber" name="1521" href="#1521">1521</a>           HFile.LOG.warn(msg);
-<a class="jxr_linenumber" name="1522" href="#1522">1522</a>           <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IOException(msg); <em class="jxr_comment">// cannot happen case here</em>
-<a class="jxr_linenumber" name="1523" href="#1523">1523</a>         }
-<a class="jxr_linenumber" name="1524" href="#1524">1524</a>         HFile.checksumFailures.incrementAndGet(); <em class="jxr_comment">// update metrics</em>
-<a class="jxr_linenumber" name="1525" href="#1525">1525</a> 
-<a class="jxr_linenumber" name="1526" href="#1526">1526</a>         <em class="jxr_comment">// If we have a checksum failure, we fall back into a mode where</em>
-<a class="jxr_linenumber" name="1527" href="#1527">1527</a>         <em class="jxr_comment">// the next few reads use HDFS level checksums. We aim to make the</em>
-<a class="jxr_linenumber" name="1528" href="#1528">1528</a>         <em class="jxr_comment">// next CHECKSUM_VERIFICATION_NUM_IO_THRESHOLD reads avoid</em>
-<a class="jxr_linenumber" name="1529" href="#1529">1529</a>         <em class="jxr_comment">// hbase checksum verification, but since this value is set without</em>
-<a class="jxr_linenumber" name="1530" href="#1530">1530</a>         <em class="jxr_comment">// holding any locks, it can so happen that we might actually do</em>
-<a class="jxr_linenumber" name="1531" href="#1531">1531</a>         <em class="jxr_comment">// a few more than precisely this number.</em>
-<a class="jxr_linenumber" name="1532" href="#1532">1532</a>         is = <strong class="jxr_keyword">this</strong>.streamWrapper.fallbackToFsChecksum(CHECKSUM_VERIFICATION_NUM_IO_THRESHOLD);
-<a class="jxr_linenumber" name="1533" href="#1533">1533</a>         doVerificationThruHBaseChecksum = false;
-<a class="jxr_linenumber" name="1534" href="#1534">1534</a>         blk = readBlockDataInternal(is, offset, onDiskSizeWithHeaderL,
-<a class="jxr_linenumber" name="1535" href="#1535">1535</a>                                     uncompressedSize, pread,
-<a class="jxr_linenumber" name="1536" href="#1536">1536</a>                                     doVerificationThruHBaseChecksum);
-<a class="jxr_linenumber" name="1537" href="#1537">1537</a>         <strong class="jxr_keyword">if</strong> (blk != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="1538" href="#1538">1538</a>           HFile.LOG.warn(<span class="jxr_string">"HDFS checksum verification suceeded for file "</span> +
-<a class="jxr_linenumber" name="1539" href="#1539">1539</a>                          path + <span class="jxr_string">" at offset "</span> +
-<a class="jxr_linenumber" name="1540" href="#1540">1540</a>                          offset + <span class="jxr_string">" filesize "</span> + fileSize);
-<a class="jxr_linenumber" name="1541" href="#1541">1541</a>         }
-<a class="jxr_linenumber" name="1542" href="#1542">1542</a>       }
-<a class="jxr_linenumber" name="1543" href="#1543">1543</a>       <strong class="jxr_keyword">if</strong> (blk == <strong class="jxr_keyword">null</strong> &amp;&amp; !doVerificationThruHBaseChecksum) {
-<a class="jxr_linenumber" name="1544" href="#1544">1544</a>         String msg = <span class="jxr_string">"readBlockData failed, possibly due to "</span> +
-<a class="jxr_linenumber" name="1545" href="#1545">1545</a>                      <span class="jxr_string">"checksum verification failed for file "</span> + path +
-<a class="jxr_linenumber" name="1546" href="#1546">1546</a>                      <span class="jxr_string">" at offset "</span> + offset + <span class="jxr_string">" filesize "</span> + fileSize;
-<a class="jxr_linenumber" name="1547" href="#1547">1547</a>         HFile.LOG.warn(msg);
-<a class="jxr_linenumber" name="1548" href="#1548">1548</a>         <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IOException(msg);
-<a class="jxr_linenumber" name="1549" href="#1549">1549</a>       }
-<a class="jxr_linenumber" name="1550" href="#1550">1550</a> 
-<a class="jxr_linenumber" name="1551" href="#1551">1551</a>       <em class="jxr_comment">// If there is a checksum mismatch earlier, then retry with</em>
-<a class="jxr_linenumber" name="1552" href="#1552">1552</a>       <em class="jxr_comment">// HBase checksums switched off and use HDFS checksum verification.</em>
-<a class="jxr_linenumber" name="1553" href="#1553">1553</a>       <em class="jxr_comment">// This triggers HDFS to detect and fix corrupt replicas. The</em>
-<a class="jxr_linenumber" name="1554" href="#1554">1554</a>       <em class="jxr_comment">// next checksumOffCount read requests will use HDFS checksums.</em>
-<a class="jxr_linenumber" name="1555" href="#1555">1555</a>       <em class="jxr_comment">// The decrementing of this.checksumOffCount is not thread-safe,</em>
-<a class="jxr_linenumber" name="1556" href="#1556">1556</a>       <em class="jxr_comment">// but it is harmless because eventually checksumOffCount will be</em>
-<a class="jxr_linenumber" name="1557" href="#1557">1557</a>       <em class="jxr_comment">// a negative number.</em>
-<a class="jxr_linenumber" name="1558" href="#1558">1558</a>       streamWrapper.checksumOk();
-<a class="jxr_linenumber" name="1559" href="#1559">1559</a>       <strong class="jxr_keyword">return</strong> blk;
-<a class="jxr_linenumber" name="1560" href="#1560">1560</a>     }
-<a class="jxr_linenumber" name="1561" href="#1561">1561</a> 
-<a class="jxr_linenumber" name="1562" href="#1562">1562</a>     <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="1563" href="#1563">1563</a> <em class="jxr_javadoccomment">     * Reads a version 2 block.</em>
-<a class="jxr_linenumber" name="1564" href="#1564">1564</a> <em class="jxr_javadoccomment">     *</em>
-<a class="jxr_linenumber" name="1565" href="#1565">1565</a> <em class="jxr_javadoccomment">     * @param offset the offset in the stream to read at</em>
-<a class="jxr_linenumber" name="1566" href="#1566">1566</a> <em class="jxr_javadoccomment">     * @param onDiskSizeWithHeaderL the on-disk size of the block, including</em>
-<a class="jxr_linenumber" name="1567" href="#1567">1567</a> <em class="jxr_javadoccomment">     *          the header, or -1 if unknown</em>
-<a class="jxr_linenumber" name="1568" href="#1568">1568</a> <em class="jxr_javadoccomment">     * @param uncompressedSize the uncompressed size of the the block. Always</em>
-<a class="jxr_linenumber" name="1569" href="#1569">1569</a> <em class="jxr_javadoccomment">     *          expected to be -1. This parameter is only used in version 1.</em>
-<a class="jxr_linenumber" name="1570" href="#1570">1570</a> <em class="jxr_javadoccomment">     * @param pread whether to use a positional read</em>
-<a class="jxr_linenumber" name="1571" href="#1571">1571</a> <em class="jxr_javadoccomment">     * @param verifyChecksum Whether to use HBase checksums.</em>
-<a class="jxr_linenumber" name="1572" href="#1572">1572</a> <em class="jxr_javadoccomment">     *        If HBase checksum is switched off, then use HDFS checksum.</em>
-<a class="jxr_linenumber" name="1573" href="#1573">1573</a> <em class="jxr_javadoccomment">     * @return the HFileBlock or null if there is a HBase checksum mismatch</em>
-<a class="jxr_linenumber" name="1574" href="#1574">1574</a> <em class="jxr_javadoccomment">     */</em>
-<a class="jxr_linenumber" name="1575" href="#1575">1575</a>     <strong class="jxr_keyword">private</strong> <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.html">HFileBlock</a> readBlockDataInternal(FSDataInputStream is, <strong class="jxr_keyword">long</strong> offset,
-<a class="jxr_linenumber" name="1576" href="#1576">1576</a>         <strong class="jxr_keyword">long</strong> onDiskSizeWithHeaderL, <strong class="jxr_keyword">int</strong> uncompressedSize, <strong class="jxr_keyword">boolean</strong> pread,
-<a class="jxr_linenumber" name="1577" href="#1577">1577</a>         <strong class="jxr_keyword">boolean</strong> verifyChecksum)
-<a class="jxr_linenumber" name="1578" href="#1578">1578</a>     <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1579" href="#1579">1579</a>       <strong class="jxr_keyword">if</strong> (offset &lt; 0) {
-<a class="jxr_linenumber" name="1580" href="#1580">1580</a>         <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IOException(<span class="jxr_string">"Invalid offset="</span> + offset + <span class="jxr_string">" trying to read "</span>
-<a class="jxr_linenumber" name="1581" href="#1581">1581</a>             + <span class="jxr_string">"block (onDiskSize="</span> + onDiskSizeWithHeaderL
-<a class="jxr_linenumber" name="1582" href="#1582">1582</a>             + <span class="jxr_string">", uncompressedSize="</span> + uncompressedSize + <span class="jxr_string">")"</span>);
-<a class="jxr_linenumber" name="1583" href="#1583">1583</a>       }
-<a class="jxr_linenumber" name="1584" href="#1584">1584</a> 
-<a class="jxr_linenumber" name="1585" href="#1585">1585</a>       <strong class="jxr_keyword">if</strong> (uncompressedSize != -1) {
-<a class="jxr_linenumber" name="1586" href="#1586">1586</a>         <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IOException(<span class="jxr_string">"Version 2 block reader API does not need "</span> +
-<a class="jxr_linenumber" name="1587" href="#1587">1587</a>             <span class="jxr_string">"the uncompressed size parameter"</span>);
-<a class="jxr_linenumber" name="1588" href="#1588">1588</a>       }
-<a class="jxr_linenumber" name="1589" href="#1589">1589</a> 
-<a class="jxr_linenumber" name="1590" href="#1590">1590</a>       <strong class="jxr_keyword">if</strong> ((onDiskSizeWithHeaderL &lt; hdrSize &amp;&amp; onDiskSizeWithHeaderL != -1)
-<a class="jxr_linenumber" name="1591" href="#1591">1591</a>           || onDiskSizeWithHeaderL &gt;= Integer.MAX_VALUE) {
-<a class="jxr_linenumber" name="1592" href="#1592">1592</a>         <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IOException(<span class="jxr_string">"Invalid onDisksize="</span> + onDiskSizeWithHeaderL
-<a class="jxr_linenumber" name="1593" href="#1593">1593</a>             + <span class="jxr_string">": expected to be at least "</span> + hdrSize
-<a class="jxr_linenumber" name="1594" href="#1594">1594</a>             + <span class="jxr_string">" and at most "</span> + Integer.MAX_VALUE + <span class="jxr_string">", or -1 (offset="</span>
-<a class="jxr_linenumber" name="1595" href="#1595">1595</a>             + offset + <span class="jxr_string">", uncompressedSize="</span> + uncompressedSize + <span class="jxr_string">")"</span>);
-<a class="jxr_linenumber" name="1596" href="#1596">1596</a>       }
-<a class="jxr_linenumber" name="1597" href="#1597">1597</a> 
-<a class="jxr_linenumber" name="1598" href="#1598">1598</a>       <strong class="jxr_keyword">int</strong> onDiskSizeWithHeader = (<strong class="jxr_keyword">int</strong>) onDiskSizeWithHeaderL;
-<a class="jxr_linenumber" name="1599" href="#1599">1599</a>       <em class="jxr_comment">// See if we can avoid reading the header. This is desirable, because</em>
-<a class="jxr_linenumber" name="1600" href="#1600">1600</a>       <em class="jxr_comment">// we will not incur a backward seek operation if we have already</em>
-<a class="jxr_linenumber" name="1601" href="#1601">1601</a>       <em class="jxr_comment">// read this block's header as part of the previous read's look-ahead.</em>
-<a class="jxr_linenumber" name="1602" href="#1602">1602</a>       <em class="jxr_comment">// And we also want to skip reading the header again if it has already</em>
-<a class="jxr_linenumber" name="1603" href="#1603">1603</a>       <em class="jxr_comment">// been read.</em>
-<a class="jxr_linenumber" name="1604" href="#1604">1604</a>       <em class="jxr_comment">// TODO: How often does this optimization fire? Has to be same thread so the thread local</em>
-<a class="jxr_linenumber" name="1605" href="#1605">1605</a>       <em class="jxr_comment">// is pertinent and we have to be reading next block as in a big scan.</em>
-<a class="jxr_linenumber" name="1606" href="#1606">1606</a>       <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.html">PrefetchedHeader</a> prefetchedHeader = prefetchedHeaderForThread.get();
-<a class="jxr_linenumber" name="1607" href="#1607">1607</a>       ByteBuffer headerBuf = prefetchedHeader.offset == offset? prefetchedHeader.buf: <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="1608" href="#1608">1608</a> 
-<a class="jxr_linenumber" name="1609" href="#1609">1609</a>       <em class="jxr_comment">// Allocate enough space to fit the next block's header too.</em>
-<a class="jxr_linenumber" name="1610" href="#1610">1610</a>       <strong class="jxr_keyword">int</strong> nextBlockOnDiskSize = 0;
-<a class="jxr_linenumber" name="1611" href="#1611">1611</a>       byte[] onDiskBlock = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="1612" href="#1612">1612</a> 
-<a class="jxr_linenumber" name="1613" href="#1613">1613</a>       <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.html">HFileBlock</a> b = <strong class="jxr_keyword">null</strong>;
-<a class="jxr_linenumber" name="1614" href="#1614">1614</a>       <strong class="jxr_keyword">if</strong> (onDiskSizeWithHeader &gt; 0) {
-<a class="jxr_linenumber" name="1615" href="#1615">1615</a>         <em class="jxr_comment">// We know the total on-disk size. Read the entire block into memory,</em>
-<a class="jxr_linenumber" name="1616" href="#1616">1616</a>         <em class="jxr_comment">// then parse the header. This code path is used when</em>
-<a class="jxr_linenumber" name="1617" href="#1617">1617</a>         <em class="jxr_comment">// doing a random read operation relying on the block index, as well as</em>
-<a class="jxr_linenumber" name="1618" href="#1618">1618</a>         <em class="jxr_comment">// when the client knows the on-disk size from peeking into the next</em>
-<a class="jxr_linenumber" name="1619" href="#1619">1619</a>         <em class="jxr_comment">// block's header (e.g. this block's header) when reading the previous</em>
-<a class="jxr_linenumber" name="1620" href="#1620">1620</a>         <em class="jxr_comment">// block. This is the faster and more preferable case.</em>
-<a class="jxr_linenumber" name="1621" href="#1621">1621</a> 
-<a class="jxr_linenumber" name="1622" href="#1622">1622</a>         <em class="jxr_comment">// Size that we have to skip in case we have already read the header.</em>
-<a class="jxr_linenumber" name="1623" href="#1623">1623</a>         <strong class="jxr_keyword">int</strong> preReadHeaderSize = headerBuf == <strong class="jxr_keyword">null</strong> ? 0 : hdrSize;
-<a class="jxr_linenumber" name="1624" href="#1624">1624</a>         onDiskBlock = <strong class="jxr_keyword">new</strong> byte[onDiskSizeWithHeader + hdrSize]; <em class="jxr_comment">// room for this block plus the</em>
-<a class="jxr_linenumber" name="1625" href="#1625">1625</a>                                                                 <em class="jxr_comment">// next block's header</em>
-<a class="jxr_linenumber" name="1626" href="#1626">1626</a>         nextBlockOnDiskSize = readAtOffset(is, onDiskBlock,
-<a class="jxr_linenumber" name="1627" href="#1627">1627</a>             preReadHeaderSize, onDiskSizeWithHeader - preReadHeaderSize,
-<a class="jxr_linenumber" name="1628" href="#1628">1628</a>             <strong class="jxr_keyword">true</strong>, offset + preReadHeaderSize, pread);
-<a class="jxr_linenumber" name="1629" href="#1629">1629</a>         <strong class="jxr_keyword">if</strong> (headerBuf != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="1630" href="#1630">1630</a>           <em class="jxr_comment">// the header has been read when reading the previous block, copy</em>
-<a class="jxr_linenumber" name="1631" href="#1631">1631</a>           <em class="jxr_comment">// to this block's header</em>
-<a class="jxr_linenumber" name="1632" href="#1632">1632</a>           <em class="jxr_comment">// headerBuf is HBB</em>
-<a class="jxr_linenumber" name="1633" href="#1633">1633</a>           assert headerBuf.hasArray();
-<a class="jxr_linenumber" name="1634" href="#1634">1634</a>           System.arraycopy(headerBuf.array(),
-<a class="jxr_linenumber" name="1635" href="#1635">1635</a>               headerBuf.arrayOffset(), onDiskBlock, 0, hdrSize);
-<a class="jxr_linenumber" name="1636" href="#1636">1636</a>         } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="1637" href="#1637">1637</a>           headerBuf = ByteBuffer.wrap(onDiskBlock, 0, hdrSize);
-<a class="jxr_linenumber" name="1638" href="#1638">1638</a>         }
-<a class="jxr_linenumber" name="1639" href="#1639">1639</a>         <em class="jxr_comment">// We know the total on-disk size but not the uncompressed size. Parse the header.</em>
-<a class="jxr_linenumber" name="1640" href="#1640">1640</a>         <strong class="jxr_keyword">try</strong> {
-<a class="jxr_linenumber" name="1641" href="#1641">1641</a>           <em class="jxr_comment">// TODO: FIX!!! Expensive parse just to get a length</em>
-<a class="jxr_linenumber" name="1642" href="#1642">1642</a>           b = <strong class="jxr_keyword">new</strong> <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.html">HFileBlock</a>(headerBuf, fileContext.isUseHBaseChecksum());
-<a class="jxr_linenumber" name="1643" href="#1643">1643</a>         } <strong class="jxr_keyword">catch</strong> (IOException ex) {
-<a class="jxr_linenumber" name="1644" href="#1644">1644</a>           <em class="jxr_comment">// Seen in load testing. Provide comprehensive debug info.</em>
-<a class="jxr_linenumber" name="1645" href="#1645">1645</a>           <strong class="jxr_keyword">throw</strong> <strong class="jxr_keyword">new</strong> IOException(<span class="jxr_string">"Failed to read compressed block at "</span>
-<a class="jxr_linenumber" name="1646" href="#1646">1646</a>               + offset
-<a class="jxr_linenumber" name="1647" href="#1647">1647</a>               + <span class="jxr_string">", onDiskSizeWithoutHeader="</span>
-<a class="jxr_linenumber" name="1648" href="#1648">1648</a>               + onDiskSizeWithHeader
-<a class="jxr_linenumber" name="1649" href="#1649">1649</a>               + <span class="jxr_string">", preReadHeaderSize="</span>
-<a class="jxr_linenumber" name="1650" href="#1650">1650</a>               + hdrSize
-<a class="jxr_linenumber" name="1651" href="#1651">1651</a>               + <span class="jxr_string">", header.length="</span>
-<a class="jxr_linenumber" name="1652" href="#1652">1652</a>               + prefetchedHeader.header.length
-<a class="jxr_linenumber" name="1653" href="#1653">1653</a>               + <span class="jxr_string">", header bytes: "</span>
-<a class="jxr_linenumber" name="1654" href="#1654">1654</a>               + Bytes.toStringBinary(prefetchedHeader.header, 0,
-<a class="jxr_linenumber" name="1655" href="#1655">1655</a>                   hdrSize), ex);
-<a class="jxr_linenumber" name="1656" href="#1656">1656</a>         }
-<a class="jxr_linenumber" name="1657" href="#1657">1657</a>         <em class="jxr_comment">// if the caller specifies a onDiskSizeWithHeader, validate it.</em>
-<a class="jxr_linenumber" name="1658" href="#1658">1658</a>         <strong class="jxr_keyword">int</strong> onDiskSizeWithoutHeader = onDiskSizeWithHeader - hdrSize;
-<a class="jxr_linenumber" name="1659" href="#1659">1659</a>         assert onDiskSizeWithoutHeader &gt;= 0;
-<a class="jxr_linenumber" name="1660" href="#1660">1660</a>         b.validateOnDiskSizeWithoutHeader(onDiskSizeWithoutHeader);
-<a class="jxr_linenumber" name="1661" href="#1661">1661</a>       } <strong class="jxr_keyword">else</strong> {
-<a class="jxr_linenumber" name="1662" href="#1662">1662</a>         <em class="jxr_comment">// Check headerBuf to see if we have read this block's header as part of</em>
-<a class="jxr_linenumber" name="1663" href="#1663">1663</a>         <em class="jxr_comment">// reading the previous block. This is an optimization of peeking into</em>
-<a class="jxr_linenumber" name="1664" href="#1664">1664</a>         <em class="jxr_comment">// the next block's header (e.g.this block's header) when reading the</em>
-<a class="jxr_linenumber" name="1665" href="#1665">1665</a>         <em class="jxr_comment">// previous block. This is the faster and more preferable case. If the</em>
-<a class="jxr_linenumber" name="1666" href="#1666">1666</a>         <em class="jxr_comment">// header is already there, don't read the header again.</em>
-<a class="jxr_linenumber" name="1667" href="#1667">1667</a> 
-<a class="jxr_linenumber" name="1668" href="#1668">1668</a>         <em class="jxr_comment">// Unfortunately, we still have to do a separate read operation to</em>
-<a class="jxr_linenumber" name="1669" href="#1669">1669</a>         <em class="jxr_comment">// read the header.</em>
-<a class="jxr_linenumber" name="1670" href="#1670">1670</a>         <strong class="jxr_keyword">if</strong> (headerBuf == <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="1671" href="#1671">1671</a>           <em class="jxr_comment">// From the header, determine the on-disk size of the given hfile</em>
-<a class="jxr_linenumber" name="1672" href="#1672">1672</a>           <em class="jxr_comment">// block, and read the remaining data, thereby incurring two read</em>
-<a class="jxr_linenumber" name="1673" href="#1673">1673</a>           <em class="jxr_comment">// operations. This might happen when we are doing the first read</em>
-<a class="jxr_linenumber" name="1674" href="#1674">1674</a>           <em class="jxr_comment">// in a series of reads or a random read, and we don't have access</em>
-<a class="jxr_linenumber" name="1675" href="#1675">1675</a>           <em class="jxr_comment">// to the block index. This is costly and should happen very rarely.</em>
-<a class="jxr_linenumber" name="1676" href="#1676">1676</a>           headerBuf = ByteBuffer.allocate(hdrSize);
-<a class="jxr_linenumber" name="1677" href="#1677">1677</a>           <em class="jxr_comment">// headerBuf is HBB</em>
-<a class="jxr_linenumber" name="1678" href="#1678">1678</a>           readAtOffset(is, headerBuf.array(), headerBuf.arrayOffset(),
-<a class="jxr_linenumber" name="1679" href="#1679">1679</a>               hdrSize, false, offset, pread);
-<a class="jxr_linenumber" name="1680" href="#1680">1680</a>         }
-<a class="jxr_linenumber" name="1681" href="#1681">1681</a>         <em class="jxr_comment">// TODO: FIX!!! Expensive parse just to get a length</em>
-<a class="jxr_linenumber" name="1682" href="#1682">1682</a>         b = <strong class="jxr_keyword">new</strong> <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.html">HFileBlock</a>(headerBuf, fileContext.isUseHBaseChecksum());
-<a class="jxr_linenumber" name="1683" href="#1683">1683</a>         onDiskBlock = <strong class="jxr_keyword">new</strong> byte[b.getOnDiskSizeWithHeader() + hdrSize];
-<a class="jxr_linenumber" name="1684" href="#1684">1684</a>         <em class="jxr_comment">// headerBuf is HBB</em>
-<a class="jxr_linenumber" name="1685" href="#1685">1685</a>         System.arraycopy(headerBuf.array(), headerBuf.arrayOffset(), onDiskBlock, 0, hdrSize);
-<a class="jxr_linenumber" name="1686" href="#1686">1686</a>         nextBlockOnDiskSize =
-<a class="jxr_linenumber" name="1687" href="#1687">1687</a>           readAtOffset(is, onDiskBlock, hdrSize, b.getOnDiskSizeWithHeader()
-<a class="jxr_linenumber" name="1688" href="#1688">1688</a>               - hdrSize, <strong class="jxr_keyword">true</strong>, offset + hdrSize, pread);
-<a class="jxr_linenumber" name="1689" href="#1689">1689</a>         onDiskSizeWithHeader = b.onDiskSizeWithoutHeader + hdrSize;
-<a class="jxr_linenumber" name="1690" href="#1690">1690</a>       }
-<a class="jxr_linenumber" name="1691" href="#1691">1691</a> 
-<a class="jxr_linenumber" name="1692" href="#1692">1692</a>       <strong class="jxr_keyword">if</strong> (!fileContext.isCompressedOrEncrypted()) {
-<a class="jxr_linenumber" name="1693" href="#1693">1693</a>         b.assumeUncompressed();
-<a class="jxr_linenumber" name="1694" href="#1694">1694</a>       }
-<a class="jxr_linenumber" name="1695" href="#1695">1695</a> 
-<a class="jxr_linenumber" name="1696" href="#1696">1696</a>       <strong class="jxr_keyword">if</strong> (verifyChecksum &amp;&amp; !validateBlockChecksum(b, onDiskBlock, hdrSize)) {
-<a class="jxr_linenumber" name="1697" href="#1697">1697</a>         <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">null</strong>;             <em class="jxr_comment">// checksum mismatch</em>
-<a class="jxr_linenumber" name="1698" href="#1698">1698</a>       }
-<a class="jxr_linenumber" name="1699" href="#1699">1699</a> 
-<a class="jxr_linenumber" name="1700" href="#1700">1700</a>       <em class="jxr_comment">// The onDiskBlock will become the headerAndDataBuffer for this block.</em>
-<a class="jxr_linenumber" name="1701" href="#1701">1701</a>       <em class="jxr_comment">// If nextBlockOnDiskSizeWithHeader is not zero, the onDiskBlock already</em>
-<a class="jxr_linenumber" name="1702" href="#1702">1702</a>       <em class="jxr_comment">// contains the header of next block, so no need to set next</em>
-<a class="jxr_linenumber" name="1703" href="#1703">1703</a>       <em class="jxr_comment">// block's header in it.</em>
-<a class="jxr_linenumber" name="1704" href="#1704">1704</a>       b = <strong class="jxr_keyword">new</strong> <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.html">HFileBlock</a>(ByteBuffer.wrap(onDiskBlock, 0, onDiskSizeWithHeader),
-<a class="jxr_linenumber" name="1705" href="#1705">1705</a>         <strong class="jxr_keyword">this</strong>.fileContext.isUseHBaseChecksum());
-<a class="jxr_linenumber" name="1706" href="#1706">1706</a> 
-<a class="jxr_linenumber" name="1707" href="#1707">1707</a>       b.nextBlockOnDiskSizeWithHeader = nextBlockOnDiskSize;
-<a class="jxr_linenumber" name="1708" href="#1708">1708</a> 
-<a class="jxr_linenumber" name="1709" href="#1709">1709</a>       <em class="jxr_comment">// Set prefetched header</em>
-<a class="jxr_linenumber" name="1710" href="#1710">1710</a>       <strong class="jxr_keyword">if</strong> (b.hasNextBlockHeader()) {
-<a class="jxr_linenumber" name="1711" href="#1711">1711</a>         prefetchedHeader.offset = offset + b.getOnDiskSizeWithHeader();
-<a class="jxr_linenumber" name="1712" href="#1712">1712</a>         System.arraycopy(onDiskBlock, onDiskSizeWithHeader, prefetchedHeader.header, 0, hdrSize);
-<a class="jxr_linenumber" name="1713" href="#1713">1713</a>       }
-<a class="jxr_linenumber" name="1714" href="#1714">1714</a> 
-<a class="jxr_linenumber" name="1715" href="#1715">1715</a>       b.offset = offset;
-<a class="jxr_linenumber" name="1716" href="#1716">1716</a>       b.fileContext.setIncludesTags(<strong class="jxr_keyword">this</strong>.fileContext.isIncludesTags());
-<a class="jxr_linenumber" name="1717" href="#1717">1717</a>       b.fileContext.setIncludesMvcc(<strong class="jxr_keyword">this</strong>.fileContext.isIncludesMvcc());
-<a class="jxr_linenumber" name="1718" href="#1718">1718</a>       <strong class="jxr_keyword">return</strong> b;
-<a class="jxr_linenumber" name="1719" href="#1719">1719</a>     }
-<a class="jxr_linenumber" name="1720" href="#1720">1720</a> 
-<a class="jxr_linenumber" name="1721" href="#1721">1721</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setIncludesMemstoreTS(<strong class="jxr_keyword">boolean</strong> includesMemstoreTS) {
-<a class="jxr_linenumber" name="1722" href="#1722">1722</a>       <strong class="jxr_keyword">this</strong>.fileContext.setIncludesMvcc(includesMemstoreTS);
-<a class="jxr_linenumber" name="1723" href="#1723">1723</a>     }
-<a class="jxr_linenumber" name="1724" href="#1724">1724</a> 
-<a class="jxr_linenumber" name="1725" href="#1725">1725</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> setDataBlockEncoder(<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileDataBlockEncoder.html">HFileDataBlockEncoder</a> encoder) {
-<a class="jxr_linenumber" name="1726" href="#1726">1726</a>       encodedBlockDecodingCtx = encoder.newDataBlockDecodingContext(<strong class="jxr_keyword">this</strong>.fileContext);
-<a class="jxr_linenumber" name="1727" href="#1727">1727</a>     }
-<a class="jxr_linenumber" name="1728" href="#1728">1728</a> 
-<a class="jxr_linenumber" name="1729" href="#1729">1729</a>     @Override
-<a class="jxr_linenumber" name="1730" href="#1730">1730</a>     <strong class="jxr_keyword">public</strong> <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html">HFileBlockDecodingContext</a> getBlockDecodingContext() {
-<a class="jxr_linenumber" name="1731" href="#1731">1731</a>       <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.encodedBlockDecodingCtx;
-<a class="jxr_linenumber" name="1732" href="#1732">1732</a>     }
-<a class="jxr_linenumber" name="1733" href="#1733">1733</a> 
-<a class="jxr_linenumber" name="1734" href="#1734">1734</a>     @Override
-<a class="jxr_linenumber" name="1735" href="#1735">1735</a>     <strong class="jxr_keyword">public</strong> <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDecodingContext.html">HFileBlockDecodingContext</a> getDefaultBlockDecodingContext() {
-<a class="jxr_linenumber" name="1736" href="#1736">1736</a>       <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.defaultDecodingCtx;
-<a class="jxr_linenumber" name="1737" href="#1737">1737</a>     }
-<a class="jxr_linenumber" name="1738" href="#1738">1738</a> 
-<a class="jxr_linenumber" name="1739" href="#1739">1739</a>     <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="1740" href="#1740">1740</a> <em class="jxr_javadoccomment">     * Generates the checksum for the header as well as the data and</em>
-<a class="jxr_linenumber" name="1741" href="#1741">1741</a> <em class="jxr_javadoccomment">     * then validates that it matches the value stored in the header.</em>
-<a class="jxr_linenumber" name="1742" href="#1742">1742</a> <em class="jxr_javadoccomment">     * If there is a checksum mismatch, then return false. Otherwise</em>
-<a class="jxr_linenumber" name="1743" href="#1743">1743</a> <em class="jxr_javadoccomment">     * return true.</em>
-<a class="jxr_linenumber" name="1744" href="#1744">1744</a> <em class="jxr_javadoccomment">     */</em>
-<a class="jxr_linenumber" name="1745" href="#1745">1745</a>     <strong class="jxr_keyword">protected</strong> <strong class="jxr_keyword">boolean</strong> validateBlockChecksum(<a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.html">HFileBlock</a> block,  byte[] data, <strong class="jxr_keyword">int</strong> hdrSize)
-<a class="jxr_linenumber" name="1746" href="#1746">1746</a>         <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1747" href="#1747">1747</a>       <strong class="jxr_keyword">return</strong> ChecksumUtil.validateBlockChecksum(path, block, data, hdrSize);
-<a class="jxr_linenumber" name="1748" href="#1748">1748</a>     }
-<a class="jxr_linenumber" name="1749" href="#1749">1749</a> 
-<a class="jxr_linenumber" name="1750" href="#1750">1750</a>     @Override
-<a class="jxr_linenumber" name="1751" href="#1751">1751</a>     <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> closeStreams() <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1752" href="#1752">1752</a>       streamWrapper.close();
-<a class="jxr_linenumber" name="1753" href="#1753">1753</a>     }
-<a class="jxr_linenumber" name="1754" href="#1754">1754</a> 
-<a class="jxr_linenumber" name="1755" href="#1755">1755</a>     @Override
-<a class="jxr_linenumber" name="1756" href="#1756">1756</a>     <strong class="jxr_keyword">public</strong> String toString() {
-<a class="jxr_linenumber" name="1757" href="#1757">1757</a>       <strong class="jxr_keyword">return</strong> <span class="jxr_string">"hfs="</span> + hfs + <span class="jxr_string">", path="</span> + path + <span class="jxr_string">", fileContext="</span> + fileContext;
-<a class="jxr_linenumber" name="1758" href="#1758">1758</a>     }
-<a class="jxr_linenumber" name="1759" href="#1759">1759</a>   }
-<a class="jxr_linenumber" name="1760" href="#1760">1760</a> 
-<a class="jxr_linenumber" name="1761" href="#1761">1761</a>   @Override
-<a class="jxr_linenumber" name="1762" href="#1762">1762</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">int</strong> getSerializedLength() {
-<a class="jxr_linenumber" name="1763" href="#1763">1763</a>     <strong class="jxr_keyword">if</strong> (buf != <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="1764" href="#1764">1764</a>       <em class="jxr_comment">// include extra bytes for the next header when it's available.</em>
-<a class="jxr_linenumber" name="1765" href="#1765">1765</a>       <strong class="jxr_keyword">int</strong> extraSpace = hasNextBlockHeader() ? headerSize() : 0;
-<a class="jxr_linenumber" name="1766" href="#1766">1766</a>       <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.buf.limit() + extraSpace + HFileBlock.EXTRA_SERIALIZATION_SPACE;
-<a class="jxr_linenumber" name="1767" href="#1767">1767</a>     }
-<a class="jxr_linenumber" name="1768" href="#1768">1768</a>     <strong class="jxr_keyword">return</strong> 0;
-<a class="jxr_linenumber" name="1769" href="#1769">1769</a>   }
-<a class="jxr_linenumber" name="1770" href="#1770">1770</a> 
-<a class="jxr_linenumber" name="1771" href="#1771">1771</a>   @Override
-<a class="jxr_linenumber" name="1772" href="#1772">1772</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> serialize(ByteBuffer destination) {
-<a class="jxr_linenumber" name="1773" href="#1773">1773</a>     <strong class="jxr_keyword">this</strong>.buf.get(destination, 0, getSerializedLength()
-<a class="jxr_linenumber" name="1774" href="#1774">1774</a>         - EXTRA_SERIALIZATION_SPACE);
-<a class="jxr_linenumber" name="1775" href="#1775">1775</a>     serializeExtraInfo(destination);
-<a class="jxr_linenumber" name="1776" href="#1776">1776</a>   }
-<a class="jxr_linenumber" name="1777" href="#1777">1777</a> 
-<a class="jxr_linenumber" name="1778" href="#1778">1778</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">void</strong> serializeExtraInfo(ByteBuffer destination) {
-<a class="jxr_linenumber" name="1779" href="#1779">1779</a>     destination.put(<strong class="jxr_keyword">this</strong>.fileContext.isUseHBaseChecksum() ? (byte) 1 : (byte) 0);
-<a class="jxr_linenumber" name="1780" href="#1780">1780</a>     destination.putLong(<strong class="jxr_keyword">this</strong>.offset);
-<a class="jxr_linenumber" name="1781" href="#1781">1781</a>     destination.putInt(<strong class="jxr_keyword">this</strong>.nextBlockOnDiskSizeWithHeader);
-<a class="jxr_linenumber" name="1782" href="#1782">1782</a>     destination.rewind();
-<a class="jxr_linenumber" name="1783" href="#1783">1783</a>   }
-<a class="jxr_linenumber" name="1784" href="#1784">1784</a> 
-<a class="jxr_linenumber" name="1785" href="#1785">1785</a>   @Override
-<a class="jxr_linenumber" name="1786" href="#1786">1786</a>   <strong class="jxr_keyword">public</strong> CacheableDeserializer&lt;Cacheable&gt; getDeserializer() {
-<a class="jxr_linenumber" name="1787" href="#1787">1787</a>     <strong class="jxr_keyword">return</strong> HFileBlock.blockDeserializer;
-<a class="jxr_linenumber" name="1788" href="#1788">1788</a>   }
-<a class="jxr_linenumber" name="1789" href="#1789">1789</a> 
-<a class="jxr_linenumber" name="1790" href="#1790">1790</a>   @Override
-<a class="jxr_linenumber" name="1791" href="#1791">1791</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">int</strong> hashCode() {
-<a class="jxr_linenumber" name="1792" href="#1792">1792</a>     <strong class="jxr_keyword">int</strong> result = 1;
-<a class="jxr_linenumber" name="1793" href="#1793">1793</a>     result = result * 31 + blockType.hashCode();
-<a class="jxr_linenumber" name="1794" href="#1794">1794</a>     result = result * 31 + nextBlockOnDiskSizeWithHeader;
-<a class="jxr_linenumber" name="1795" href="#1795">1795</a>     result = result * 31 + (<strong class="jxr_keyword">int</strong>) (offset ^ (offset &gt;&gt;&gt; 32));
-<a class="jxr_linenumber" name="1796" href="#1796">1796</a>     result = result * 31 + onDiskSizeWithoutHeader;
-<a class="jxr_linenumber" name="1797" href="#1797">1797</a>     result = result * 31 + (<strong class="jxr_keyword">int</strong>) (prevBlockOffset ^ (prevBlockOffset &gt;&gt;&gt; 32));
-<a class="jxr_linenumber" name="1798" href="#1798">1798</a>     result = result * 31 + uncompressedSizeWithoutHeader;
-<a class="jxr_linenumber" name="1799" href="#1799">1799</a>     result = result * 31 + buf.hashCode();
-<a class="jxr_linenumber" name="1800" href="#1800">1800</a>     <strong class="jxr_keyword">return</strong> result;
-<a class="jxr_linenumber" name="1801" href="#1801">1801</a>   }
-<a class="jxr_linenumber" name="1802" href="#1802">1802</a> 
-<a class="jxr_linenumber" name="1803" href="#1803">1803</a>   @Override
-<a class="jxr_linenumber" name="1804" href="#1804">1804</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> equals(Object comparison) {
-<a class="jxr_linenumber" name="1805" href="#1805">1805</a>     <strong class="jxr_keyword">if</strong> (<strong class="jxr_keyword">this</strong> == comparison) {
-<a class="jxr_linenumber" name="1806" href="#1806">1806</a>       <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="1807" href="#1807">1807</a>     }
-<a class="jxr_linenumber" name="1808" href="#1808">1808</a>     <strong class="jxr_keyword">if</strong> (comparison == <strong class="jxr_keyword">null</strong>) {
-<a class="jxr_linenumber" name="1809" href="#1809">1809</a>       <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="1810" href="#1810">1810</a>     }
-<a class="jxr_linenumber" name="1811" href="#1811">1811</a>     <strong class="jxr_keyword">if</strong> (comparison.getClass() != <strong class="jxr_keyword">this</strong>.getClass()) {
-<a class="jxr_linenumber" name="1812" href="#1812">1812</a>       <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="1813" href="#1813">1813</a>     }
-<a class="jxr_linenumber" name="1814" href="#1814">1814</a> 
-<a class="jxr_linenumber" name="1815" href="#1815">1815</a>     <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.html">HFileBlock</a> castedComparison = (HFileBlock) comparison;
-<a class="jxr_linenumber" name="1816" href="#1816">1816</a> 
-<a class="jxr_linenumber" name="1817" href="#1817">1817</a>     <strong class="jxr_keyword">if</strong> (castedComparison.blockType != <strong class="jxr_keyword">this</strong>.blockType) {
-<a class="jxr_linenumber" name="1818" href="#1818">1818</a>       <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="1819" href="#1819">1819</a>     }
-<a class="jxr_linenumber" name="1820" href="#1820">1820</a>     <strong class="jxr_keyword">if</strong> (castedComparison.nextBlockOnDiskSizeWithHeader != <strong class="jxr_keyword">this</strong>.nextBlockOnDiskSizeWithHeader) {
-<a class="jxr_linenumber" name="1821" href="#1821">1821</a>       <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="1822" href="#1822">1822</a>     }
-<a class="jxr_linenumber" name="1823" href="#1823">1823</a>     <strong class="jxr_keyword">if</strong> (castedComparison.offset != <strong class="jxr_keyword">this</strong>.offset) {
-<a class="jxr_linenumber" name="1824" href="#1824">1824</a>       <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="1825" href="#1825">1825</a>     }
-<a class="jxr_linenumber" name="1826" href="#1826">1826</a>     <strong class="jxr_keyword">if</strong> (castedComparison.onDiskSizeWithoutHeader != <strong class="jxr_keyword">this</strong>.onDiskSizeWithoutHeader) {
-<a class="jxr_linenumber" name="1827" href="#1827">1827</a>       <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="1828" href="#1828">1828</a>     }
-<a class="jxr_linenumber" name="1829" href="#1829">1829</a>     <strong class="jxr_keyword">if</strong> (castedComparison.prevBlockOffset != <strong class="jxr_keyword">this</strong>.prevBlockOffset) {
-<a class="jxr_linenumber" name="1830" href="#1830">1830</a>       <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="1831" href="#1831">1831</a>     }
-<a class="jxr_linenumber" name="1832" href="#1832">1832</a>     <strong class="jxr_keyword">if</strong> (castedComparison.uncompressedSizeWithoutHeader != <strong class="jxr_keyword">this</strong>.uncompressedSizeWithoutHeader) {
-<a class="jxr_linenumber" name="1833" href="#1833">1833</a>       <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="1834" href="#1834">1834</a>     }
-<a class="jxr_linenumber" name="1835" href="#1835">1835</a>     <strong class="jxr_keyword">if</strong> (ByteBuff.compareTo(<strong class="jxr_keyword">this</strong>.buf, 0, <strong class="jxr_keyword">this</strong>.buf.limit(), castedComparison.buf, 0,
-<a class="jxr_linenumber" name="1836" href="#1836">1836</a>         castedComparison.buf.limit()) != 0) {
-<a class="jxr_linenumber" name="1837" href="#1837">1837</a>       <strong class="jxr_keyword">return</strong> false;
-<a class="jxr_linenumber" name="1838" href="#1838">1838</a>     }
-<a class="jxr_linenumber" name="1839" href="#1839">1839</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">true</strong>;
-<a class="jxr_linenumber" name="1840" href="#1840">1840</a>   }
-<a class="jxr_linenumber" name="1841" href="#1841">1841</a> 
-<a class="jxr_linenumber" name="1842" href="#1842">1842</a>   <strong class="jxr_keyword">public</strong> <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/DataBlockEncoding.html">DataBlockEncoding</a> getDataBlockEncoding() {
-<a class="jxr_linenumber" name="1843" href="#1843">1843</a>     <strong class="jxr_keyword">if</strong> (blockType == BlockType.ENCODED_DATA) {
-<a class="jxr_linenumber" name="1844" href="#1844">1844</a>       <strong class="jxr_keyword">return</strong> DataBlockEncoding.getEncodingById(getDataBlockEncodingId());
-<a class="jxr_linenumber" name="1845" href="#1845">1845</a>     }
-<a class="jxr_linenumber" name="1846" href="#1846">1846</a>     <strong class="jxr_keyword">return</strong> DataBlockEncoding.NONE;
-<a class="jxr_linenumber" name="1847" href="#1847">1847</a>   }
-<a class="jxr_linenumber" name="1848" href="#1848">1848</a> 
-<a class="jxr_linenumber" name="1849" href="#1849">1849</a>   byte getChecksumType() {
-<a class="jxr_linenumber" name="1850" href="#1850">1850</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.fileContext.getChecksumType().getCode();
-<a class="jxr_linenumber" name="1851" href="#1851">1851</a>   }
-<a class="jxr_linenumber" name="1852" href="#1852">1852</a> 
-<a class="jxr_linenumber" name="1853" href="#1853">1853</a>   <strong class="jxr_keyword">int</strong> getBytesPerChecksum() {
-<a class="jxr_linenumber" name="1854" href="#1854">1854</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.fileContext.getBytesPerChecksum();
-<a class="jxr_linenumber" name="1855" href="#1855">1855</a>   }
-<a class="jxr_linenumber" name="1856" href="#1856">1856</a> 
-<a class="jxr_linenumber" name="1857" href="#1857">1857</a>   <em class="jxr_javadoccomment">/**</em><em class="jxr_javadoccomment"> @return the size of data on disk + header. Excludes checksum. */</em>
-<a class="jxr_linenumber" name="1858" href="#1858">1858</a>   <strong class="jxr_keyword">int</strong> getOnDiskDataSizeWithHeader() {
-<a class="jxr_linenumber" name="1859" href="#1859">1859</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.onDiskDataSizeWithHeader;
-<a class="jxr_linenumber" name="1860" href="#1860">1860</a>   }
-<a class="jxr_linenumber" name="1861" href="#1861">1861</a> 
-<a class="jxr_linenumber" name="1862" href="#1862">1862</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="1863" href="#1863">1863</a> <em class="jxr_javadoccomment">   * Calcuate the number of bytes required to store all the checksums</em>
-<a class="jxr_linenumber" name="1864" href="#1864">1864</a> <em class="jxr_javadoccomment">   * for this block. Each checksum value is a 4 byte integer.</em>
-<a class="jxr_linenumber" name="1865" href="#1865">1865</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="1866" href="#1866">1866</a>   <strong class="jxr_keyword">int</strong> totalChecksumBytes() {
-<a class="jxr_linenumber" name="1867" href="#1867">1867</a>     <em class="jxr_comment">// If the hfile block has minorVersion 0, then there are no checksum</em>
-<a class="jxr_linenumber" name="1868" href="#1868">1868</a>     <em class="jxr_comment">// data to validate. Similarly, a zero value in this.bytesPerChecksum</em>
-<a class="jxr_linenumber" name="1869" href="#1869">1869</a>     <em class="jxr_comment">// indicates that cached blocks do not have checksum data because</em>
-<a class="jxr_linenumber" name="1870" href="#1870">1870</a>     <em class="jxr_comment">// checksums were already validated when the block was read from disk.</em>
-<a class="jxr_linenumber" name="1871" href="#1871">1871</a>     <strong class="jxr_keyword">if</strong> (!fileContext.isUseHBaseChecksum() || <strong class="jxr_keyword">this</strong>.fileContext.getBytesPerChecksum() == 0) {
-<a class="jxr_linenumber" name="1872" href="#1872">1872</a>       <strong class="jxr_keyword">return</strong> 0;
-<a class="jxr_linenumber" name="1873" href="#1873">1873</a>     }
-<a class="jxr_linenumber" name="1874" href="#1874">1874</a>     <strong class="jxr_keyword">return</strong> (<strong class="jxr_keyword">int</strong>) ChecksumUtil.numBytes(onDiskDataSizeWithHeader,
-<a class="jxr_linenumber" name="1875" href="#1875">1875</a>         <strong class="jxr_keyword">this</strong>.fileContext.getBytesPerChecksum());
-<a class="jxr_linenumber" name="1876" href="#1876">1876</a>   }
-<a class="jxr_linenumber" name="1877" href="#1877">1877</a> 
-<a class="jxr_linenumber" name="1878" href="#1878">1878</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="1879" href="#1879">1879</a> <em class="jxr_javadoccomment">   * Returns the size of this block header.</em>
-<a class="jxr_linenumber" name="1880" href="#1880">1880</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="1881" href="#1881">1881</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">int</strong> headerSize() {
-<a class="jxr_linenumber" name="1882" href="#1882">1882</a>     <strong class="jxr_keyword">return</strong> headerSize(<strong class="jxr_keyword">this</strong>.fileContext.isUseHBaseChecksum());
-<a class="jxr_linenumber" name="1883" href="#1883">1883</a>   }
-<a class="jxr_linenumber" name="1884" href="#1884">1884</a> 
-<a class="jxr_linenumber" name="1885" href="#1885">1885</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="1886" href="#1886">1886</a> <em class="jxr_javadoccomment">   * Maps a minor version to the size of the header.</em>
-<a class="jxr_linenumber" name="1887" href="#1887">1887</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="1888" href="#1888">1888</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">int</strong> headerSize(<strong class="jxr_keyword">boolean</strong> usesHBaseChecksum) {
-<a class="jxr_linenumber" name="1889" href="#1889">1889</a>     <strong class="jxr_keyword">if</strong> (usesHBaseChecksum) {
-<a class="jxr_linenumber" name="1890" href="#1890">1890</a>       <strong class="jxr_keyword">return</strong> HConstants.HFILEBLOCK_HEADER_SIZE;
-<a class="jxr_linenumber" name="1891" href="#1891">1891</a>     }
-<a class="jxr_linenumber" name="1892" href="#1892">1892</a>     <strong class="jxr_keyword">return</strong> HConstants.HFILEBLOCK_HEADER_SIZE_NO_CHECKSUM;
-<a class="jxr_linenumber" name="1893" href="#1893">1893</a>   }
-<a class="jxr_linenumber" name="1894" href="#1894">1894</a> 
-<a class="jxr_linenumber" name="1895" href="#1895">1895</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="1896" href="#1896">1896</a> <em class="jxr_javadoccomment">   * Return the appropriate DUMMY_HEADER for the minor version</em>
-<a class="jxr_linenumber" name="1897" href="#1897">1897</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="1898" href="#1898">1898</a>   <strong class="jxr_keyword">public</strong> byte[] getDummyHeaderForVersion() {
-<a class="jxr_linenumber" name="1899" href="#1899">1899</a>     <strong class="jxr_keyword">return</strong> getDummyHeaderForVersion(<strong class="jxr_keyword">this</strong>.fileContext.isUseHBaseChecksum());
-<a class="jxr_linenumber" name="1900" href="#1900">1900</a>   }
-<a class="jxr_linenumber" name="1901" href="#1901">1901</a> 
-<a class="jxr_linenumber" name="1902" href="#1902">1902</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="1903" href="#1903">1903</a> <em class="jxr_javadoccomment">   * Return the appropriate DUMMY_HEADER for the minor version</em>
-<a class="jxr_linenumber" name="1904" href="#1904">1904</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="1905" href="#1905">1905</a>   <strong class="jxr_keyword">static</strong> <strong class="jxr_keyword">private</strong> byte[] getDummyHeaderForVersion(<strong class="jxr_keyword">boolean</strong> usesHBaseChecksum) {
-<a class="jxr_linenumber" name="1906" href="#1906">1906</a>     <strong class="jxr_keyword">if</strong> (usesHBaseChecksum) {
-<a class="jxr_linenumber" name="1907" href="#1907">1907</a>       <strong class="jxr_keyword">return</strong> HConstants.HFILEBLOCK_DUMMY_HEADER;
-<a class="jxr_linenumber" name="1908" href="#1908">1908</a>     }
-<a class="jxr_linenumber" name="1909" href="#1909">1909</a>     <strong class="jxr_keyword">return</strong> DUMMY_HEADER_NO_CHECKSUM;
-<a class="jxr_linenumber" name="1910" href="#1910">1910</a>   }
-<a class="jxr_linenumber" name="1911" href="#1911">1911</a> 
-<a class="jxr_linenumber" name="1912" href="#1912">1912</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="1913" href="#1913">1913</a> <em class="jxr_javadoccomment">   * @return the HFileContext used to create this HFileBlock. Not necessary the</em>
-<a class="jxr_linenumber" name="1914" href="#1914">1914</a> <em class="jxr_javadoccomment">   * fileContext for the file from which this block's data was originally read.</em>
-<a class="jxr_linenumber" name="1915" href="#1915">1915</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="1916" href="#1916">1916</a>   <strong class="jxr_keyword">public</strong> <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileContext.html">HFileContext</a> getHFileContext() {
-<a class="jxr_linenumber" name="1917" href="#1917">1917</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.fileContext;
-<a class="jxr_linenumber" name="1918" href="#1918">1918</a>   }
-<a class="jxr_linenumber" name="1919" href="#1919">1919</a> 
-<a class="jxr_linenumber" name="1920" href="#1920">1920</a>   @Override
-<a class="jxr_linenumber" name="1921" href="#1921">1921</a>   <strong class="jxr_keyword">public</strong> <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/Cacheable.html">MemoryType</a> getMemoryType() {
-<a class="jxr_linenumber" name="1922" href="#1922">1922</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.memType;
-<a class="jxr_linenumber" name="1923" href="#1923">1923</a>   }
-<a class="jxr_linenumber" name="1924" href="#1924">1924</a> 
-<a class="jxr_linenumber" name="1925" href="#1925">1925</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="1926" href="#1926">1926</a> <em class="jxr_javadoccomment">   * @return true if this block is backed by a shared memory area(such as that of a BucketCache).</em>
-<a class="jxr_linenumber" name="1927" href="#1927">1927</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="1928" href="#1928">1928</a>   <strong class="jxr_keyword">public</strong> <strong class="jxr_keyword">boolean</strong> usesSharedMemory() {
-<a class="jxr_linenumber" name="1929" href="#1929">1929</a>     <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">this</strong>.memType == MemoryType.SHARED;
-<a class="jxr_linenumber" name="1930" href="#1930">1930</a>   }
-<a class="jxr_linenumber" name="1931" href="#1931">1931</a> 
-<a class="jxr_linenumber" name="1932" href="#1932">1932</a>   <em class="jxr_javadoccomment">/**</em>
-<a class="jxr_linenumber" name="1933" href="#1933">1933</a> <em class="jxr_javadoccomment">   * Convert the contents of the block header into a human readable string.</em>
-<a class="jxr_linenumber" name="1934" href="#1934">1934</a> <em class="jxr_javadoccomment">   * This is mostly helpful for debugging. This assumes that the block</em>
-<a class="jxr_linenumber" name="1935" href="#1935">1935</a> <em class="jxr_javadoccomment">   * has minor version &gt; 0.</em>
-<a class="jxr_linenumber" name="1936" href="#1936">1936</a> <em class="jxr_javadoccomment">   */</em>
-<a class="jxr_linenumber" name="1937" href="#1937">1937</a>   <strong class="jxr_keyword">static</strong> String toStringHeader(<a href="../../../../../../org/apache/hadoop/hbase/nio/ByteBuff.html">ByteBuff</a> buf) <strong class="jxr_keyword">throws</strong> IOException {
-<a class="jxr_linenumber" name="1938" href="#1938">1938</a>     byte[] magicBuf = <strong class="jxr_keyword">new</strong> byte[Math.min(buf.limit() - buf.position(), BlockType.MAGIC_LENGTH)];
-<a class="jxr_linenumber" name="1939" href="#1939">1939</a>     buf.get(magicBuf);
-<a class="jxr_linenumber" name="1940" href="#1940">1940</a>     <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/BlockType.html">BlockType</a> bt = BlockType.parse(magicBuf, 0, BlockType.MAGIC_LENGTH);
-<a class="jxr_linenumber" name="1941" href="#1941">1941</a>     <strong class="jxr_keyword">int</strong> compressedBlockSizeNoHeader = buf.getInt();
-<a class="jxr_linenumber" name="1942" href="#1942">1942</a>     <strong class="jxr_keyword">int</strong> uncompressedBlockSizeNoHeader = buf.getInt();
-<a class="jxr_linenumber" name="1943" href="#1943">1943</a>     <strong class="jxr_keyword">long</strong> prevBlockOffset = buf.getLong();
-<a class="jxr_linenumber" name="1944" href="#1944">1944</a>     byte cksumtype = buf.get();
-<a class="jxr_linenumber" name="1945" href="#1945">1945</a>     <strong class="jxr_keyword">long</strong> bytesPerChecksum = buf.getInt();
-<a class="jxr_linenumber" name="1946" href="#1946">1946</a>     <strong class="jxr_keyword">long</strong> onDiskDataSizeWithHeader = buf.getInt();
-<a class="jxr_linenumber" name="1947" href="#1947">1947</a>     <strong class="jxr_keyword">return</strong> <span class="jxr_string">" Header dump: magic: "</span> + Bytes.toString(magicBuf) +
-<a class="jxr_linenumber" name="1948" href="#1948">1948</a>                    <span class="jxr_string">" blockType "</span> + bt +
-<a class="jxr_linenumber" name="1949" href="#1949">1949</a>                    <span class="jxr_string">" compressedBlockSizeNoHeader "</span> +
-<a class="jxr_linenumber" name="1950" href="#1950">1950</a>                    compressedBlockSizeNoHeader +
-<a class="jxr_linenumber" name="1951" href="#1951">1951</a>                    <span class="jxr_string">" uncompressedBlockSizeNoHeader "</span> +
-<a class="jxr_linenumber" name="1952" href="#1952">1952</a>                    uncompressedBlockSizeNoHeader +
-<a class="jxr_linenumber" name="1953" href="#1953">1953</a>                    <span class="jxr_string">" prevBlockOffset "</span> + prevBlockOffset +
-<a class="jxr_linenumber" name="1954" href="#1954">1954</a>                    <span class="jxr_string">" checksumType "</span> + ChecksumType.codeToType(cksumtype) +
-<a class="jxr_linenumber" name="1955" href="#1955">1955</a>                    <span class="jxr_string">" bytesPerChecksum "</span> + bytesPerChecksum +
-<a class="jxr_linenumber" name="1956" href="#1956">1956</a>                    <span class="jxr_string">" onDiskDataSizeWithHeader "</span> + onDiskDataSizeWithHeader;
-<a class="jxr_linenumber" name="1957" href="#1957">1957</a>   }
-<a class="jxr_linenumber" name="1958" href="#1958">1958</a> }
+<a class="jxr_linenumber" name="1361" href="#1361">1361</a>     <strong class="jxr_keyword">protected</strong> <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileContext.html">HFileContext</a> fileContext;
+<a class="jxr_linenumber" name="1362" href="#1362">1362</a>     <em class="jxr_comment">// Cache the fileName</em>
+<a class="jxr_linenumber" name="1363" href="#1363">1363</a>     <strong class="jxr_keyword">protected</strong> String pathName;
+<a class="jxr_linenumber" name="1364" href="#1364">1364</a> 
+<a class="jxr_linenumber" name="1365" href="#1365">1365</a>     <strong class="jxr_keyword">public</strong> <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.html">FSReaderImpl</a>(<a href="../../../../../../org/apache/hadoop/hbase/io/FSDataInputStreamWrapper.html">FSDataInputStreamWrapper</a> stream, <strong class="jxr_keyword">long</strong> fileSize, <a href="../../../../../../org/apache/hadoop/hbase/fs/HFileSystem.html">HFileSystem</a> hfs, Path path,
+<a class="jxr_linenumber" name="1366" href="#1366">1366</a>         <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileContext.html">HFileContext</a> fileContext) <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="1367" href="#1367">1367</a>       <strong class="jxr_keyword">this</strong>.fileSize = fileSize;
+<a class="jxr_linenumber" name="1368" href="#1368">1368</a>       <strong class="jxr_keyword">this</strong>.hfs = hfs;
+<a class="jxr_linenumber" name="1369" href="#1369">1369</a>       <strong class="jxr_keyword">if</strong> (path != <strong class="jxr_keyword">null</strong>) {
+<a class="jxr_linenumber" name="1370" href="#1370">1370</a>         <strong class="jxr_keyword">this</strong>.pathName = path.toString();
+<a class="jxr_linenumber" name="1371" href="#1371">1371</a>       }
+<a class="jxr_linenumber" name="1372" href="#1372">1372</a>       <strong class="jxr_keyword">this</strong>.fileContext = fileContext;
+<a class="jxr_linenumber" name="1373" href="#1373">1373</a>       <strong class="jxr_keyword">this</strong>.hdrSize = headerSize(fileContext.isUseHBaseChecksum());
+<a class="jxr_linenumber" name="1374" href="#1374">1374</a> 
+<a class="jxr_linenumber" name="1375" href="#1375">1375</a>       <strong class="jxr_keyword">this</strong>.streamWrapper = stream;
+<a class="jxr_linenumber" name="1376" href="#1376">1376</a>       <em class="jxr_comment">// Older versions of HBase didn't support checksum.</em>
+<a class="jxr_linenumber" name="1377" href="#1377">1377</a>       <strong class="jxr_keyword">this</strong>.streamWrapper.prepareForBlockReader(!fileContext.isUseHBaseChecksum());
+<a class="jxr_linenumber" name="1378" href="#1378">1378</a>       defaultDecodingCtx = <strong class="jxr_keyword">new</strong> <a href="../../../../../../org/apache/hadoop/hbase/io/encoding/HFileBlockDefaultDecodingContext.html">HFileBlockDefaultDecodingContext</a>(fileContext);
+<a class="jxr_linenumber" name="1379" href="#1379">1379</a>       encodedBlockDecodingCtx = defaultDecodingCtx;
+<a class="jxr_linenumber" name="1380" href="#1380">1380</a>     }
+<a class="jxr_linenumber" name="1381" href="#1381">1381</a> 
+<a class="jxr_linenumber" name="1382" href="#1382">1382</a>     <em class="jxr_javadoccomment">/**</em>
+<a class="jxr_linenumber" name="1383" href="#1383">1383</a> <em class="jxr_javadoccomment">     * A constructor that reads files with the latest minor version.</em>
+<a class="jxr_linenumber" name="1384" href="#1384">1384</a> <em class="jxr_javadoccomment">     * This is used by unit tests only.</em>
+<a class="jxr_linenumber" name="1385" href="#1385">1385</a> <em class="jxr_javadoccomment">     */</em>
+<a class="jxr_linenumber" name="1386" href="#1386">1386</a>     <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.html">FSReaderImpl</a>(FSDataInputStream istream, <strong class="jxr_keyword">long</strong> fileSize, <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileContext.html">HFileContext</a> fileContext)
+<a class="jxr_linenumber" name="1387" href="#1387">1387</a>     <strong class="jxr_keyword">throws</strong> IOException {
+<a class="jxr_linenumber" name="1388" href="#1388">1388</a>       <strong class="jxr_keyword">this</strong>(<strong class="jxr_keyword">new</strong> <a href="../../../../../../org/apache/hadoop/hbase/io/FSDataInputStreamWrapper.html">FSDataInputStreamWrapper</a>(istream), fileSize, <strong class="jxr_keyword">null</strong>, <strong class="jxr_keyword">null</strong>, fileContext);
+<a class="jxr_linenumber" name="1389" href="#1389">1389</a>     }
+<a class="jxr_linenumber" name="1390" href="#1390">1390</a> 
+<a class="jxr_linenumber" name="1391" href="#1391">1391</a>     <strong class="jxr_keyword">public</strong> <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.html">BlockIterator</a> blockRange(<strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">long</strong> startOffset, <strong class="jxr_keyword">final</strong> <strong class="jxr_keyword">long</strong> endOffset) {
+<a class="jxr_linenumber" name="1392" href="#1392">1392</a>       <strong class="jxr_keyword">final</strong> <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.html">FSReader</a> owner = <strong class="jxr_keyword">this</strong>; <em class="jxr_comment">// handle for inner class</em>
+<a class="jxr_linenumber" name="1393" href="#1393">1393</a>       <strong class="jxr_keyword">return</strong> <strong class="jxr_keyword">new</strong> <a href="../../../../../../org/apache/hadoop/hbase/io/hfile/HFileBlock.html">BlockIterator</a>() {
+<a class="jxr_linenumber" name="1394" href="#1394">1394</a>         <strong class="jxr_keyword">private</strong> <strong class="jxr_keyword">long</strong> offset = startOffset;
+<a class="jxr_linenumber" name="1395" href="#1395">1395</a> 
+<a class="jxr_linenu

<TRUNCATED>