Class SnapshotsService

All Implemented Interfaces:
Closeable, AutoCloseable, ClusterStateApplier, LifecycleComponent, org.elasticsearch.core.Releasable

public class SnapshotsService extends AbstractLifecycleComponent implements ClusterStateApplier
Service responsible for creating snapshots. This service runs all the steps executed on the master node during snapshot creation and deletion. See package level documentation of org.elasticsearch.snapshots for details.
  • Field Details

    • NO_REPO_INITIALIZE_VERSION

      public static final Version NO_REPO_INITIALIZE_VERSION
      Minimum node version which does not use Repository.initializeSnapshot(SnapshotId, List, Metadata) to write snapshot metadata when starting a snapshot.
    • FULL_CONCURRENCY_VERSION

      public static final Version FULL_CONCURRENCY_VERSION
    • CLONE_SNAPSHOT_VERSION

      public static final Version CLONE_SNAPSHOT_VERSION
    • SHARD_GEN_IN_REPO_DATA_VERSION

      public static final Version SHARD_GEN_IN_REPO_DATA_VERSION
    • INDEX_GEN_IN_REPO_DATA_VERSION

      public static final Version INDEX_GEN_IN_REPO_DATA_VERSION
    • UUIDS_IN_REPO_DATA_VERSION

      public static final Version UUIDS_IN_REPO_DATA_VERSION
    • OLD_SNAPSHOT_FORMAT

      public static final Version OLD_SNAPSHOT_FORMAT
    • MULTI_DELETE_VERSION

      public static final Version MULTI_DELETE_VERSION
    • FEATURE_STATES_VERSION

      public static final Version FEATURE_STATES_VERSION
    • INDEX_DETAILS_INTRODUCED

      public static final Version INDEX_DETAILS_INTRODUCED
    • UPDATE_SNAPSHOT_STATUS_ACTION_NAME

      public static final String UPDATE_SNAPSHOT_STATUS_ACTION_NAME
      See Also:
      Constant Field Values
    • NO_FEATURE_STATES_VALUE

      public static final String NO_FEATURE_STATES_VALUE
      See Also:
      Constant Field Values
    • MAX_CONCURRENT_SNAPSHOT_OPERATIONS_SETTING

      public static final Setting<Integer> MAX_CONCURRENT_SNAPSHOT_OPERATIONS_SETTING
      Setting that specifies the maximum number of allowed concurrent snapshot create and delete operations in the cluster state. The number of concurrent operations in a cluster state is defined as the sum of the sizes of SnapshotsInProgress.entries() and SnapshotDeletionsInProgress.getEntries().
  • Constructor Details

  • Method Details

    • executeSnapshotLegacy

      public void executeSnapshotLegacy(CreateSnapshotRequest request, ActionListener<SnapshotInfo> listener)
      Same as createSnapshot(CreateSnapshotRequest, ActionListener) but invokes its callback on completion of the snapshot. Note: This method is only used in clusters that contain a node older than NO_REPO_INITIALIZE_VERSION to ensure a backwards compatible path for initializing the snapshot in the repository is executed.
      Parameters:
      request - snapshot request
      listener - snapshot completion listener
    • createSnapshotLegacy

      public void createSnapshotLegacy(CreateSnapshotRequest request, ActionListener<Snapshot> listener)
      Initializes the snapshotting process.

      This method is used by clients to start snapshot. It makes sure that there is no snapshots are currently running and creates a snapshot record in cluster state metadata. Note: This method is only used in clusters that contain a node older than NO_REPO_INITIALIZE_VERSION to ensure a backwards compatible path for initializing the snapshot in the repository is executed.

      Parameters:
      request - snapshot request
      listener - snapshot creation listener
    • executeSnapshot

      public void executeSnapshot(CreateSnapshotRequest request, ActionListener<SnapshotInfo> listener)
      Same as createSnapshot(CreateSnapshotRequest, ActionListener) but invokes its callback on completion of the snapshot.
      Parameters:
      request - snapshot request
      listener - snapshot completion listener
    • createSnapshot

      public void createSnapshot(CreateSnapshotRequest request, ActionListener<Snapshot> listener)
      Initializes the snapshotting process.

      This method is used by clients to start snapshot. It makes sure that there is no snapshots are currently running and creates a snapshot record in cluster state metadata.

      Parameters:
      request - snapshot request
      listener - snapshot creation listener
    • cloneSnapshot

      public void cloneSnapshot(CloneSnapshotRequest request, ActionListener<Void> listener)
    • ensureRepositoryExists

      public static void ensureRepositoryExists(String repoName, ClusterState state)
      Throws RepositoryMissingException if no repository by the given name is found in the given cluster state.
    • currentSnapshots

      public static List<SnapshotsInProgress.Entry> currentSnapshots(@Nullable SnapshotsInProgress snapshotsInProgress, String repository, List<String> snapshots)
      Returns status of the currently running snapshots

      This method is executed on master node

      Parameters:
      snapshotsInProgress - snapshots in progress in the cluster state
      repository - repository id
      snapshots - list of snapshots that will be used as a filter, empty list means no snapshots are filtered
      Returns:
      list of metadata for currently running snapshots
    • applyClusterState

      public void applyClusterState(ClusterChangedEvent event)
      Description copied from interface: ClusterStateApplier
      Called when a new cluster state (ClusterChangedEvent.state() needs to be applied. The cluster state to be applied is already committed when this method is called, so an applier must therefore be prepared to deal with any state it receives without throwing an exception. Throwing an exception from an applier is very bad because it will stop the application of this state before it has reached all the other appliers, and will likely result in another attempt to apply the same (or very similar) cluster state which might continue until this node is removed from the cluster.
      Specified by:
      applyClusterState in interface ClusterStateApplier
    • deleteSnapshots

      public void deleteSnapshots(DeleteSnapshotRequest request, ActionListener<Void> listener)
      Deletes snapshots from the repository. In-progress snapshots matched by the delete will be aborted before deleting them.
      Parameters:
      request - delete snapshot request
      listener - listener
    • minCompatibleVersion

      public Version minCompatibleVersion(Version minNodeVersion, RepositoryData repositoryData, @Nullable Collection<SnapshotId> excluded)
      Determines the minimum Version that the snapshot repository must be compatible with from the current nodes in the cluster and the contents of the repository. The minimum version is determined as the lowest version found across all snapshots in the repository and all nodes in the cluster.
      Parameters:
      minNodeVersion - minimum node version in the cluster
      repositoryData - current RepositoryData of that repository
      excluded - snapshot id to ignore when computing the minimum version (used to use newer metadata version after a snapshot delete)
      Returns:
      minimum node version that must still be able to read the repository metadata
    • useShardGenerations

      public static boolean useShardGenerations(Version repositoryMetaVersion)
      Checks whether the metadata version supports writing ShardGenerations to the repository.
      Parameters:
      repositoryMetaVersion - version to check
      Returns:
      true if version supports ShardGenerations
    • useIndexGenerations

      public static boolean useIndexGenerations(Version repositoryMetaVersion)
      Checks whether the metadata version supports writing ShardGenerations to the repository.
      Parameters:
      repositoryMetaVersion - version to check
      Returns:
      true if version supports ShardGenerations
    • includesUUIDs

      public static boolean includesUUIDs(Version repositoryMetaVersion)
      Checks whether the metadata version supports writing the cluster- and repository-uuid to the repository.
      Parameters:
      repositoryMetaVersion - version to check
      Returns:
      true if version supports writing cluster- and repository-uuid to the repository
    • updateWithSnapshots

      public static ClusterState updateWithSnapshots(ClusterState state, @Nullable SnapshotsInProgress snapshotsInProgress, @Nullable SnapshotDeletionsInProgress snapshotDeletionsInProgress)
      Shortcut to build new ClusterState from the current state and updated values of SnapshotsInProgress and SnapshotDeletionsInProgress.
      Parameters:
      state - current cluster state
      snapshotsInProgress - new value for SnapshotsInProgress or null if it's unchanged
      snapshotDeletionsInProgress - new value for SnapshotDeletionsInProgress or null if it's unchanged
      Returns:
      updated cluster state
    • snapshottingDataStreams

      public static Set<String> snapshottingDataStreams(ClusterState currentState, Set<String> dataStreamsToCheck)
      Returns the data streams that are currently being snapshotted (with partial == false) and that are contained in the indices-to-check set.
    • snapshottingIndices

      public static Set<Index> snapshottingIndices(ClusterState currentState, Set<Index> indicesToCheck)
      Returns the indices that are currently being snapshotted (with partial == false) and that are contained in the indices-to-check set.
    • doStart

      protected void doStart()
      Specified by:
      doStart in class AbstractLifecycleComponent
    • doStop

      protected void doStop()
      Specified by:
      doStop in class AbstractLifecycleComponent
    • doClose

      protected void doClose()
      Specified by:
      doClose in class AbstractLifecycleComponent
    • assertAllListenersResolved

      public boolean assertAllListenersResolved()
      Assert that no in-memory state for any running snapshot-create or -delete operation exists in this instance.