All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.hudi.io.hfile.HFileReader Maven / Gradle / Ivy

/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

package org.apache.hudi.io.hfile;

import org.apache.hudi.common.util.Option;

import java.io.Closeable;
import java.io.IOException;
import java.nio.ByteBuffer;

/**
 * HFile reader that supports seeks.
 */
public interface HFileReader extends Closeable {
  // Return code of seekTo(Key)
  // When the lookup key is less than the first key of the file
  // The cursor points to the first key of the file
  int SEEK_TO_BEFORE_FIRST_KEY = -1;
  // When the lookup key is found in the file
  // The cursor points to the matched key in the file
  int SEEK_TO_FOUND = 0;
  // When the lookup key is not found, but it's in the range of the file
  // The cursor points to the greatest key that is less than the lookup key
  int SEEK_TO_IN_RANGE = 1;
  // When the lookup key is greater than the last key of the file, EOF is reached
  // The cursor points to EOF
  int SEEK_TO_EOF = 2;

  /**
   * Initializes metadata based on a HFile before other read operations.
   *
   * @throws IOException upon read errors.
   */
  void initializeMetadata() throws IOException;

  /**
   * Gets info entry from file info block of a HFile.
   *
   * @param key meta key.
   * @return the content in bytes if present.
   * @throws IOException upon read errors.
   */
  Option getMetaInfo(UTF8StringKey key) throws IOException;

  /**
   * Gets the content of a meta block from HFile.
   *
   * @param metaBlockName meta block name.
   * @return the content in bytes if present.
   * @throws IOException upon read errors.
   */
  Option getMetaBlock(String metaBlockName) throws IOException;

  /**
   * @return total number of key value entries in the HFile.
   */
  long getNumKeyValueEntries();

  /**
   * seekTo or just before the passed {@link Key}. Examine the return code to figure whether we
   * found the key or not. Consider the key-value pairs in the file,
   * kv[0] .. kv[n-1], where there are n KV pairs in the file.
   * 

* The position only moves forward so the caller has to make sure the keys are sorted before * making multiple calls of this method. *

* * @param key {@link Key} to seek to. * @return -1, if key < kv[0], no position; * 0, such that kv[i].key = key and the reader is left in position i; and * 1, such that kv[i].key < key if there is no exact match, and the reader is left in * position i. * The reader will position itself between kv[i] and kv[i+1] where * kv[i].key < key <= kv[i+1].key; * 2, if there is no KV greater than or equal to the input key, and the reader positions * itself at the end of the file and next() will return {@code false} when it is called. * @throws IOException upon read errors. */ int seekTo(Key key) throws IOException; /** * Positions this reader at the start of the file. * * @return {@code false} if empty file; i.e. a call to next would return false and * the current key and value are undefined. * @throws IOException upon read errors. */ boolean seekTo() throws IOException; /** * Scans to the next entry in the file. * * @return {@code false} if the current position is at the end; * otherwise {@code true} if more in file. * @throws IOException upon read errors. */ boolean next() throws IOException; /** * @return The {@link KeyValue} instance at current position. */ Option getKeyValue() throws IOException; /** * @return {@code true} if the reader has had one of the seek calls invoked; i.e. * {@link #seekTo()} or {@link #seekTo(Key)}. * Otherwise, {@code false}. */ boolean isSeeked(); }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy