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/PeerRecoveryTargetService.java
localNode,
            metadataSnapshot,
            recoveryTarget.state().getPrimary(),
            recoveryTarget.recoveryId(),
            startingSeqNo,
            recoveryTarget.hasPermitToDownloadSnapshotFiles()
        );
        return request;
    }
    private static void logListingLocalFilesWarning(Logger logger, long startingSeqNo, IOException e) {
        logger.warn(
            () -> format(
                "error while listing local files, resetting the starting sequence number from %s "
                    + "to unassigned and recovering as if there are none",
                startingSeqNo
            ),
            e
        );
    }
    private static void logGlobalCheckpointWarning(Logger logger, long startingSeqNo, Exception e) {
        logger.warn(
            () -> format(
                "error while reading global checkpoint from translog, "
                    + "resetting the starting sequence number from %s to unassigned and recovering as if there are none",
                startingSeqNo
            ),
            e
        );
    }
    public interface RecoveryListener {