Class RecoveryTarget

    • 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 to
        sourceNode - source node of the recovery where we recover from
        listener - called when recovery is completed/failed
        ensureClusterStateVersionCallback - 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 (see RecoverySourceHandler)
    • 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()
      • 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()
      • renameAllTempFiles

        public void renameAllTempFiles()
                                throws java.io.IOException
        renames 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 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
        Parameters:
        e - exception that encapsulating the failure
        sendShardFailure - indicates whether to notify the master of the shard failure
      • 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 and IndexOutput for 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.IOException
        Creates an IndexOutput for 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
      • toString

        public java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • prepareForTranslogOperations

        public void prepareForTranslogOperations​(boolean fileBasedRecovery,
                                                 int totalTranslogOps)
                                          throws java.io.IOException
        Implementation of RecoveryTargetHandler
        Specified by:
        prepareForTranslogOperations in interface RecoveryTargetHandler
        Parameters:
        fileBasedRecovery - whether or not this call is part of an file based recovery
        totalTranslogOps - total translog operations expected to be sent
        Throws:
        java.io.IOException
      • finalizeRecovery

        public void finalizeRecovery​(long globalCheckpoint)
                              throws java.io.IOException
        Description copied from interface: RecoveryTargetHandler
        The finalize request refreshes the engine now that new segments are available, enables garbage collection of tombstone files, and updates the global checkpoint.
        Specified by:
        finalizeRecovery in interface RecoveryTargetHandler
        Parameters:
        globalCheckpoint - the global checkpoint on the recovery source
        Throws:
        java.io.IOException
      • indexTranslogOperations

        public long indexTranslogOperations​(java.util.List<Translog.Operation> operations,
                                            int totalTranslogOps,
                                            long maxSeenAutoIdTimestampOnPrimary,
                                            long maxSeqNoOfDeletesOrUpdatesOnPrimary)
                                     throws java.io.IOException
        Description copied from interface: RecoveryTargetHandler
        Index a set of translog operations on the target
        Specified by:
        indexTranslogOperations in interface RecoveryTargetHandler
        Parameters:
        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.
        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: RecoveryTargetHandler
        Notifies the target of the files it is going to receive
        Specified by:
        receiveFileInfo in interface RecoveryTargetHandler
      • cleanFiles

        public void cleanFiles​(int totalTranslogOps,
                               Store.MetadataSnapshot sourceMetaData)
                        throws java.io.IOException
        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
        Parameters:
        totalTranslogOps - an update number of translog operations that will be replayed later on
        sourceMetaData - meta data of the source store
        Throws:
        java.io.IOException