Similarly to https://github.com/elastic/elasticsearch/pull/97873 but for request handlers: let's stop passing around strings and looking these things up by name on each request when we could just pass around the `Executor` itself.
server/src/main/java/org/elasticsearch/action/support/master/TransportMasterNodeAction.java
currentStateVersion,
                    clusterService.getClusterApplierService(),
                    TimeValue.timeValueMillis(remainingTimeoutMS),
                    logger,
                    threadPool.getThreadContext()
                );
            }
            observer.waitForNextChange(new ClusterStateObserver.Listener() {
                @Override
                public void onNewClusterState(ClusterState state) {
                    logger.trace("retrying with cluster state version [{}]", state.version());
                    doStart(state);
                }
                @Override
                public void onClusterServiceClose() {
                    listener.onFailure(new NodeClosedException(clusterService.localNode()));
                }
                @Override
                public void onTimeout(TimeValue timeout) {
                    logger.debug(() -> format("timed out while retrying [%s] after failure (timeout [%s])", actionName, timeout), failure);
                    listener.onFailure(new MasterNotDiscoveredException(failure));
                }
            }, clusterState -> isTaskCancelled() || statePredicate.test(clusterState));
        }
        private boolean isTaskCancelled() {
            return task instanceof CancellableTask && ((CancellableTask) task).isCancelled();
        }
    }
}