@Override
    public LlapDataReader clone() {
      if (this.file != null) {
        // We should really throw here, but that will cause failures in Hive.
        // While Hive uses clone, just log a warning.
        LOG.warn("Cloning an opened DataReader; the stream will be reused and closed twice");
      }
      try {
        DefaultLLapDataReader clone = (DefaultLLapDataReader) super.clone();
        if (codec != null) {
          // Make sure we don't share the same codec between two readers.
          clone.codec = OrcCodecPool.getCodec(clone.compressionKind);
        }
        return clone;
      } catch (CloneNotSupportedException e) {
        throw new UnsupportedOperationException("uncloneable", e);
      }
    }
Plans the list of disk ranges that the given stripe needs to read the
indexes. All of the positions are relative to the start of the stripe.
@param  fileSchema the schema for the file
@param footer the stripe footer
@param ignoreNonUtf8BloomFilter should the reader ignore non-utf8
                                encoded bloom filters
@param fileIncluded the columns (indexed by file columns) that should be
                    read
@param sargColumns true for the columns (indexed by file columns) that
                   we need bloom filters for
@param version the version of the software that wrote the file
@param bloomFilterKinds (output) the stream kind of the bloom filters
@return a list of merged disk ranges to read
llap-server/src/java/org/apache/hadoop/hive/llap/io/encoded/LlapRecordReaderUtils.java