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/Coordinator.java
final ClusterState stateForJoinValidation;
        synchronized (mutex) {
            
            final ClusterState lastAcceptedState = coordinationState.get().getLastAcceptedState();
            assert lastAcceptedState.nodes().getLocalNode() != null;
            if (mode != Mode.LEADER || lastAcceptedState.term() != getCurrentTerm()) {
                stateForJoinValidation = null;
            } else {
                stateForJoinValidation = lastAcceptedState;
            }
        }
        final ListenableActionFuture<Empty> validateStateListener = new ListenableActionFuture<>();
        if (stateForJoinValidation != null && stateForJoinValidation.nodes().isLocalNodeElectedMaster()) {
            onJoinValidators.forEach(a -> a.accept(joinRequest.getSourceNode(), stateForJoinValidation));
            if (stateForJoinValidation.getBlocks().hasGlobalBlock(STATE_NOT_RECOVERED_BLOCK) == false) {
                
                
                NodeJoinExecutor.ensureVersionBarrier(
                    joinRequest.getSourceNode().getVersion(),
                    stateForJoinValidation.getNodes().getMinNodeVersion()
                );
            }
            sendJoinValidate(joinRequest.getSourceNode(), validateStateListener);
        } else {
            sendJoinPing(joinRequest.getSourceNode(), TransportRequestOptions.Type.STATE, validateStateListener);
        }
        sendJoinPing(joinRequest.getSourceNode(), TransportRequestOptions.Type.PING, new ActionListener<>() {
            @Override
            public void onResponse(Empty empty) {