Class RecoveryTarget
- java.lang.Object
-
- org.elasticsearch.common.util.concurrent.AbstractRefCounted
-
- org.elasticsearch.indices.recovery.RecoveryTarget
-
- All Implemented Interfaces:
RefCounted,RecoveryTargetHandler
public class RecoveryTarget extends AbstractRefCounted implements RecoveryTargetHandler
Represents a recovery where the current node is the target node of the recovery. To track recoveries in a central place, instances of this class are created throughRecoveriesCollection.
-
-
Constructor Summary
Constructors Constructor Description RecoveryTarget(IndexShard indexShard, DiscoveryNode sourceNode, PeerRecoveryTargetService.RecoveryListener listener, java.util.function.LongConsumer ensureClusterStateVersionCallback)Creates a new recovery target object that represents a recovery to the provided shard.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidcancel(java.lang.String reason)cancel the recovery.CancellableThreadscancellableThreads()voidcleanFiles(int totalTranslogOps, Store.MetadataSnapshot sourceMetaData)After all source files has been sent over, this command is sent to the target so it can clean any local files that are not part of the source storeprotected voidcloseInternal()voidensureClusterStateVersion(long clusterStateVersion)Blockingly waits for cluster state with at least clusterStateVersion to be availablevoidfail(RecoveryFailedException e, boolean sendShardFailure)fail the recovery and call listenervoidfinalizeRecovery(long globalCheckpoint)The finalize request refreshes the engine now that new segments are available, enables garbage collection of tombstone files, and updates the global checkpoint.org.apache.lucene.store.IndexOutputgetOpenIndexOutput(java.lang.String key)java.lang.StringgetTempNameForFile(java.lang.String origFile)Get a temporary name for the provided file name.voidhandoffPrimaryContext(ReplicationTracker.PrimaryContext primaryContext)Handoff the primary context between the relocation source and the relocation target.IndexShardindexShard()longindexTranslogOperations(java.util.List<Translog.Operation> operations, int totalTranslogOps)Index a set of translog operations on the targetlonglastAccessTime()return the last time this RecoveryStatus was used (based on System.nanoTime()voidmarkAsDone()mark the current recovery as donevoidnotifyListener(RecoveryFailedException e, boolean sendShardFailure)org.apache.lucene.store.IndexOutputopenAndPutIndexOutput(java.lang.String fileName, StoreFileMetaData metaData, Store store)Creates anIndexOutputfor the given file name.voidprepareForTranslogOperations(boolean fileBasedRecovery, int totalTranslogOps)Implementation ofRecoveryTargetHandlervoidreceiveFileInfo(java.util.List<java.lang.String> phase1FileNames, java.util.List<java.lang.Long> phase1FileSizes, java.util.List<java.lang.String> phase1ExistingFileNames, java.util.List<java.lang.Long> phase1ExistingFileSizes, int totalTranslogOps)Notifies the target of the files it is going to receivelongrecoveryId()org.apache.lucene.store.IndexOutputremoveOpenIndexOutputs(java.lang.String name)remove andIndexOutputfor a given file.voidrenameAllTempFiles()renames all temporary files to their true name, potentially overriding existing filesRecoveryTargetretryCopy()Returns a fresh recovery target to retry recovery from the same source node onto the same shard and using the same listener.voidsetLastAccessTime()sets the lasAccessTime flag to nowShardIdshardId()DiscoveryNodesourceNode()RecoveryState.Stagestage()RecoveryStatestate()Storestore()java.lang.StringtoString()voidwriteFileChunk(StoreFileMetaData fileMetaData, long position, BytesReference content, boolean lastChunk, int totalTranslogOps)writes a partial file chunk to the target store-
Methods inherited from class org.elasticsearch.common.util.concurrent.AbstractRefCounted
alreadyClosed, decRef, getName, incRef, refCount, tryIncRef
-
-
-
-
Constructor Detail
-
RecoveryTarget
public RecoveryTarget(IndexShard indexShard, DiscoveryNode sourceNode, PeerRecoveryTargetService.RecoveryListener listener, java.util.function.LongConsumer ensureClusterStateVersionCallback)
Creates a new recovery target object that represents a recovery to the provided shard.- Parameters:
indexShard- local shard where we want to recover tosourceNode- source node of the recovery where we recover fromlistener- called when recovery is completed/failedensureClusterStateVersionCallback- callback to ensure that the current node is at least on a cluster state with the provided version; necessary for primary relocation so that new primary knows about all other ongoing replica recoveries when replicating documents (seeRecoverySourceHandler)
-
-
Method Detail
-
retryCopy
public RecoveryTarget retryCopy()
Returns a fresh recovery target to retry recovery from the same source node onto the same shard and using the same listener.- Returns:
- a copy of this recovery target
-
recoveryId
public long recoveryId()
-
shardId
public ShardId shardId()
-
indexShard
public IndexShard indexShard()
-
sourceNode
public DiscoveryNode sourceNode()
-
state
public RecoveryState state()
-
cancellableThreads
public CancellableThreads cancellableThreads()
-
lastAccessTime
public long lastAccessTime()
return the last time this RecoveryStatus was used (based on System.nanoTime()
-
setLastAccessTime
public void setLastAccessTime()
sets the lasAccessTime flag to now
-
store
public Store store()
-
stage
public RecoveryState.Stage stage()
-
renameAllTempFiles
public void renameAllTempFiles() throws java.io.IOExceptionrenames all temporary files to their true name, potentially overriding existing files- Throws:
java.io.IOException
-
cancel
public void cancel(java.lang.String reason)
cancel the recovery. calling this method will clean temporary files and release the store unless this object is in use (in which case it will be cleaned once all ongoing users callAbstractRefCounted.decRef()if
cancellableThreads()was used, the threads will be interrupted.
-
fail
public void fail(RecoveryFailedException e, boolean sendShardFailure)
fail the recovery and call listener- Parameters:
e- exception that encapsulating the failuresendShardFailure- indicates whether to notify the master of the shard failure
-
notifyListener
public void notifyListener(RecoveryFailedException e, boolean sendShardFailure)
-
markAsDone
public void markAsDone()
mark the current recovery as done
-
getTempNameForFile
public java.lang.String getTempNameForFile(java.lang.String origFile)
Get a temporary name for the provided file name.
-
getOpenIndexOutput
public org.apache.lucene.store.IndexOutput getOpenIndexOutput(java.lang.String key)
-
removeOpenIndexOutputs
public org.apache.lucene.store.IndexOutput removeOpenIndexOutputs(java.lang.String name)
remove andIndexOutputfor a given file. It is the caller's responsibility to close it
-
openAndPutIndexOutput
public org.apache.lucene.store.IndexOutput openAndPutIndexOutput(java.lang.String fileName, StoreFileMetaData metaData, Store store) throws java.io.IOExceptionCreates anIndexOutputfor the given file name. Note that the IndexOutput actually point at a temporary file.Note: You can use
getOpenIndexOutput(String)with the same filename to retrieve the same IndexOutput at a later stage- Throws:
java.io.IOException
-
closeInternal
protected void closeInternal()
- Specified by:
closeInternalin classAbstractRefCounted
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
prepareForTranslogOperations
public void prepareForTranslogOperations(boolean fileBasedRecovery, int totalTranslogOps) throws java.io.IOExceptionImplementation ofRecoveryTargetHandler- Specified by:
prepareForTranslogOperationsin interfaceRecoveryTargetHandler- Parameters:
fileBasedRecovery- whether or not this call is part of an file based recoverytotalTranslogOps- total translog operations expected to be sent- Throws:
java.io.IOException
-
finalizeRecovery
public void finalizeRecovery(long globalCheckpoint) throws java.io.IOExceptionDescription copied from interface:RecoveryTargetHandlerThe finalize request refreshes the engine now that new segments are available, enables garbage collection of tombstone files, and updates the global checkpoint.- Specified by:
finalizeRecoveryin interfaceRecoveryTargetHandler- Parameters:
globalCheckpoint- the global checkpoint on the recovery source- Throws:
java.io.IOException
-
ensureClusterStateVersion
public void ensureClusterStateVersion(long clusterStateVersion)
Description copied from interface:RecoveryTargetHandlerBlockingly waits for cluster state with at least clusterStateVersion to be available- Specified by:
ensureClusterStateVersionin interfaceRecoveryTargetHandler
-
handoffPrimaryContext
public void handoffPrimaryContext(ReplicationTracker.PrimaryContext primaryContext)
Description copied from interface:RecoveryTargetHandlerHandoff the primary context between the relocation source and the relocation target.- Specified by:
handoffPrimaryContextin interfaceRecoveryTargetHandler- Parameters:
primaryContext- the primary context from the relocation source
-
indexTranslogOperations
public long indexTranslogOperations(java.util.List<Translog.Operation> operations, int totalTranslogOps) throws java.io.IOException
Description copied from interface:RecoveryTargetHandlerIndex a set of translog operations on the target- Specified by:
indexTranslogOperationsin interfaceRecoveryTargetHandler- Parameters:
operations- operations to indextotalTranslogOps- current number of total operations expected to be indexed- Returns:
- the local checkpoint on the target shard
- Throws:
java.io.IOException
-
receiveFileInfo
public void receiveFileInfo(java.util.List<java.lang.String> phase1FileNames, java.util.List<java.lang.Long> phase1FileSizes, java.util.List<java.lang.String> phase1ExistingFileNames, java.util.List<java.lang.Long> phase1ExistingFileSizes, int totalTranslogOps)Description copied from interface:RecoveryTargetHandlerNotifies the target of the files it is going to receive- Specified by:
receiveFileInfoin interfaceRecoveryTargetHandler
-
cleanFiles
public void cleanFiles(int totalTranslogOps, Store.MetadataSnapshot sourceMetaData) throws java.io.IOExceptionDescription copied from interface:RecoveryTargetHandlerAfter all source files has been sent over, this command is sent to the target so it can clean any local files that are not part of the source store- Specified by:
cleanFilesin interfaceRecoveryTargetHandler- Parameters:
totalTranslogOps- an update number of translog operations that will be replayed later onsourceMetaData- meta data of the source store- Throws:
java.io.IOException
-
writeFileChunk
public void writeFileChunk(StoreFileMetaData fileMetaData, long position, BytesReference content, boolean lastChunk, int totalTranslogOps) throws java.io.IOException
Description copied from interface:RecoveryTargetHandlerwrites a partial file chunk to the target store- Specified by:
writeFileChunkin interfaceRecoveryTargetHandler- Throws:
java.io.IOException
-
-