public void prepareForBlockReader(boolean forceNoHBaseChecksum) throws IOException {
    if (hfs == null) return;
    assert this.stream != null && !this.useHBaseChecksumConfigured;
    boolean useHBaseChecksum =
      !forceNoHBaseChecksum && hfs.useHBaseChecksum() && (hfs.getNoChecksumFs() != hfs);

    if (useHBaseChecksum) {
      FileSystem fsNc = hfs.getNoChecksumFs();
      this.streamNoFsChecksum = (link != null) ? link.open(fsNc) : fsNc.open(path);
      setStreamOptions(streamNoFsChecksum);
      this.useHBaseChecksumConfigured = this.useHBaseChecksum = useHBaseChecksum;
      // Close the checksum stream; we will reopen it if we get an HBase checksum failure.
      this.stream.close();
      this.stream = null;
    }
  }
Prepares the streams for block reader. NOT THREAD SAFE. Must be called once, after any reads
finish and before any other reads start (what happens in reality is we read the tail, then call
this based on what's in the tail, then read blocks).
@param forceNoHBaseChecksum Force not using HBase checksum.
hbase-server/src/main/java/org/apache/hadoop/hbase/io/FSDataInputStreamWrapper.java