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/nodes/TransportNodesAction.java
protected void onItemFailure(DiscoveryNode discoveryNode, Exception e) {
                logger.debug(() -> format("failed to execute [%s] on node [%s]", actionName, discoveryNode), e);
                synchronized (exceptions) {
                    exceptions.add(new FailedNodeException(discoveryNode.getId(), "Failed node [" + discoveryNode.getId() + "]", e));
                }
            }
            @Override
            protected CheckedConsumer<ActionListener<NodesResponse>, Exception> onCompletion() {
                
                return l -> newResponseAsync(task, request, responses, exceptions, l);
            }
            @Override
            public String toString() {
                return actionName;
            }
        }.run(
            task,
            Iterators.forArray(request.concreteNodes()),
            new ThreadedActionListener<>(finalExecutor, listener.delegateFailureAndWrap((l, c) -> c.accept(l)))
        );
    }
    private Writeable.Reader<NodeResponse> nodeResponseReader(DiscoveryNode discoveryNode) {
        
        return in -> TransportNodesAction.this.newNodeResponse(in, discoveryNode);
    }
    /**
     * Create a new {@link NodesResponse} (multi-node response).
     *
     * @param request The associated request.
     * @param responses All successful node-level responses.