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/test/java/org/elasticsearch/cluster/coordination/JoinValidationServiceTests.java
@Override
                        public DiscoveryNode getNode() {
                            return node;
                        }
                        @Override
                        public TransportVersion getTransportVersion() {
                            return TransportVersion.current();
                        }
                        @Override
                        public void sendRequest(long requestId, String action, TransportRequest request, TransportRequestOptions options)
                            throws TransportException {
                            final var executor = threadPool.executor(
                                randomFrom(ThreadPool.Names.SAME, ThreadPool.Names.GENERIC, ThreadPool.Names.CLUSTER_COORDINATION)
                            );
                            executor.execute(new AbstractRunnable() {
                                @Override
                                public void onFailure(Exception e) {
                                    assert false : e;
                                }
                                @Override
                                public void onRejection(Exception e) {
                                    handleError(requestId, new TransportException(e));
                                }
                                @Override
                                public void doRun() {
                                    handleResponse(requestId, switch (action) {
                                        case JoinValidationService.JOIN_VALIDATE_ACTION_NAME -> TransportResponse.Empty.INSTANCE;
                                        case TransportService.HANDSHAKE_ACTION_NAME -> new TransportService.HandshakeResponse(
                                            Version.CURRENT,
                                            Build.current().hash(),