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/RecoveryTarget.java
public long recoveryId() {
        return recoveryId;
    }
    public ShardId shardId() {
        return shardId;
    }
    public IndexShard indexShard() {
        ensureRefCount();
        return indexShard;
    }
    public DiscoveryNode sourceNode() {
        return this.sourceNode;
    }
    public RecoveryState state() {
        return indexShard.recoveryState();
    }
    public CancellableThreads cancellableThreads() {
        return cancellableThreads;
    }
    public boolean hasPermitToDownloadSnapshotFiles() {
        return snapshotFileDownloadsPermit != null;
    }
    
    public long lastAccessTime() {
        if (recoveryMonitorEnabled) {
            return lastAccessTime;
        }
        return System.nanoTime();
    }