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
,org.elasticsearch.common.lease.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 Version
CLONE_SNAPSHOT_VERSION
static Version
FEATURE_STATES_VERSION
static Version
FULL_CONCURRENCY_VERSION
static Version
INDEX_DETAILS_INTRODUCED
static Version
INDEX_GEN_IN_REPO_DATA_VERSION
static Setting<java.lang.Integer>
MAX_CONCURRENT_SNAPSHOT_OPERATIONS_SETTING
Setting that specifies the maximum number of allowed concurrent snapshot create and delete operations in the cluster state.static Version
MULTI_DELETE_VERSION
static java.lang.String
NO_FEATURE_STATES_VALUE
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
OLD_SNAPSHOT_FORMAT
static Version
SHARD_GEN_IN_REPO_DATA_VERSION
static java.lang.String
UPDATE_SNAPSHOT_STATUS_ACTION_NAME
static Version
UUIDS_IN_REPO_DATA_VERSION
Fields inherited from class org.elasticsearch.common.component.AbstractLifecycleComponent
lifecycle
-
Constructor Summary
Constructors Constructor Description SnapshotsService(Settings settings, ClusterService clusterService, IndexNameExpressionResolver indexNameExpressionResolver, RepositoriesService repositoriesService, TransportService transportService, ActionFilters actionFilters, java.util.Map<java.lang.String,SystemIndices.Feature> systemIndexDescriptorMap)
-
Method Summary
Modifier and Type Method Description void
applyClusterState(ClusterChangedEvent event)
Called when a new cluster state (ClusterChangedEvent.state()
needs to be applied.boolean
assertAllListenersResolved()
Assert that no in-memory state for any running snapshot-create or -delete operation exists in this instance.void
cloneSnapshot(CloneSnapshotRequest request, ActionListener<java.lang.Void> listener)
void
createSnapshot(CreateSnapshotRequest request, ActionListener<Snapshot> listener)
Initializes the snapshotting process.void
createSnapshotLegacy(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 snapshotsvoid
deleteSnapshots(DeleteSnapshotRequest request, ActionListener<java.lang.Void> listener)
Deletes snapshots from the repository.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
executeSnapshotLegacy(CreateSnapshotRequest request, ActionListener<SnapshotInfo> listener)
Same ascreateSnapshot(CreateSnapshotRequest, ActionListener)
but invokes its callback on completion of the snapshot.static boolean
includesUUIDs(Version repositoryMetaVersion)
Checks whether the metadata version supports writing the cluster- and repository-uuid to the repository.Version
minCompatibleVersion(Version minNodeVersion, RepositoryData repositoryData, java.util.Collection<SnapshotId> excluded)
Determines the minimumVersion
that 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 ClusterState
updateWithSnapshots(ClusterState state, SnapshotsInProgress snapshotsInProgress, SnapshotDeletionsInProgress snapshotDeletionsInProgress)
Shortcut to build newClusterState
from the current state and updated values ofSnapshotsInProgress
andSnapshotDeletionsInProgress
.static boolean
useIndexGenerations(Version repositoryMetaVersion)
Checks whether the metadata version supports writingShardGenerations
to the repository.static boolean
useShardGenerations(Version repositoryMetaVersion)
Checks whether the metadata version supports writingShardGenerations
to the repository.Methods inherited from class org.elasticsearch.common.component.AbstractLifecycleComponent
addLifecycleListener, close, lifecycleState, removeLifecycleListener, start, stop
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
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
-
UUIDS_IN_REPO_DATA_VERSION
-
OLD_SNAPSHOT_FORMAT
-
MULTI_DELETE_VERSION
-
FEATURE_STATES_VERSION
-
INDEX_DETAILS_INTRODUCED
-
UPDATE_SNAPSHOT_STATUS_ACTION_NAME
public static final java.lang.String UPDATE_SNAPSHOT_STATUS_ACTION_NAME- See Also:
- Constant Field Values
-
NO_FEATURE_STATES_VALUE
public static final java.lang.String NO_FEATURE_STATES_VALUE- 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, java.util.Map<java.lang.String,SystemIndices.Feature> systemIndexDescriptorMap)
-
-
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_VERSION
to 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_VERSION
to 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: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
-
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 minimumVersion
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 clusterrepositoryData
- currentRepositoryData
of 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 writingShardGenerations
to the repository.- Parameters:
repositoryMetaVersion
- version to check- Returns:
- true if version supports
ShardGenerations
-
useIndexGenerations
Checks whether the metadata version supports writingShardGenerations
to the repository.- Parameters:
repositoryMetaVersion
- version to check- Returns:
- true if version supports
ShardGenerations
-
includesUUIDs
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 newClusterState
from the current state and updated values ofSnapshotsInProgress
andSnapshotDeletionsInProgress
.- Parameters:
state
- current cluster statesnapshotsInProgress
- new value forSnapshotsInProgress
ornull
if it's unchangedsnapshotDeletionsInProgress
- new value forSnapshotDeletionsInProgress
ornull
if 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:
doStart
in classAbstractLifecycleComponent
-
doStop
protected void doStop()- Specified by:
doStop
in classAbstractLifecycleComponent
-
doClose
protected void doClose()- Specified by:
doClose
in classAbstractLifecycleComponent
-
assertAllListenersResolved
public boolean assertAllListenersResolved()Assert that no in-memory state for any running snapshot-create or -delete operation exists in this instance.
-