Class MetadataStateFormat<T>

java.lang.Object
org.opensearch.gateway.MetadataStateFormat<T>
Type Parameters:
T - the type of the XContent base data-structure

public abstract class MetadataStateFormat<T> extends Object
MetadataStateFormat is a base class to write checksummed XContent based files to one or more directories in a standardized directory structure.
Opensearch.internal:
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final org.opensearch.common.xcontent.XContentType
     
    static final String
     
    static final String
     
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    protected
    Creates a new MetadataStateFormat instance
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    cleanupOldFiles(long currentGeneration, Path[] locations)
    Clean ups all state files not matching passed generation.
    static void
    deleteMetaState(Path... dataLocations)
    Deletes all meta state directories recursively for the given data locations
    abstract T
    fromXContent(org.opensearch.core.xcontent.XContentParser parser)
    Reads a new instance of the state from the given XContentParser Subclasses need to implement this class for theirs specific state.
     
    getStateFileName(long generation)
     
    loadGeneration(org.apache.logging.log4j.Logger logger, org.opensearch.core.xcontent.NamedXContentRegistry namedXContentRegistry, long generation, Path... dataLocations)
    Tries to load the state of particular generation from the given data-locations.
    loadLatestState(org.apache.logging.log4j.Logger logger, org.opensearch.core.xcontent.NamedXContentRegistry namedXContentRegistry, Path... dataLocations)
    Tries to load the latest state from the given data-locations.
    org.opensearch.common.collect.Tuple<T,Long>
    loadLatestStateWithGeneration(org.apache.logging.log4j.Logger logger, org.opensearch.core.xcontent.NamedXContentRegistry namedXContentRegistry, Path... dataLocations)
    Tries to load the latest state from the given data-locations.
    protected org.apache.lucene.store.Directory
     
    protected org.opensearch.core.xcontent.XContentBuilder
    newXContentBuilder(org.opensearch.common.xcontent.XContentType type, OutputStream stream)
     
    final T
    read(org.opensearch.core.xcontent.NamedXContentRegistry namedXContentRegistry, Path file)
    Reads the state from a given file and compares the expected version against the actual version of the state.
    abstract void
    toXContent(org.opensearch.core.xcontent.XContentBuilder builder, T state)
    Writes the given state to the given XContentBuilder Subclasses need to implement this class for theirs specific state.
    final long
    write(T state, Path... locations)
    Writes the given state to the given directories.
    final long
    writeAndCleanup(T state, Path... locations)
    Writes the given state to the given directories and performs cleanup of old state files if the write succeeds or newly created state file if write fails.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • FORMAT

      public static final org.opensearch.common.xcontent.XContentType FORMAT
    • STATE_DIR_NAME

      public static final String STATE_DIR_NAME
      See Also:
    • STATE_FILE_EXTENSION

      public static final String STATE_FILE_EXTENSION
      See Also:
  • Constructor Details

  • Method Details

    • writeAndCleanup

      public final long writeAndCleanup(T state, Path... locations) throws WriteStateException
      Writes the given state to the given directories and performs cleanup of old state files if the write succeeds or newly created state file if write fails. See also write(Object, Path...) and cleanupOldFiles(long, Path[]).
      Throws:
      WriteStateException
    • write

      public final long write(T state, Path... locations) throws WriteStateException
      Writes the given state to the given directories. The state is written to a state directory ("_state"<T>) underneath each of the given file locations and is created if it doesn't exist. The state is serialized to a temporary file in that directory and is then atomically moved to it's target filename of the pattern {prefix}{version}.st. If this method returns without exception there is a guarantee that state is persisted to the disk and loadLatestState will return it.
      This method always performs cleanup of temporary files regardless whether it succeeds or fails. Cleanup logic for state files is more involved. If this method fails with an exception, it performs cleanup of newly created state file. But if this method succeeds, it does not perform cleanup of old state files. If this write succeeds, but some further write fails, you may want to rollback the transaction and keep old file around. After transaction is finished use cleanupOldFiles(long, Path[]) for the clean-up. If this write is not a part of bigger transaction, consider using writeAndCleanup(Object, Path...) method instead.
      Parameters:
      state - the state object to write
      locations - the locations where the state should be written to.
      Returns:
      generation of newly written state.
      Throws:
      WriteStateException - if some exception during writing state occurs. See also WriteStateException.isDirty().
    • newXContentBuilder

      protected org.opensearch.core.xcontent.XContentBuilder newXContentBuilder(org.opensearch.common.xcontent.XContentType type, OutputStream stream) throws IOException
      Throws:
      IOException
    • toXContent

      public abstract void toXContent(org.opensearch.core.xcontent.XContentBuilder builder, T state) throws IOException
      Writes the given state to the given XContentBuilder Subclasses need to implement this class for theirs specific state.
      Throws:
      IOException
    • fromXContent

      public abstract T fromXContent(org.opensearch.core.xcontent.XContentParser parser) throws IOException
      Reads a new instance of the state from the given XContentParser Subclasses need to implement this class for theirs specific state.
      Throws:
      IOException
    • read

      public final T read(org.opensearch.core.xcontent.NamedXContentRegistry namedXContentRegistry, Path file) throws IOException
      Reads the state from a given file and compares the expected version against the actual version of the state.
      Throws:
      IOException
    • newDirectory

      protected org.apache.lucene.store.Directory newDirectory(Path dir) throws IOException
      Throws:
      IOException
    • cleanupOldFiles

      public void cleanupOldFiles(long currentGeneration, Path[] locations)
      Clean ups all state files not matching passed generation.
      Parameters:
      currentGeneration - state generation to keep.
      locations - state paths.
    • getStateFileName

      public String getStateFileName(long generation)
    • loadGeneration

      public T loadGeneration(org.apache.logging.log4j.Logger logger, org.opensearch.core.xcontent.NamedXContentRegistry namedXContentRegistry, long generation, Path... dataLocations)
      Tries to load the state of particular generation from the given data-locations. If any of data locations contain state files with given generation, state will be loaded from these state files.
      Parameters:
      logger - a logger instance.
      generation - the generation to be loaded.
      dataLocations - the data-locations to try.
      Returns:
      the state of asked generation or null if no state was found.
    • loadLatestStateWithGeneration

      public org.opensearch.common.collect.Tuple<T,Long> loadLatestStateWithGeneration(org.apache.logging.log4j.Logger logger, org.opensearch.core.xcontent.NamedXContentRegistry namedXContentRegistry, Path... dataLocations) throws IOException
      Tries to load the latest state from the given data-locations.
      Parameters:
      logger - a logger instance.
      dataLocations - the data-locations to try.
      Returns:
      tuple of the latest state and generation. (null, -1) if no state is found.
      Throws:
      IOException
    • loadLatestState

      public T loadLatestState(org.apache.logging.log4j.Logger logger, org.opensearch.core.xcontent.NamedXContentRegistry namedXContentRegistry, Path... dataLocations) throws IOException
      Tries to load the latest state from the given data-locations.
      Parameters:
      logger - a logger instance.
      dataLocations - the data-locations to try.
      Returns:
      the latest state or null if no state was found.
      Throws:
      IOException
    • deleteMetaState

      public static void deleteMetaState(Path... dataLocations) throws IOException
      Deletes all meta state directories recursively for the given data locations
      Parameters:
      dataLocations - the data location to delete
      Throws:
      IOException
    • getPrefix

      public String getPrefix()