Suspect this is a general problem related to #83576.

**Build scan:**
https://gradle-enterprise.elastic.co/s/zxsmvjenj7xro/tests/:server:internalClusterTest/org.elasticsearch.action.admin.indices.rollover.RolloverIT/testRollover

**Reproduction line:**
`./gradlew ':server:internalClusterTest' --tests "org.elasticsearch.action.admin.indices.rollover.RolloverIT.testRollover" -Dtests.seed=58E68D6FC10A7415 -Dtests.locale=fr-CA -Dtests.timezone=America/Lower_Princes -Druntime.java=17`

**Applicable branches:**
master

**Reproduces locally?:**
Didn't try

**Failure history:**
https://gradle-enterprise.elastic.co/scans/tests?tests.container=org.elasticsearch.action.admin.indices.rollover.RolloverIT&tests.test=testRollover

**Failure excerpt:**
```
com.carrotsearch.randomizedtesting.UncaughtExceptionError: Captured an uncaught exception in thread: Thread[id=1168, name=elasticsearch[node_t0][scheduler][T#1], state=RUNNABLE, group=TGRP-RolloverIT]

  at __randomizedtesting.SeedInfo.seed([58E68D6FC10A7415:D3FB80172FA618EA]:0)

  Caused by: org.elasticsearch.common.util.concurrent.EsRejectedExecutionException: rejected execution of detected failure of {node_t1}{EahwztF4RJCdtcO0EytfvQ}{LuW7WWgCS4eGeQA7k6TZpw}{127.0.0.1}{127.0.0.1:33989}{cdfhilrstw} on EsThreadPoolExecutor[name = node_t0/cluster_coordination, org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor@4939db0f[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 140]] (shutdown)

    at __randomizedtesting.SeedInfo.seed([58E68D6FC10A7415]:0)
    at org.elasticsearch.common.util.concurrent.EsRejectedExecutionHandler.newRejectedException(EsRejectedExecutionHandler.java:36)
    at org.elasticsearch.common.util.concurrent.EsAbortPolicy.rejectedExecution(EsAbortPolicy.java:34)
    at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:833)
    at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1365)
    at org.elasticsearch.common.util.concurrent.EsThreadPoolExecutor.execute(EsThreadPoolExecutor.java:66)
    at org.elasticsearch.cluster.coordination.FollowersChecker$FollowerChecker.failNode(FollowersChecker.java:361)
    at org.elasticsearch.cluster.coordination.FollowersChecker$FollowerChecker$1.handleException(FollowersChecker.java:354)
    at org.elasticsearch.transport.TransportService.sendRequest(TransportService.java:665)
    at org.elasticsearch.cluster.coordination.FollowersChecker$FollowerChecker.handleWakeUp(FollowersChecker.java:301)
    at org.elasticsearch.cluster.coordination.FollowersChecker$FollowerChecker$3.run(FollowersChecker.java:387)
    at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingRunnable.run(ThreadContext.java:717)
    at org.elasticsearch.threadpool.ThreadPool$1.run(ThreadPool.java:423)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
    at java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
    at java.lang.Thread.run(Thread.java:833)

```
server/src/main/java/org/elasticsearch/cluster/coordination/FollowersChecker.java
if (exp instanceof ReceiveTimeoutTransportException) {
                            timeoutCountSinceLastSuccess++;
                        } else {
                            failureCountSinceLastSuccess++;
                        }
                        final String reason;
                        if (exp instanceof ConnectTransportException || exp.getCause() instanceof ConnectTransportException) {
                            logger.debug(() -> new ParameterizedMessage("{} disconnected", FollowerChecker.this), exp);
                            reason = "disconnected";
                        } else if (exp.getCause() instanceof NodeHealthCheckFailureException) {
                            logger.debug(() -> new ParameterizedMessage("{} health check failed", FollowerChecker.this), exp);
                            reason = "health check failed";
                        } else if (failureCountSinceLastSuccess + timeoutCountSinceLastSuccess >= followerCheckRetryCount) {
                            logger.debug(() -> new ParameterizedMessage("{} failed too many times", FollowerChecker.this), exp);
                            reason = "followers check retry count exceeded [timeouts="
                                + timeoutCountSinceLastSuccess
                                + ", failures="
                                + failureCountSinceLastSuccess
                                + "]";
                        } else {
                            logger.debug(() -> new ParameterizedMessage("{} failed, retrying", FollowerChecker.this), exp);
                            scheduleNextWakeUp();
                            return;
                        }
                        failNode(reason);
                    }
                }
            );
        }
        void failNode(String reason) {