@Override
    public void awaitCompletion(Duration timeout) {
        List<String> respondents;
        try {
            log.log(Level.FINE, () -> "Synchronizing on barrier " + barrierPath);
            respondents = awaitInternal(timeout);
            log.log(Level.FINE, () -> "Done synchronizing on barrier " + barrierPath);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        if (respondents.size() < barrierMemberCount()) {
            throw new CompletionTimeoutException("Timed out waiting for config servers to complete operation " +
                                                 "(waited for barrier " + barrierPath + ")." +
                                                 "Got response from " + respondents + ", but need response from " +
                                                 "at least " + barrierMemberCount() + " server(s). " +
                                                 "Timeout passed as argument was " + timeout.toMillis() + " ms");
        }
    }
Implementation of a Barrier that handles the case where more than number of members can call synchronize.
Will wait for some time for all servers to do the operation, but will accept the majority of servers to have
done the operation if it takes longer than a specified amount of time.

@author Vegard Havdal
@author Ulf Lilleengen
zkfacade/src/main/java/com/yahoo/vespa/curator/CuratorCompletionWaiter.java