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
A typical snapshot creating process looks like this:
- On the master node the
createSnapshot(CreateSnapshotRequest, ActionListener)
is called and makes sure that no snapshot is currently running and registers the new snapshot in cluster state - When cluster state is updated
the
beginSnapshot(ClusterState, SnapshotsInProgress.Entry, boolean, ActionListener)
method kicks in and initializes the snapshot in the repository and then populates list of shards that needs to be snapshotted in cluster state - Each data node is watching for these shards and when new shards scheduled for snapshotting appear in the cluster state, data nodes
start processing them through
SnapshotShardsService.startNewSnapshots(org.elasticsearch.cluster.SnapshotsInProgress)
method - Once shard snapshot is created data node updates state of the shard in the cluster state using
the
SnapshotShardsService.sendSnapshotShardUpdate(Snapshot, ShardId, ShardSnapshotStatus)
method - When last shard is completed master node in
SnapshotShardsService.innerUpdateSnapshotState(org.elasticsearch.snapshots.SnapshotShardsService.UpdateIndexShardSnapshotStatusRequest, org.elasticsearch.action.ActionListener<org.elasticsearch.snapshots.SnapshotShardsService.UpdateIndexShardSnapshotStatusResponse>)
method marks the snapshot as completed - After cluster state is updated, the
endSnapshot(SnapshotsInProgress.Entry, MetaData)
finalizes snapshot in the repository, notifies allsnapshotCompletionListeners
that snapshot is completed, and finally callsremoveSnapshotFromClusterState(Snapshot, SnapshotInfo, Exception)
to remove snapshot from cluster state
-
Field Summary
Fields Modifier and Type Field Description static Version
NO_REPO_INITIALIZE_VERSION
Minimum node version which does not useRepository.initializeSnapshot(SnapshotId, List, MetaData)
to write snapshot metadata when starting a snapshot.static Version
SHARD_GEN_IN_REPO_DATA_VERSION
-
Constructor Summary
Constructors Constructor Description SnapshotsService(Settings settings, ClusterService clusterService, IndexNameExpressionResolver indexNameExpressionResolver, RepositoriesService repositoriesService, ThreadPool threadPool)
-
Method Summary
Modifier and Type Method Description void
applyClusterState(ClusterChangedEvent event)
Called when a new cluster state (ClusterChangedEvent.state()
needs to be applied.void
createSnapshot(CreateSnapshotRequest request, ActionListener<Snapshot> listener)
Initializes the snapshotting process.java.util.List<SnapshotInfo>
currentSnapshots(java.lang.String repositoryName)
Returns a list of currently running snapshots from repository sorted by snapshot creation datejava.util.List<SnapshotsInProgress.Entry>
currentSnapshots(java.lang.String repository, java.util.List<java.lang.String> snapshots)
Returns status of the currently running snapshotsvoid
deleteSnapshot(java.lang.String repositoryName, java.lang.String snapshotName, ActionListener<java.lang.Void> listener, boolean immediatePriority)
Deletes a snapshot from the repository, looking up theSnapshot
reference before deleting.protected void
doClose()
protected void
doStart()
protected void
doStop()
void
executeSnapshot(CreateSnapshotRequest request, ActionListener<SnapshotInfo> listener)
Same ascreateSnapshot(CreateSnapshotRequest, ActionListener)
but invokes its callback on completion of the snapshot.void
getRepositoryData(java.lang.String repositoryName, ActionListener<RepositoryData> listener)
Gets theRepositoryData
for the given repository.boolean
hasOldVersionSnapshots(java.lang.String repositoryName, RepositoryData repositoryData, SnapshotId excluded)
static boolean
isRepositoryInUse(ClusterState clusterState, java.lang.String repository)
Checks if a repository is currently in use by one of the snapshotsSnapshotInfo
snapshot(java.lang.String repositoryName, SnapshotId snapshotId)
Retrieves snapshot from repositoryjava.util.List<SnapshotInfo>
snapshots(java.lang.String repositoryName, java.util.List<SnapshotId> snapshotIds, boolean ignoreUnavailable)
Returns a list of snapshots from repository sorted by snapshot creation datejava.util.Map<ShardId,IndexShardSnapshotStatus>
snapshotShards(java.lang.String repositoryName, RepositoryData repositoryData, SnapshotInfo snapshotInfo)
Returns status of shards currently finished snapshotsstatic 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.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. -
SHARD_GEN_IN_REPO_DATA_VERSION
-
-
Constructor Details
-
SnapshotsService
public SnapshotsService(Settings settings, ClusterService clusterService, IndexNameExpressionResolver indexNameExpressionResolver, RepositoriesService repositoriesService, ThreadPool threadPool)
-
-
Method Details
-
getRepositoryData
public void getRepositoryData(java.lang.String repositoryName, ActionListener<RepositoryData> listener)Gets theRepositoryData
for the given repository.- Parameters:
repositoryName
- repository namelistener
- listener to passRepositoryData
to
-
snapshot
Retrieves snapshot from repository- Parameters:
repositoryName
- repository namesnapshotId
- snapshot id- Returns:
- snapshot
- Throws:
SnapshotMissingException
- if snapshot is not found
-
snapshots
public java.util.List<SnapshotInfo> snapshots(java.lang.String repositoryName, java.util.List<SnapshotId> snapshotIds, boolean ignoreUnavailable)Returns a list of snapshots from repository sorted by snapshot creation date- Parameters:
repositoryName
- repository namesnapshotIds
- snapshots for which to fetch snapshot informationignoreUnavailable
- if true, snapshots that could not be read will only be logged with a warning, if false, they will throw an error- Returns:
- list of snapshots
-
currentSnapshots
Returns a list of currently running snapshots from repository sorted by snapshot creation date- Parameters:
repositoryName
- repository name- Returns:
- list of snapshots
-
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
-
hasOldVersionSnapshots
public boolean hasOldVersionSnapshots(java.lang.String repositoryName, RepositoryData repositoryData, @Nullable SnapshotId excluded) -
currentSnapshots
public java.util.List<SnapshotsInProgress.Entry> currentSnapshots(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:
repository
- 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
-
snapshotShards
public java.util.Map<ShardId,IndexShardSnapshotStatus> snapshotShards(java.lang.String repositoryName, RepositoryData repositoryData, SnapshotInfo snapshotInfo) throws java.io.IOExceptionReturns status of shards currently finished snapshotsThis method is executed on master node and it's complimentary to the
SnapshotShardsService.currentSnapshotShards(Snapshot)
because it returns similar information but for already finished snapshots.- Parameters:
repositoryName
- repository namesnapshotInfo
- snapshot info- Returns:
- map of shard id to snapshot status
- Throws:
java.io.IOException
-
applyClusterState
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 interfaceClusterStateApplier
-
deleteSnapshot
public void deleteSnapshot(java.lang.String repositoryName, java.lang.String snapshotName, ActionListener<java.lang.Void> listener, boolean immediatePriority)Deletes a snapshot from the repository, looking up theSnapshot
reference before deleting. If the snapshot is still running cancels the snapshot first and then deletes it from the repository.- Parameters:
repositoryName
- repositoryNamesnapshotName
- snapshotNamelistener
- listener
-
isRepositoryInUse
Checks if a repository is currently in use by one of the snapshots- Parameters:
clusterState
- cluster staterepository
- repository id- Returns:
- true if repository is currently in use by one of the running snapshots
-
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:
doStart
in classAbstractLifecycleComponent
-
doStop
protected void doStop()- Specified by:
doStop
in classAbstractLifecycleComponent
-
doClose
protected void doClose()- Specified by:
doClose
in classAbstractLifecycleComponent
-