Class BlobStoreRepository
- All Implemented Interfaces:
java.io.Closeable,java.lang.AutoCloseable,LifecycleComponent,Releasable,Repository
- Direct Known Subclasses:
FsRepository
public abstract class BlobStoreRepository extends AbstractLifecycleComponent implements Repository
This repository works with any BlobStore implementation. The blobStore could be (and preferred) lazy initialized in
createBlobStore().
org.elasticsearch.repositories.blobstore.-
Nested Class Summary
Nested classes/interfaces inherited from interface org.elasticsearch.repositories.Repository
Repository.Factory -
Field Summary
Fields Modifier and Type Field Description static Setting<java.lang.Boolean>ALLOW_CONCURRENT_MODIFICATIONWhen set totrue,bestEffortConsistencywill be set totrueand concurrent modifications of the repository contents will not result in the repository being marked as corrupted.static Setting<java.lang.Boolean>COMPRESS_SETTINGWhen set to true metadata files are stored in compressed format.static java.lang.StringINDEX_FILE_PREFIXstatic java.lang.StringINDEX_LATEST_BLOBprotected RepositoryMetaDatametadatastatic java.lang.StringMETADATA_NAME_FORMATstatic java.lang.StringMETADATA_PREFIXprotected NamedXContentRegistrynamedXContentRegistrystatic java.lang.StringSNAPSHOT_CODECstatic java.lang.StringSNAPSHOT_NAME_FORMATstatic java.lang.StringSNAPSHOT_PREFIXprotected ChecksumBlobStoreFormat<SnapshotInfo>snapshotFormatprotected ThreadPoolthreadPool -
Constructor Summary
Constructors Modifier Constructor Description protectedBlobStoreRepository(RepositoryMetaData metadata, boolean compress, NamedXContentRegistry namedXContentRegistry, ClusterService clusterService)Constructs new BlobStoreRepository -
Method Summary
Modifier and Type Method Description protected voidassertSnapshotOrGenericThread()abstract BlobPathbasePath()Returns base path of the repositoryprotected BlobContainerblobContainer()maintains single lazy instance ofBlobContainerBlobStoreblobStore()Maintains single lazy instance ofBlobStore.protected ByteSizeValuechunkSize()Returns data file chunk size.voidcleanup(long repositoryStateId, boolean writeShardGens, ActionListener<RepositoryCleanupResult> listener)Runs cleanup actions on the repository.protected abstract BlobStorecreateBlobStore()Creates new BlobStore to read and write data.voiddeleteSnapshot(SnapshotId snapshotId, long repositoryStateId, boolean writeShardGens, ActionListener<java.lang.Void> listener)Deletes snapshotprotected voiddoClose()protected voiddoStart()protected voiddoStop()voidendVerification(java.lang.String seed)Called at the end of repository verification process.voidfinalizeSnapshot(SnapshotId snapshotId, ShardGenerations shardGenerations, long startTime, java.lang.String failure, int totalShards, java.util.List<SnapshotShardFailure> shardFailures, long repositoryStateId, boolean includeGlobalState, MetaData clusterMetaData, java.util.Map<java.lang.String,java.lang.Object> userMetadata, boolean writeShardGens, ActionListener<SnapshotInfo> listener)Finalizes snapshotting processprotected BlobStoregetBlobStore()RepositoryMetaDatagetMetadata()Returns metadata about this repository.voidgetRepositoryData(ActionListener<RepositoryData> listener)Returns aRepositoryDatato describe the data in the repository, including the snapshots and the indices across all snapshots found in the repository.longgetRestoreThrottleTimeInNanos()Returns restore throttle time in nanosecondsIndexShardSnapshotStatusgetShardSnapshotStatus(SnapshotId snapshotId, IndexId indexId, ShardId shardId)Retrieve shard snapshot status for the stored snapshotMetaDatagetSnapshotGlobalMetaData(SnapshotId snapshotId)Returns global metadata associated with the snapshot.IndexMetaDatagetSnapshotIndexMetaData(SnapshotId snapshotId, IndexId index)Returns the index metadata associated with the snapshot.SnapshotInfogetSnapshotInfo(SnapshotId snapshotId)Reads snapshot description from repository.longgetSnapshotThrottleTimeInNanos()Returns snapshot throttle time in nanosecondsvoidinitializeSnapshot(SnapshotId snapshotId, java.util.List<IndexId> indices, MetaData clusterMetaData)Starts snapshotting processprotected booleanisCompress()Returns true if metadata and snapshot files should be compressedbooleanisReadOnly()Returns true if the repository supports only read operationsvoidrestoreShard(Store store, SnapshotId snapshotId, IndexId indexId, ShardId snapshotShardId, RecoveryState recoveryState, ActionListener<java.lang.Void> listener)Restores snapshot of the shard.voidsnapshotShard(Store store, MapperService mapperService, SnapshotId snapshotId, IndexId indexId, org.apache.lucene.index.IndexCommit snapshotIndexCommit, IndexShardSnapshotStatus snapshotStatus, boolean writeShardGens, ActionListener<java.lang.String> listener)Creates a snapshot of the shard based on the index commit point.java.lang.StringstartVerification()Verifies repository on the master node and returns the verification token.ThreadPoolthreadPool()java.lang.StringtoString()voidupdateState(ClusterState state)Update the repository with the incoming cluster state.voidverify(java.lang.String seed, DiscoveryNode localNode)Verifies repository settings on data node.protected voidwriteIndexGen(RepositoryData repositoryData, long expectedGen, boolean writeShardGens, ActionListener<java.lang.Void> listener)Writing a new index generation is a three step process.Methods inherited from class org.elasticsearch.common.component.AbstractLifecycleComponent
addLifecycleListener, close, lifecycleState, removeLifecycleListener, start, stopMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface org.elasticsearch.common.component.LifecycleComponent
addLifecycleListener, lifecycleState, removeLifecycleListener, start, stop
-
Field Details
-
metadata
-
namedXContentRegistry
-
threadPool
-
SNAPSHOT_PREFIX
public static final java.lang.String SNAPSHOT_PREFIX- See Also:
- Constant Field Values
-
SNAPSHOT_CODEC
public static final java.lang.String SNAPSHOT_CODEC- See Also:
- Constant Field Values
-
INDEX_FILE_PREFIX
public static final java.lang.String INDEX_FILE_PREFIX- See Also:
- Constant Field Values
-
INDEX_LATEST_BLOB
public static final java.lang.String INDEX_LATEST_BLOB- See Also:
- Constant Field Values
-
METADATA_PREFIX
public static final java.lang.String METADATA_PREFIX- See Also:
- Constant Field Values
-
METADATA_NAME_FORMAT
public static final java.lang.String METADATA_NAME_FORMAT- See Also:
- Constant Field Values
-
SNAPSHOT_NAME_FORMAT
public static final java.lang.String SNAPSHOT_NAME_FORMAT- See Also:
- Constant Field Values
-
COMPRESS_SETTING
When set to true metadata files are stored in compressed format. This setting doesn’t affect index files that are already compressed by default. Changing the setting does not invalidate existing files since reads do not observe the setting, instead they examine the file to see if it is compressed or not. -
ALLOW_CONCURRENT_MODIFICATION
When set totrue,bestEffortConsistencywill be set totrueand concurrent modifications of the repository contents will not result in the repository being marked as corrupted. Note: This setting is intended as a backwards compatibility solution for 7.x and will go away in 8. -
snapshotFormat
-
-
Constructor Details
-
BlobStoreRepository
protected BlobStoreRepository(RepositoryMetaData metadata, boolean compress, NamedXContentRegistry namedXContentRegistry, ClusterService clusterService)Constructs new BlobStoreRepository- Parameters:
metadata- The metadata for this repository including name and settingsclusterService- ClusterService
-
-
Method Details
-
doStart
protected void doStart()- Specified by:
doStartin classAbstractLifecycleComponent
-
doStop
protected void doStop()- Specified by:
doStopin classAbstractLifecycleComponent
-
doClose
protected void doClose()- Specified by:
doClosein classAbstractLifecycleComponent
-
updateState
Description copied from interface:RepositoryUpdate the repository with the incoming cluster state. This method is invoked fromRepositoriesService.applyClusterState(org.elasticsearch.cluster.ClusterChangedEvent)and thus the same semantics as withClusterStateApplier.applyClusterState(org.elasticsearch.cluster.ClusterChangedEvent)apply for theClusterStatethat is passed here.- Specified by:
updateStatein interfaceRepository- Parameters:
state- new cluster state
-
threadPool
-
getBlobStore
-
blobContainer
maintains single lazy instance ofBlobContainer -
blobStore
Maintains single lazy instance ofBlobStore. Public for testing. -
createBlobStore
Creates new BlobStore to read and write data.- Throws:
java.lang.Exception
-
basePath
Returns base path of the repository -
isCompress
protected final boolean isCompress()Returns true if metadata and snapshot files should be compressed- Returns:
- true if compression is needed
-
chunkSize
Returns data file chunk size.This method should return null if no chunking is needed.
- Returns:
- chunk size
-
getMetadata
Description copied from interface:RepositoryReturns metadata about this repository.- Specified by:
getMetadatain interfaceRepository
-
initializeSnapshot
public void initializeSnapshot(SnapshotId snapshotId, java.util.List<IndexId> indices, MetaData clusterMetaData)Description copied from interface:RepositoryStarts snapshotting process- Specified by:
initializeSnapshotin interfaceRepository- Parameters:
snapshotId- snapshot idindices- list of indices to be snapshottedclusterMetaData- cluster metadata
-
deleteSnapshot
public void deleteSnapshot(SnapshotId snapshotId, long repositoryStateId, boolean writeShardGens, ActionListener<java.lang.Void> listener)Description copied from interface:RepositoryDeletes snapshot- Specified by:
deleteSnapshotin interfaceRepository- Parameters:
snapshotId- snapshot idrepositoryStateId- the unique id identifying the state of the repository when the snapshot deletion beganwriteShardGens- if shard generations should be written to the repositorylistener- completion listener
-
cleanup
public void cleanup(long repositoryStateId, boolean writeShardGens, ActionListener<RepositoryCleanupResult> listener)Runs cleanup actions on the repository. Increments the repository state id by one before executing any modifications on the repository. TODO: Add shard level cleanups- Deleting stale indices
cleanupStaleIndices(java.util.Map<java.lang.String, org.elasticsearch.common.blobstore.BlobContainer>, java.util.Set<java.lang.String>) - Deleting unreferenced root level blobs
cleanupStaleRootFiles(java.util.List<java.lang.String>)
- Parameters:
repositoryStateId- Current repository state idwriteShardGens- If shard generations should be written to the repositorylistener- Listener to complete when done
- Deleting stale indices
-
finalizeSnapshot
public void finalizeSnapshot(SnapshotId snapshotId, ShardGenerations shardGenerations, long startTime, java.lang.String failure, int totalShards, java.util.List<SnapshotShardFailure> shardFailures, long repositoryStateId, boolean includeGlobalState, MetaData clusterMetaData, java.util.Map<java.lang.String,java.lang.Object> userMetadata, boolean writeShardGens, ActionListener<SnapshotInfo> listener)Description copied from interface:RepositoryFinalizes snapshotting processThis method is called on master after all shards are snapshotted.
- Specified by:
finalizeSnapshotin interfaceRepository- Parameters:
snapshotId- snapshot idshardGenerations- updated shard generationsstartTime- start time of the snapshotfailure- global failure reason or nulltotalShards- total number of shardsshardFailures- list of shard failuresrepositoryStateId- the unique id identifying the state of the repository when the snapshot beganincludeGlobalState- include cluster global stateclusterMetaData- cluster metadatauserMetadata- user metadatawriteShardGens- if shard generations should be written to the repositorylistener- listener to be called on completion of the snapshot
-
getSnapshotInfo
Description copied from interface:RepositoryReads snapshot description from repository.- Specified by:
getSnapshotInfoin interfaceRepository- Parameters:
snapshotId- snapshot id- Returns:
- information about snapshot
-
getSnapshotGlobalMetaData
Description copied from interface:RepositoryReturns global metadata associated with the snapshot.- Specified by:
getSnapshotGlobalMetaDatain interfaceRepository- Parameters:
snapshotId- the snapshot id to load the global metadata from- Returns:
- the global metadata about the snapshot
-
getSnapshotIndexMetaData
public IndexMetaData getSnapshotIndexMetaData(SnapshotId snapshotId, IndexId index) throws java.io.IOExceptionDescription copied from interface:RepositoryReturns the index metadata associated with the snapshot.- Specified by:
getSnapshotIndexMetaDatain interfaceRepository- Parameters:
snapshotId- the snapshot id to load the index metadata fromindex- theIndexIdto load the metadata from- Returns:
- the index metadata about the given index for the given snapshot
- Throws:
java.io.IOException
-
getSnapshotThrottleTimeInNanos
public long getSnapshotThrottleTimeInNanos()Description copied from interface:RepositoryReturns snapshot throttle time in nanoseconds- Specified by:
getSnapshotThrottleTimeInNanosin interfaceRepository
-
getRestoreThrottleTimeInNanos
public long getRestoreThrottleTimeInNanos()Description copied from interface:RepositoryReturns restore throttle time in nanoseconds- Specified by:
getRestoreThrottleTimeInNanosin interfaceRepository
-
assertSnapshotOrGenericThread
protected void assertSnapshotOrGenericThread() -
startVerification
public java.lang.String startVerification()Description copied from interface:RepositoryVerifies repository on the master node and returns the verification token.If the verification token is not null, it's passed to all data nodes for verification. If it's null - no additional verification is required
- Specified by:
startVerificationin interfaceRepository- Returns:
- verification token that should be passed to all Index Shard Repositories for additional verification or null
-
endVerification
public void endVerification(java.lang.String seed)Description copied from interface:RepositoryCalled at the end of repository verification process.This method should perform all necessary cleanup of the temporary files created in the repository
- Specified by:
endVerificationin interfaceRepository- Parameters:
seed- verification request generated byRepository.startVerification()command
-
getRepositoryData
Description copied from interface:RepositoryReturns aRepositoryDatato describe the data in the repository, including the snapshots and the indices across all snapshots found in the repository. Throws aRepositoryExceptionif there was an error in reading the data.- Specified by:
getRepositoryDatain interfaceRepository
-
isReadOnly
public boolean isReadOnly()Description copied from interface:RepositoryReturns true if the repository supports only read operations- Specified by:
isReadOnlyin interfaceRepository- Returns:
- true if the repository is read/only
-
writeIndexGen
protected void writeIndexGen(RepositoryData repositoryData, long expectedGen, boolean writeShardGens, ActionListener<java.lang.Void> listener)Writing a new index generation is a three step process. First, theRepositoryMetaDataentry for this repository is set into a pending state by incrementing its pending generationPwhile its safe generationNremains unchanged. Second, the updatedRepositoryDatais written to generationP + 1. Lastly, theRepositoryMetaDataentry for this repository is updated to the new generationP + 1and thus pending and safe generation are set to the same value marking the end of the update of the repository data.- Parameters:
repositoryData- RepositoryData to writeexpectedGen- expected repository generation at the start of the operationwriteShardGens- whether to writeShardGenerationsto the newRepositoryDatabloblistener- completion listener
-
snapshotShard
public void snapshotShard(Store store, MapperService mapperService, SnapshotId snapshotId, IndexId indexId, org.apache.lucene.index.IndexCommit snapshotIndexCommit, IndexShardSnapshotStatus snapshotStatus, boolean writeShardGens, ActionListener<java.lang.String> listener)Description copied from interface:RepositoryCreates a snapshot of the shard based on the index commit point.The index commit point can be obtained by using
Engine.acquireLastIndexCommit(boolean)method. Repository implementations shouldn't release the snapshot index commit point. It is done by the method caller.As snapshot process progresses, implementation of this method should update
IndexShardSnapshotStatusobject and checkIndexShardSnapshotStatus.isAborted()to see if the snapshot process should be aborted.- Specified by:
snapshotShardin interfaceRepository- Parameters:
store- store to be snapshottedmapperService- the shards mapper servicesnapshotId- snapshot idindexId- id for the index being snapshottedsnapshotIndexCommit- commit pointsnapshotStatus- snapshot statuslistener- listener invoked on completion
-
restoreShard
public void restoreShard(Store store, SnapshotId snapshotId, IndexId indexId, ShardId snapshotShardId, RecoveryState recoveryState, ActionListener<java.lang.Void> listener)Description copied from interface:RepositoryRestores snapshot of the shard.The index can be renamed on restore, hence different
shardIdandsnapshotShardIdare supplied.- Specified by:
restoreShardin interfaceRepository- Parameters:
store- the store to restore the index intosnapshotId- snapshot idindexId- id of the index in the repository from which the restore is occurringsnapshotShardId- shard id (in the snapshot)recoveryState- recovery statelistener- listener to invoke once done
-
getShardSnapshotStatus
public IndexShardSnapshotStatus getShardSnapshotStatus(SnapshotId snapshotId, IndexId indexId, ShardId shardId)Description copied from interface:RepositoryRetrieve shard snapshot status for the stored snapshot- Specified by:
getShardSnapshotStatusin interfaceRepository- Parameters:
snapshotId- snapshot idindexId- the snapshotted index id for the shard to get status forshardId- shard id- Returns:
- snapshot status
-
verify
Description copied from interface:RepositoryVerifies repository settings on data node.- Specified by:
verifyin interfaceRepository- Parameters:
seed- value returned byRepository.startVerification()localNode- the local node information, for inclusion in verification errors
-
toString
public java.lang.String toString()- Overrides:
toStringin classjava.lang.Object
-