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
}
        final var deterministicTaskQueue = new DeterministicTaskQueue();
        final var clusterState = ClusterState.builder(ClusterName.DEFAULT).putCustom("test", new BadCustom()).build();
        final var joiningNode = DiscoveryNodeUtils.create("joining");
        final var joiningNodeTransport = new MockTransport();
        final var joiningNodeTransportService = joiningNodeTransport.createTransportService(
            Settings.EMPTY,
            deterministicTaskQueue.getThreadPool(),
            TransportService.NOOP_TRANSPORT_INTERCEPTOR,
            x -> joiningNode,
            null,
            Collections.emptySet()
        );
        new JoinValidationService(Settings.EMPTY, joiningNodeTransportService, () -> clusterState, List.of()); 
        joiningNodeTransportService.start();
        joiningNodeTransportService.acceptIncomingRequests();
        final var masterNode = DiscoveryNodeUtils.create("node0");
        final var masterTransport = new MockTransport() {
            @Override
            protected void onSendRequest(long requestId, String action, TransportRequest request, DiscoveryNode node) {
                assertSame(node, joiningNode);
                assertEquals(JoinValidationService.JOIN_VALIDATE_ACTION_NAME, action);
                final var listener = new ActionListener<TransportResponse>() {
                    @Override
                    public void onResponse(TransportResponse transportResponse) {
                        fail("should not succeed");
                    }
                    @Override
                    public void onFailure(Exception e) {
                        handleError(requestId, new RemoteTransportException(node.getName(), node.getAddress(), action, e));