public boolean isReplicaCaughtUp(ReplicaKey replicaKey, long currentTimeMs) {
        // In summary, let's consider a replica caughed up for add voter, if they
        // have fetched within the last hour
        long anHourInMs = TimeUnit.HOURS.toMillis(1);
        return Optional.ofNullable(observerStates.get(replicaKey))
            .map(state ->
                state.lastCaughtUpTimestamp > 0 &&
                state.lastFetchTimestamp > 0 &&
                state.lastFetchTimestamp > currentTimeMs - anHourInMs
            )
            .orElse(false);
    }
Reset the checkQuorumTimer if we've received fetch/fetchSnapshot request from the majority of the voter

@param replicaKey the replica key of the voter
@param currentTimeMs the current timestamp in millisecond
raft/src/main/java/org/apache/kafka/raft/LeaderState.java