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
private final DiscoveryNode discoveryNode;
        JoinValidation(DiscoveryNode discoveryNode, ActionListener<TransportResponse.Empty> listener) {
            super(listener);
            this.discoveryNode = discoveryNode;
        }
        @Override
        protected void doRun() throws Exception {
            assert discoveryNode.getVersion().onOrAfter(Version.V_8_3_0) : discoveryNode.getVersion();
            
            
            Transport.Connection connection;
            try {
                connection = transportService.getConnection(discoveryNode);
            } catch (NodeNotConnectedException e) {
                listener.onFailure(e);
                return;
            }
            var version = connection.getTransportVersion();
            var cachedBytes = statesByVersion.get(version);
            var bytes = Objects.requireNonNullElseGet(cachedBytes, () -> serializeClusterState(discoveryNode, version));
            assert bytes.hasReferences() : "already closed";
            bytes.incRef();
            transportService.sendRequest(
                connection,
                JOIN_VALIDATE_ACTION_NAME,
                new BytesTransportRequest(bytes, version),
                REQUEST_OPTIONS,