Class 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 through RecoveriesCollection.
  • Constructor Details

    • RecoveryTarget

      public RecoveryTarget(IndexShard indexShard, DiscoveryNode sourceNode, SnapshotFilesProvider snapshotFilesProvider, @Nullable Releasable snapshotFileDownloadsPermit, PeerRecoveryTargetService.RecoveryListener listener)
      Creates a new recovery target object that represents a recovery to the provided shard.
      indexShard - local shard where we want to recover to
      sourceNode - source node of the recovery where we recover from
      snapshotFileDownloadsPermit - a permit that allows to download files from a snapshot, limiting the concurrent snapshot file downloads per node preventing the exhaustion of repository resources.
      listener - called when recovery is completed/failed
  • Method Details

    • 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.
      a copy of this recovery target
    • markRequestReceivedAndCreateListener

      @Nullable public ActionListener<Void> markRequestReceivedAndCreateListener(long requestSeqNo, ActionListener<Void> listener)
    • recoveryId

      public long recoveryId()
    • shardId

      public ShardId shardId()
    • indexShard

      public IndexShard indexShard()
    • sourceNode

      public DiscoveryNode sourceNode()
    • state

      public RecoveryState state()
    • cancellableThreads

      public CancellableThreads cancellableThreads()
    • hasPermitToDownloadSnapshotFiles

      public boolean hasPermitToDownloadSnapshotFiles()
    • 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
    • disableRecoveryMonitor

      public Releasable disableRecoveryMonitor()
      Set flag to signal to RecoveriesCollection.RecoveryMonitor that it must not cancel this recovery temporarily. This is used by the recovery clean files step to avoid recovery failure in case a long running condition was added to the shard via IndexShard.addCleanFilesDependency().
      releasable that once closed will re-enable liveness checks by the recovery monitor
    • store

      public Store store()
    • cancel

      public void cancel(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 call AbstractRefCounted.decRef()

      if cancellableThreads() was used, the threads will be interrupted.

    • fail

      public void fail(RecoveryFailedException e, boolean sendShardFailure)
      fail the recovery and call listener
      e - exception that encapsulating the failure
      sendShardFailure - 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
    • closeInternal

      protected void closeInternal()
      Specified by:
      closeInternal in class AbstractRefCounted
    • toString

      public String toString()
      toString in class Object
    • prepareForTranslogOperations

      public void prepareForTranslogOperations(int totalTranslogOps, ActionListener<Void> listener)
      Implementation of RecoveryTargetHandler
      Specified by:
      prepareForTranslogOperations in interface RecoveryTargetHandler
      totalTranslogOps - total translog operations expected to be sent
    • finalizeRecovery

      public void finalizeRecovery(long globalCheckpoint, long trimAboveSeqNo, ActionListener<Void> listener)
      Description copied from interface: RecoveryTargetHandler
      The finalize request refreshes the engine now that new segments are available, enables garbage collection of tombstone files, updates the global checkpoint.
      Specified by:
      finalizeRecovery in interface RecoveryTargetHandler
      globalCheckpoint - the global checkpoint on the recovery source
      trimAboveSeqNo - The recovery target should erase its existing translog above this sequence number from the previous primary terms.
      listener - the listener which will be notified when this method is completed
    • handoffPrimaryContext

      public void handoffPrimaryContext(ReplicationTracker.PrimaryContext primaryContext, ActionListener<Void> listener)
      Description copied from interface: RecoveryTargetHandler
      Handoff the primary context between the relocation source and the relocation target.
      Specified by:
      handoffPrimaryContext in interface RecoveryTargetHandler
      primaryContext - the primary context from the relocation source
      listener - the listener which will be notified when this method is completed
    • indexTranslogOperations

      public void indexTranslogOperations(List<Translog.Operation> operations, int totalTranslogOps, long maxSeenAutoIdTimestampOnPrimary, long maxSeqNoOfDeletesOrUpdatesOnPrimary, RetentionLeases retentionLeases, long mappingVersionOnPrimary, ActionListener<Long> listener)
      Description copied from interface: RecoveryTargetHandler
      Index a set of translog operations on the target
      Specified by:
      indexTranslogOperations in interface RecoveryTargetHandler
      operations - operations to index
      totalTranslogOps - current number of total operations expected to be indexed
      maxSeenAutoIdTimestampOnPrimary - the maximum auto_id_timestamp of all append-only requests processed by the primary shard
      maxSeqNoOfDeletesOrUpdatesOnPrimary - the max seq_no of update operations (index operations overwrite Lucene) or delete ops on the primary shard when capturing these operations. This value is at least as high as the max_seq_no_of_updates on the primary was when any of these ops were processed on it.
      retentionLeases - the retention leases on the primary
      mappingVersionOnPrimary - the mapping version which is at least as up to date as the mapping version that the primary used to index translog operations in this request. If the mapping version on the replica is not older this version, we should not retry on MapperException; otherwise we should wait for a new mapping then retry.
      listener - a listener which will be notified with the local checkpoint on the target after these operations are successfully indexed on the target.
    • receiveFileInfo

      public void receiveFileInfo(List<String> phase1FileNames, List<Long> phase1FileSizes, List<String> phase1ExistingFileNames, List<Long> phase1ExistingFileSizes, int totalTranslogOps, ActionListener<Void> listener)
      Description copied from interface: RecoveryTargetHandler
      Notifies the target of the files it is going to receive
      Specified by:
      receiveFileInfo in interface RecoveryTargetHandler
    • cleanFiles

      public void cleanFiles(int totalTranslogOps, long globalCheckpoint, Store.MetadataSnapshot sourceMetadata, ActionListener<Void> listener)
      Description copied from interface: RecoveryTargetHandler
      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 store
      Specified by:
      cleanFiles in interface RecoveryTargetHandler
      totalTranslogOps - an update number of translog operations that will be replayed later on
      globalCheckpoint - the global checkpoint on the primary
      sourceMetadata - meta data of the source store
    • writeFileChunk

      public void writeFileChunk(StoreFileMetadata fileMetadata, long position, ReleasableBytesReference content, boolean lastChunk, int totalTranslogOps, ActionListener<Void> listener)
      Description copied from interface: RecoveryTargetHandler
      writes a partial file chunk to the target store
      Specified by:
      writeFileChunk in interface RecoveryTargetHandler
    • restoreFileFromSnapshot

      public void restoreFileFromSnapshot(String repository, IndexId indexId, BlobStoreIndexShardSnapshot.FileInfo fileInfo, ActionListener<Void> listener)
      Description copied from interface: RecoveryTargetHandler
      Restores a snapshot file in the target store
      Specified by:
      restoreFileFromSnapshot in interface RecoveryTargetHandler
      repository - the repository to fetch the snapshot file
      indexId - the repository index id that identifies the shard index
      fileInfo - the actual snapshot file to download
    • getTempNameForFile

      public String getTempNameForFile(String origFile)
      Get a temporary name for the provided file name.