The `recoverLocallyUpToGlobalCheckpoint` step of peer recovery may take an extended period of time, but today we do not disable the recovery monitor during this step so if it takes more than 30 minutes (by default) then the recovery will time out, fail, and retry repeatedly. We should disable the recovery monitor during this step.
server/src/main/java/org/elasticsearch/indices/recovery/RecoveriesCollection.java
*/
public class RecoveriesCollection {
    
    private final ConcurrentMap<Long, RecoveryTarget> onGoingRecoveries = ConcurrentCollections.newConcurrentMap();
    private final Logger logger;
    private final ThreadPool threadPool;
    public RecoveriesCollection(Logger logger, ThreadPool threadPool) {
        this.logger = logger;
        this.threadPool = threadPool;
    }
    /**
     * Starts are new recovery for the given shard, source node and state
     *
     * @return the id of the new recovery.
     */
    public long startRecovery(
        IndexShard indexShard,
        DiscoveryNode sourceNode,
        SnapshotFilesProvider snapshotFilesProvider,
        PeerRecoveryTargetService.RecoveryListener listener,
        TimeValue activityTimeout,
        @Nullable Releasable snapshotFileDownloadsPermit
    ) {
        RecoveryTarget recoveryTarget = new RecoveryTarget(
            indexShard,
            sourceNode,
            snapshotFilesProvider,
            snapshotFileDownloadsPermit,
            listener
        );