Package org.elasticsearch.snapshots
Class SnapshotsService
java.lang.Object
org.elasticsearch.common.component.AbstractLifecycleComponent
org.elasticsearch.snapshots.SnapshotsService
- All Implemented Interfaces:
java.io.Closeable,java.lang.AutoCloseable,ClusterStateApplier,LifecycleComponent,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 Summary
Fields Modifier and Type Field Description static VersionCLONE_SNAPSHOT_VERSIONstatic VersionFULL_CONCURRENCY_VERSIONstatic VersionINDEX_GEN_IN_REPO_DATA_VERSIONstatic Setting<java.lang.Integer>MAX_CONCURRENT_SNAPSHOT_OPERATIONS_SETTINGSetting that specifies the maximum number of allowed concurrent snapshot create and delete operations in the cluster state.static VersionMULTI_DELETE_VERSIONstatic VersionNO_REPO_INITIALIZE_VERSIONMinimum node version which does not useRepository.initializeSnapshot(SnapshotId, List, Metadata)to write snapshot metadata when starting a snapshot.static VersionOLD_SNAPSHOT_FORMATstatic VersionSHARD_GEN_IN_REPO_DATA_VERSIONstatic java.lang.StringUPDATE_SNAPSHOT_STATUS_ACTION_NAME -
Constructor Summary
Constructors Constructor Description SnapshotsService(Settings settings, ClusterService clusterService, IndexNameExpressionResolver indexNameExpressionResolver, RepositoriesService repositoriesService, TransportService transportService, ActionFilters actionFilters) -
Method Summary
Modifier and Type Method Description voidapplyClusterState(ClusterChangedEvent event)Called when a new cluster state (ClusterChangedEvent.state()needs to be applied.booleanassertAllListenersResolved()Assert that no in-memory state for any running snapshot-create or -delete operation exists in this instance.voidcloneSnapshot(CloneSnapshotRequest request, ActionListener<java.lang.Void> listener)voidcreateSnapshot(CreateSnapshotRequest request, ActionListener<Snapshot> listener)Initializes the snapshotting process.voidcreateSnapshotLegacy(CreateSnapshotRequest request, ActionListener<Snapshot> listener)Initializes the snapshotting process.static java.util.List<SnapshotsInProgress.Entry>currentSnapshots(SnapshotsInProgress snapshotsInProgress, java.lang.String repository, java.util.List<java.lang.String> snapshots)Returns status of the currently running snapshotsvoiddeleteSnapshots(DeleteSnapshotRequest request, ActionListener<java.lang.Void> listener)Deletes snapshots from the repository.protected voiddoClose()protected voiddoStart()protected voiddoStop()voidexecuteSnapshot(CreateSnapshotRequest request, ActionListener<SnapshotInfo> listener)Same ascreateSnapshot(CreateSnapshotRequest, ActionListener)but invokes its callback on completion of the snapshot.voidexecuteSnapshotLegacy(CreateSnapshotRequest request, ActionListener<SnapshotInfo> listener)Same ascreateSnapshot(CreateSnapshotRequest, ActionListener)but invokes its callback on completion of the snapshot.VersionminCompatibleVersion(Version minNodeVersion, RepositoryData repositoryData, java.util.Collection<SnapshotId> excluded)Determines the minimumVersionthat the snapshot repository must be compatible with from the current nodes in the cluster and the contents of the repository.static java.util.Set<java.lang.String>snapshottingDataStreams(ClusterState currentState, java.util.Set<java.lang.String> dataStreamsToCheck)Returns the data streams that are currently being snapshotted (with partial == false) and that are contained in the indices-to-check set.static java.util.Set<Index>snapshottingIndices(ClusterState currentState, java.util.Set<Index> indicesToCheck)Returns the indices that are currently being snapshotted (with partial == false) and that are contained in the indices-to-check set.static ClusterStateupdateWithSnapshots(ClusterState state, SnapshotsInProgress snapshotsInProgress, SnapshotDeletionsInProgress snapshotDeletionsInProgress)Shortcut to build newClusterStatefrom the current state and updated values ofSnapshotsInProgressandSnapshotDeletionsInProgress.static booleanuseIndexGenerations(Version repositoryMetaVersion)Checks whether the metadata version supports writingShardGenerationsto the repository.static booleanuseShardGenerations(Version repositoryMetaVersion)Checks whether the metadata version supports writingShardGenerationsto the repository.Methods inherited from class org.elasticsearch.common.component.AbstractLifecycleComponent
addLifecycleListener, close, lifecycleState, removeLifecycleListener, start, stop
-
Field Details
-
NO_REPO_INITIALIZE_VERSION
Minimum node version which does not useRepository.initializeSnapshot(SnapshotId, List, Metadata)to write snapshot metadata when starting a snapshot. -
FULL_CONCURRENCY_VERSION
-
CLONE_SNAPSHOT_VERSION
-
SHARD_GEN_IN_REPO_DATA_VERSION
-
INDEX_GEN_IN_REPO_DATA_VERSION
-
OLD_SNAPSHOT_FORMAT
-
MULTI_DELETE_VERSION
-
UPDATE_SNAPSHOT_STATUS_ACTION_NAME
public static final java.lang.String UPDATE_SNAPSHOT_STATUS_ACTION_NAME- See Also:
- Constant Field Values
-
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 ofSnapshotsInProgress.entries()andSnapshotDeletionsInProgress.getEntries().
-
-
Constructor Details
-
SnapshotsService
public SnapshotsService(Settings settings, ClusterService clusterService, IndexNameExpressionResolver indexNameExpressionResolver, RepositoriesService repositoriesService, TransportService transportService, ActionFilters actionFilters)
-
-
Method Details
-
executeSnapshotLegacy
public void executeSnapshotLegacy(CreateSnapshotRequest request, ActionListener<SnapshotInfo> listener)Same ascreateSnapshot(CreateSnapshotRequest, ActionListener)but invokes its callback on completion of the snapshot. Note: This method is only used in clusters that contain a node older thanNO_REPO_INITIALIZE_VERSIONto ensure a backwards compatible path for initializing the snapshot in the repository is executed.- Parameters:
request- snapshot requestlistener- snapshot completion listener
-
createSnapshotLegacy
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_VERSIONto ensure a backwards compatible path for initializing the snapshot in the repository is executed.- Parameters:
request- snapshot requestlistener- snapshot creation listener
-
executeSnapshot
Same ascreateSnapshot(CreateSnapshotRequest, ActionListener)but invokes its callback on completion of the snapshot.- Parameters:
request- snapshot requestlistener- snapshot completion listener
-
createSnapshot
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 requestlistener- snapshot creation listener
-
cloneSnapshot
-
currentSnapshots
public static java.util.List<SnapshotsInProgress.Entry> currentSnapshots(@Nullable SnapshotsInProgress snapshotsInProgress, java.lang.String repository, java.util.List<java.lang.String> snapshots)Returns status of the currently running snapshotsThis method is executed on master node
- Parameters:
snapshotsInProgress- snapshots in progress in the cluster staterepository- repository idsnapshots- 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
Description copied from interface:ClusterStateApplierCalled 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:
applyClusterStatein interfaceClusterStateApplier
-
deleteSnapshots
public void deleteSnapshots(DeleteSnapshotRequest request, ActionListener<java.lang.Void> listener)Deletes snapshots from the repository. In-progress snapshots matched by the delete will be aborted before deleting them.- Parameters:
request- delete snapshot requestlistener- listener
-
minCompatibleVersion
public Version minCompatibleVersion(Version minNodeVersion, RepositoryData repositoryData, @Nullable java.util.Collection<SnapshotId> excluded)Determines the minimumVersionthat 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 clusterrepositoryData- currentRepositoryDataof that repositoryexcluded- 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
Checks whether the metadata version supports writingShardGenerationsto the repository.- Parameters:
repositoryMetaVersion- version to check- Returns:
- true if version supports
ShardGenerations
-
useIndexGenerations
Checks whether the metadata version supports writingShardGenerationsto the repository.- Parameters:
repositoryMetaVersion- version to check- Returns:
- true if version supports
ShardGenerations
-
updateWithSnapshots
public static ClusterState updateWithSnapshots(ClusterState state, @Nullable SnapshotsInProgress snapshotsInProgress, @Nullable SnapshotDeletionsInProgress snapshotDeletionsInProgress)Shortcut to build newClusterStatefrom the current state and updated values ofSnapshotsInProgressandSnapshotDeletionsInProgress.- Parameters:
state- current cluster statesnapshotsInProgress- new value forSnapshotsInProgressornullif it's unchangedsnapshotDeletionsInProgress- new value forSnapshotDeletionsInProgressornullif it's unchanged- Returns:
- updated cluster state
-
snapshottingDataStreams
public static java.util.Set<java.lang.String> snapshottingDataStreams(ClusterState currentState, java.util.Set<java.lang.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 java.util.Set<Index> snapshottingIndices(ClusterState currentState, java.util.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:
doStartin classAbstractLifecycleComponent
-
doStop
protected void doStop()- Specified by:
doStopin classAbstractLifecycleComponent
-
doClose
protected void doClose()- Specified by:
doClosein classAbstractLifecycleComponent
-
assertAllListenersResolved
public boolean assertAllListenersResolved()Assert that no in-memory state for any running snapshot-create or -delete operation exists in this instance.
-