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
public void onResponse(Long newTerm) {
                    assert newTerm != null && newTerm > leaderTerm : newTerm + " vs " + leaderTerm;
                    updateMaxTermSeen(newTerm);
                }
                @Override
                public void onFailure(Exception e) {
                    
                    logger.warn(() -> Strings.format("failed to write heartbeat for term [%s]", leaderTerm), e);
                    synchronized (mutex) {
                        if (getCurrentTerm() == leaderTerm) {
                            becomeCandidate("leaderHeartbeatService");
                        }
                    }
                }
                @Override
                public String toString() {
                    return "term change heartbeat listener";
                }
            })
        );
        assert leaderChecker.leader() == null : leaderChecker.leader();
        followersChecker.updateFastResponseState(leaderTerm, mode);
        updateSingleNodeClusterChecker();
    }
    void becomeFollower(String method, DiscoveryNode leaderNode) {
        assert Thread.holdsLock(mutex) : "Coordinator mutex not held";
        assert leaderNode.isMasterNode() : leaderNode + " became a leader but is not master-eligible";
        assert mode != Mode.LEADER : "do not switch to follower from leader (should be candidate first)";
        if (mode == Mode.FOLLOWER && Optional.of(leaderNode).equals(lastKnownLeader)) {
            logger.trace("{}: coordinator remaining FOLLOWER of [{}] in term {}", method, leaderNode, getCurrentTerm());