https://github.com/elastic/elasticsearch/pull/97304 removes several places that might do an expensive rebuild of the cluster state via `getStateForMasterService`. There's one other call we should be able to remove, in `JoinValidationService`, but it's a little tricky since we rely on seeing the last-accepted state for the cluster UUID validation, and it's not obviously ok to expose the last-accepted state without the no-master block.

This is a fairly minor issue because we do not do this join validation during elections, only if we're the elected master, and in that case `getStateForMasterService` is cheap. But that's not guaranteed, and we should strengthen this to avoid the that expensive step whenever possible.
server/src/main/java/org/elasticsearch/cluster/coordination/JoinValidationService.java
new ValidateJoinRequest(clusterStateSupplier.get()),
                REQUEST_OPTIONS,
                new ActionListenerResponseHandler<>(listener.delegateResponse((l, e) -> {
                    logger.warn(() -> "failed to validate incoming join request from node [" + discoveryNode + "]", e);
                    listener.onFailure(
                        new IllegalStateException(
                            String.format(
                                Locale.ROOT,
                                "failure when sending a join validation request from [%s] to [%s]",
                                transportService.getLocalNode().descriptionWithoutAttributes(),
                                discoveryNode.descriptionWithoutAttributes()
                            ),
                            e
                        )
                    );
                }), i -> TransportResponse.Empty.INSTANCE, ThreadPool.Names.CLUSTER_COORDINATION)
            );
        }
    }
    public void stop() {
        executeRefs.decRef();
    }
    boolean isIdle() {
        
        return queue.isEmpty() && queueSize.get() == 0 && statesByVersion.isEmpty();
    }
    private void execute(AbstractRunnable task) {
        assert task == cacheClearer || executeRefs.hasReferences();
        queue.add(task);
        if (queueSize.getAndIncrement() == 0) {