Three interrelated issues here:

- [ ] `TransportBroadcastByNodeAction` derivatives are typically executed via `NodeClient` which bypasses the `TransportService` and therefore does not respect (or even know about) the `executor` parameter which would fork. This means that the coordination work, including grouping all the shards by node, happens on the calling thread. When executed from the REST layer, that's a transport worker. This is #97916, but until that's fixed we need a workaround.

- [ ] The node-level responses are deserialised and processed on the receiving transport worker too.

- [ ] Several of these actions use `SAME` for their executor, bypassing the forking that _does_ exist today.

Relates #77466 
server/src/main/java/org/elasticsearch/action/support/broadcast/node/TransportBroadcastByNodeAction.java
final var shards = entry.getValue();
                logger.debug(() -> format("failed to execute [%s] on node [%s]", actionName, node), e);
                final var failedNodeException = new FailedNodeException(node.getId(), "Failed node [" + node.getId() + "]", e);
                synchronized (this) {
                    for (ShardRouting shard : shards) {
                        exceptions.add(new DefaultShardOperationFailedException(shard.getIndexName(), shard.getId(), failedNodeException));
                    }
                }
                totalShards.addAndGet(shards.size());
            }
            @Override
            protected Response onCompletion() {
                
                return responseFactory.newResponse(
                    totalShards.get(),
                    successfulShards.get(),
                    exceptions.size(),
                    shardResponses,
                    exceptions
                );
            }
            @Override
            public String toString() {
                return actionName;
            }
        }.run(task, shardsByNodeId.entrySet().iterator(), listener);
    }
    
    private final Writeable.Reader<NodeResponse> nodeResponseReader = NodeResponse::new;
    class BroadcastByNodeTransportRequestHandler implements TransportRequestHandler<NodeRequest> {