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

com.wavefront.agent.queueing.QueueFile Maven / Gradle / Ivy

There is a newer version: 9999.0
Show newest version
package com.wavefront.agent.queueing;

import javax.annotation.Nullable;
import java.io.Closeable;
import java.io.IOException;
import java.util.NoSuchElementException;

/**
 * Proxy-specific FIFO queue interface for storing {@code byte[]}. This allows us to
 * potentially support multiple backing storages in the future.
 *
 * @author [email protected]
 */
public interface QueueFile extends Closeable, Iterable {
  /**
   * Adds an element to the end of the queue.
   *
   * @param data to copy bytes from
   */
  default void add(byte[] data) throws IOException {
    add(data, 0, data.length);
  }

  /**
   * Adds an element to the end of the queue.
   *
   * @param data to copy bytes from
   * @param offset to start from in buffer
   * @param count number of bytes to copy
   * @throws IndexOutOfBoundsException if {@code offset < 0} or {@code count < 0}, or if {@code
   * offset + count} is bigger than the length of {@code buffer}.
   */
  void add(byte[] data, int offset, int count) throws IOException;

  /**
   * Clears this queue. Truncates the file to the initial size.
   */
  void clear() throws IOException;

  /**
   * Checks whether this queue is empty.
   *
   * @return true if this queue contains no entries
   */
  default boolean isEmpty() {
    return size() == 0;
  }

  /**
   * Reads the eldest element. Returns null if the queue is empty.
   *
   * @return the eldest element.
   */
  @Nullable byte[] peek() throws IOException;

  /**
   * Removes the eldest element.
   *
   * @throws NoSuchElementException if the queue is empty
   */
  void remove() throws IOException;

  /**
   * Returns the number of elements in this queue.
   */
  int size();

  /**
   * Returns the storage size (on-disk file size) in bytes.
   *
   * @return file size in bytes.
   */
  long storageBytes();

  /**
   * Returns the number of bytes used for data.
   *
   * @return bytes used.
   */
  long usedBytes();

  /**
   * Returns the number of bytes available for adding new tasks without growing the file.
   *
   * @return bytes available.
   */
  long availableBytes();
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy