Interface SegmentArchiveManager

All Known Implementing Classes:
AwsArchiveManager, AzureArchiveManager, AzureArchiveManagerV8, CachingArchiveManager, SegmentTarManager, SplitSegmentArchiveManager

public interface SegmentArchiveManager
SegmentArchiveManager provides a low-level access to the segment files (eg. stored in the .tar). It allows to perform a few FS-like operations (delete, rename, copy, etc.) and also opens the segment archives either for reading or reading and writing.

The implementation doesn't need to be thread-safe.

  • Method Details

    • listArchives

      @NotNull @NotNull List<String> listArchives() throws IOException
      List names of the available .tar archives.
      Returns:
      archive list
      Throws:
      IOException
    • open

      @Nullable @Nullable SegmentArchiveReader open(@NotNull @NotNull String archiveName) throws IOException
      Opens a given archive for reading.
      Parameters:
      archiveName -
      Returns:
      the archive reader or null if the archive doesn't exist or doesn't have a valid index
      Throws:
      IOException
    • forceOpen

      @Nullable @Nullable SegmentArchiveReader forceOpen(String archiveName) throws IOException
      Opens an archive that wasn't closed correctly.
      Parameters:
      archiveName -
      Returns:
      the archive reader or null if the implementation doesn't support opening an unclosed archive
      Throws:
      IOException
    • create

      @NotNull @NotNull SegmentArchiveWriter create(@NotNull @NotNull String archiveName) throws IOException
      Creates a new archive.
      Parameters:
      archiveName -
      Returns:
      the archive writer
      Throws:
      IOException
    • delete

      boolean delete(@NotNull @NotNull String archiveName)
      Deletes the archive if exists.
      Parameters:
      archiveName -
      Returns:
      true if the archive was removed, false otherwise
    • renameTo

      boolean renameTo(@NotNull @NotNull String from, @NotNull @NotNull String to)
      Renames the archive.
      Parameters:
      from - the existing archive
      to - new name
      Returns:
      true if the archive was renamed, false otherwise
    • copyFile

      void copyFile(@NotNull @NotNull String from, @NotNull @NotNull String to) throws IOException
      Copies the archive with all the segments.
      Parameters:
      from - the existing archive
      to - new name
      Throws:
      IOException
    • exists

      boolean exists(@NotNull @NotNull String archiveName)
      Check if archive exists.
      Parameters:
      archiveName - archive to check
      Returns:
      true if archive exists, false otherwise
    • recoverEntries

      void recoverEntries(@NotNull @NotNull String archiveName, @NotNull @NotNull LinkedHashMap<UUID,byte[]> entries) throws IOException
      Finds all the segments included in the archive.
      Parameters:
      archiveName - archive to recover
      entries - results will be put there, in the order of presence in the archive
      Throws:
      IOException
    • backup

      void backup(@NotNull @NotNull String archiveName, @NotNull @NotNull String backupArchiveName, @NotNull @NotNull Set<UUID> recoveredEntries) throws IOException
      Method that is doing a backup of the archive given with archiveName into backupArchiveName. In addition, set of UUIDs of recovered segments is provided which can be inspected during backup. Method is invoked during archive recovery procedure and concrete implementation can decide whether original archive should be deleted or modified.
      Parameters:
      archiveName -
      backupArchiveName -
      recoveredEntries -
      Throws:
      IOException