class ZooKeeperClient {

    void setupZooKeeper() {
        int retries = 5;
        try {
            while (retries > 0) {
                try {
                    createZooKeeperNodes();
                    break;
                } catch (RuntimeException e) {
                    logger.log(Level.FINE, "ZK init failed, retrying: " + e);
                    retries--;
                    if (retries == 0) {
                        throw e;
                    }
                    Thread.sleep(100);
                    // Not reconnecting, ZK is supposed to handle that automatically
                    // as long as the session doesn't expire. We'll see.
                }
            }
        } catch (Exception e) {
            throw new IllegalStateException("Unable to initialize vespa model writing to config server(s) " +
                                            System.getProperty("configsources") + "\n" +
                                            "Please ensure that cloudconfig_server is started on the config server node(s), " +
                                            "and check the vespa log for configserver errors. ", e);
        }
    }

    public  ZooKeeperClient(ConfigCurator configCurator, DeployLogger logger, Path rootPath);

}