Example usage for org.apache.zookeeper.server.quorum QuorumPeerConfig getMaxSessionTimeout

List of usage examples for org.apache.zookeeper.server.quorum QuorumPeerConfig getMaxSessionTimeout

Introduction

In this page you can find the example usage for org.apache.zookeeper.server.quorum QuorumPeerConfig getMaxSessionTimeout.

Prototype

public int getMaxSessionTimeout() 

Source Link

Usage

From source file:beans.SystemStartable.java

License:Apache License

@Override
public void onStart() throws Throwable {
    // Initialize ZooKeeper.
    Properties properties = new Properties();
    InputStream propertiesStream = getClass().getClassLoader().getResourceAsStream("zoo.cfg");
    properties.load(propertiesStream);//from  w  w  w.j a v  a2s  .c om

    QuorumPeerConfig quorumConfig = new QuorumPeerConfig();
    quorumConfig.parseProperties(properties);

    zkServer = new ZooKeeperServer();
    zkServer.setTickTime(quorumConfig.getTickTime());
    zkServer.setMinSessionTimeout(quorumConfig.getMinSessionTimeout());
    zkServer.setMaxSessionTimeout(quorumConfig.getMaxSessionTimeout());

    zkDirectory = Files.createTempDirectory("zookeeper").toFile();
    LOG.info("Using ZooKeeper directory: " + zkDirectory);
    FileTxnSnapLog txnLog = new FileTxnSnapLog(zkDirectory, zkDirectory);
    zkServer.setTxnLogFactory(txnLog);

    cnxnFactory = ServerCnxnFactory.createFactory();
    cnxnFactory.configure(quorumConfig.getClientPortAddress(), quorumConfig.getMaxClientCnxns());
    cnxnFactory.startup(zkServer);
}

From source file:com.chiralBehaviors.autoconfigure.ZookeeperLauncher.java

License:Open Source License

/**
 * Copied from QuorumPeerMain//from  w w  w. j  ava 2s.c o m
 */
protected void runFromConfig(QuorumPeerConfig config) throws IOException {
    LOG.info("Starting quorum peer");
    ServerCnxnFactory cnxnFactory = ServerCnxnFactory.createFactory();
    cnxnFactory.configure(config.getClientPortAddress(), config.getMaxClientCnxns());

    quorumPeer = new QuorumPeer();
    quorumPeer.setClientPortAddress(config.getClientPortAddress());
    quorumPeer
            .setTxnFactory(new FileTxnSnapLog(new File(config.getDataLogDir()), new File(config.getDataDir())));
    quorumPeer.setQuorumPeers(config.getServers());
    quorumPeer.setElectionType(config.getElectionAlg());
    quorumPeer.setMyid(config.getServerId());
    quorumPeer.setTickTime(config.getTickTime());
    quorumPeer.setMinSessionTimeout(config.getMinSessionTimeout());
    quorumPeer.setMaxSessionTimeout(config.getMaxSessionTimeout());
    quorumPeer.setInitLimit(config.getInitLimit());
    quorumPeer.setSyncLimit(config.getSyncLimit());
    quorumPeer.setQuorumVerifier(config.getQuorumVerifier());
    quorumPeer.setCnxnFactory(cnxnFactory);
    quorumPeer.setZKDatabase(new ZKDatabase(quorumPeer.getTxnFactory()));
    quorumPeer.setLearnerType(config.getPeerType());

    quorumPeer.start();
}

From source file:com.glaf.cluster.catalina.session.QuorumPeerMain.java

License:Apache License

public void runFromConfig(QuorumPeerConfig config) throws IOException {
    try {/*w  w  w  .j  a  va 2  s  .c  o  m*/
        ManagedUtil.registerLog4jMBeans();
    } catch (JMException e) {
        LOG.warn("Unable to register log4j JMX control", e);
    }

    LOG.info("Starting quorum peer");
    try {
        ServerCnxnFactory cnxnFactory = ServerCnxnFactory.createFactory();
        cnxnFactory.configure(config.getClientPortAddress(), config.getMaxClientCnxns());

        quorumPeer = new QuorumPeer();
        quorumPeer.setClientPortAddress(config.getClientPortAddress());
        quorumPeer.setTxnFactory(
                new FileTxnSnapLog(new File(config.getDataLogDir()), new File(config.getDataDir())));
        quorumPeer.setQuorumPeers(config.getServers());
        quorumPeer.setElectionType(config.getElectionAlg());
        quorumPeer.setMyid(config.getServerId());
        quorumPeer.setTickTime(config.getTickTime());
        quorumPeer.setMinSessionTimeout(config.getMinSessionTimeout());
        quorumPeer.setMaxSessionTimeout(config.getMaxSessionTimeout());
        quorumPeer.setInitLimit(config.getInitLimit());
        quorumPeer.setSyncLimit(config.getSyncLimit());
        quorumPeer.setQuorumVerifier(config.getQuorumVerifier());
        quorumPeer.setCnxnFactory(cnxnFactory);
        quorumPeer.setZKDatabase(new ZKDatabase(quorumPeer.getTxnFactory()));
        quorumPeer.setLearnerType(config.getPeerType());

        quorumPeer.start();
        quorumPeer.join();
    } catch (InterruptedException e) {
        // warn, but generally this is ok
        LOG.warn("Quorum Peer interrupted", e);
    }
}

From source file:com.nesscomputing.service.discovery.server.zookeeper.ManagedQuorumPeer.java

License:Apache License

@Inject
ManagedQuorumPeer(final QuorumPeerConfig quorumPeerConfig, final NIOServerCnxn.Factory cnxnFactory,
        final FileTxnSnapLog fileTxnSnapLog) {
    quorumPeer = new QuorumPeer();
    quorumPeer.setClientPortAddress(quorumPeerConfig.getClientPortAddress());
    quorumPeer.setTxnFactory(fileTxnSnapLog);
    quorumPeer.setQuorumPeers(quorumPeerConfig.getServers());
    quorumPeer.setElectionType(quorumPeerConfig.getElectionAlg());
    quorumPeer.setMyid(quorumPeerConfig.getServerId());
    quorumPeer.setTickTime(quorumPeerConfig.getTickTime());
    quorumPeer.setMinSessionTimeout(quorumPeerConfig.getMinSessionTimeout());
    quorumPeer.setMaxSessionTimeout(quorumPeerConfig.getMaxSessionTimeout());
    quorumPeer.setInitLimit(quorumPeerConfig.getInitLimit());
    quorumPeer.setSyncLimit(quorumPeerConfig.getSyncLimit());
    quorumPeer.setQuorumVerifier(quorumPeerConfig.getQuorumVerifier());
    quorumPeer.setCnxnFactory(cnxnFactory);
    quorumPeer.setZKDatabase(new ZKDatabase(quorumPeer.getTxnFactory()));
    quorumPeer.setLearnerType(quorumPeerConfig.getPeerType());
}

From source file:com.nesscomputing.service.discovery.server.zookeeper.ManagedStandaloneZookeeper.java

License:Apache License

@Inject
ManagedStandaloneZookeeper(final QuorumPeerConfig quorumPeerConfig, final NIOServerCnxn.Factory cnxnFactory,
        final FileTxnSnapLog fileTxnSnapLog) {
    zookeeperServer = new ZooKeeperServer();
    this.cnxnFactory = cnxnFactory;

    zookeeperServer.setTxnLogFactory(fileTxnSnapLog);
    zookeeperServer.setTickTime(quorumPeerConfig.getTickTime());
    zookeeperServer.setMinSessionTimeout(quorumPeerConfig.getMinSessionTimeout());
    zookeeperServer.setMaxSessionTimeout(quorumPeerConfig.getMaxSessionTimeout());
}

From source file:com.splicemachine.test.SpliceZoo.java

License:Apache License

public SpliceZoo(QuorumPeerConfig config, int number) throws IOException {
    this.config = config;
    this.peer = new QuorumPeer();
    ServerCnxnFactory cnxnFactory = ServerCnxnFactory.createFactory();
    cnxnFactory.configure(config.getClientPortAddress(), config.getMaxClientCnxns());
    peer.setClientPortAddress(config.getClientPortAddress());
    peer.setTxnFactory(new FileTxnSnapLog(new File(config.getDataLogDir()), new File(config.getDataDir())));
    peer.setQuorumPeers(config.getServers());
    peer.setElectionType(config.getElectionAlg());
    peer.setMyid(config.getServerId());//  w w  w .  ja  v a 2 s .  c  o m
    peer.setTickTime(config.getTickTime());
    peer.setMinSessionTimeout(config.getMinSessionTimeout());
    peer.setMaxSessionTimeout(config.getMaxSessionTimeout());
    peer.setInitLimit(config.getInitLimit());
    peer.setSyncLimit(config.getSyncLimit());
    peer.setQuorumVerifier(config.getQuorumVerifier());
    peer.setCnxnFactory(cnxnFactory);
    peer.setZKDatabase(new ZKDatabase(peer.getTxnFactory()));
    peer.setLearnerType(config.getPeerType());
    peer.setMyid(number);
}

From source file:io.fabric8.core.zookeeper.FabricZooKeeperServer.java

License:Apache License

private Destroyable activateInternal(Map<String, ?> configuration) throws Exception {
    LOGGER.info("Creating zookeeper server with: {}", configuration);

    Properties props = new Properties();
    for (Map.Entry<String, ?> entry : configuration.entrySet()) {
        props.put(entry.getKey(), entry.getValue());
    }/*w  w  w .ja  v  a2 s . co m*/

    //Check required directories exist or create them.
    if (!dataDir.exists() && !dataDir.mkdirs()) {
        throw new IOException("Failed to create ZooKeeper dataDir at: " + dataDir.getAbsolutePath());
    }

    if (!dataLogDir.exists() && !dataLogDir.mkdirs()) {
        throw new IOException("Failed to create ZooKeeper dataLogDir at: " + dataLogDir.getAbsolutePath());
    }

    // Create myid file
    String serverId = (String) props.get(SERVER_ID);
    if (serverId != null) {
        props.remove(SERVER_ID);
        File myId = new File(dataDir, MY_ID);
        if (myId.exists() && !myId.delete()) {
            throw new IOException("Failed to delete " + myId);
        }
        if (myId.getParentFile() == null
                || (!myId.getParentFile().exists() && !myId.getParentFile().mkdirs())) {
            throw new IOException("Failed to create " + myId.getParent());
        }
        FileOutputStream fos = new FileOutputStream(myId);
        try {
            fos.write((serverId + "\n").getBytes());
        } finally {
            fos.close();
        }
    }

    QuorumPeerConfig peerConfig = getPeerConfig(props);

    if (!peerConfig.getServers().isEmpty()) {
        NIOServerCnxnFactory cnxnFactory = new NIOServerCnxnFactory();
        cnxnFactory.configure(peerConfig.getClientPortAddress(), peerConfig.getMaxClientCnxns());

        QuorumPeer quorumPeer = new QuorumPeer();
        quorumPeer.setClientPortAddress(peerConfig.getClientPortAddress());
        quorumPeer.setTxnFactory(
                new FileTxnSnapLog(new File(peerConfig.getDataLogDir()), new File(peerConfig.getDataDir())));
        quorumPeer.setQuorumPeers(peerConfig.getServers());
        quorumPeer.setElectionType(peerConfig.getElectionAlg());
        quorumPeer.setMyid(peerConfig.getServerId());
        quorumPeer.setTickTime(peerConfig.getTickTime());
        quorumPeer.setMinSessionTimeout(peerConfig.getMinSessionTimeout());
        quorumPeer.setMaxSessionTimeout(peerConfig.getMaxSessionTimeout());
        quorumPeer.setInitLimit(peerConfig.getInitLimit());
        quorumPeer.setSyncLimit(peerConfig.getSyncLimit());
        quorumPeer.setQuorumVerifier(peerConfig.getQuorumVerifier());
        quorumPeer.setCnxnFactory(cnxnFactory);
        quorumPeer.setZKDatabase(new ZKDatabase(quorumPeer.getTxnFactory()));
        quorumPeer.setLearnerType(peerConfig.getPeerType());

        try {
            LOGGER.debug("Starting quorum peer \"%s\" on address %s", quorumPeer.getMyid(),
                    peerConfig.getClientPortAddress());
            quorumPeer.start();
            LOGGER.debug("Started quorum peer \"%s\"", quorumPeer.getMyid());
        } catch (Exception e) {
            LOGGER.warn(String.format("Failed to start quorum peer \"%s\", reason : %s ", quorumPeer.getMyid(),
                    e.getMessage()));
            quorumPeer.shutdown();
            throw e;
        }

        // Register stats provider
        ClusteredServer server = new ClusteredServer(quorumPeer);
        return server;
    } else {
        ServerConfig serverConfig = getServerConfig(peerConfig);

        ZooKeeperServer zkServer = new ZooKeeperServer();
        FileTxnSnapLog ftxn = new FileTxnSnapLog(new File(serverConfig.getDataLogDir()),
                new File(serverConfig.getDataDir()));
        zkServer.setTxnLogFactory(ftxn);
        zkServer.setTickTime(serverConfig.getTickTime());
        zkServer.setMinSessionTimeout(serverConfig.getMinSessionTimeout());
        zkServer.setMaxSessionTimeout(serverConfig.getMaxSessionTimeout());
        NIOServerCnxnFactory cnxnFactory = new NIOServerCnxnFactory() {
            protected void configureSaslLogin() throws IOException {
            }
        };
        cnxnFactory.configure(serverConfig.getClientPortAddress(), serverConfig.getMaxClientCnxns());

        try {
            LOGGER.debug("Starting ZooKeeper server on address %s", peerConfig.getClientPortAddress());
            cnxnFactory.startup(zkServer);
            LOGGER.debug("Started ZooKeeper server");
        } catch (Exception e) {
            LOGGER.warn(String.format("Failed to start ZooKeeper server, reason : %s", e));
            cnxnFactory.shutdown();
            throw e;
        }

        // Register stats provider
        SimpleServer server = new SimpleServer(zkServer, cnxnFactory);

        return server;
    }
}

From source file:io.fabric8.zookeeper.bootstrap.ZooKeeperServerFactory.java

License:Apache License

public ZooKeeperServerFactory(QuorumPeerConfig peerConfig, String serverId)
        throws IOException, InterruptedException {
    this.peerConfig = peerConfig;
    this.serverId = serverId;

    LOGGER.info("Creating zookeeper server with: {}", peerConfig);

    if (!peerConfig.getServers().isEmpty()) {
        NIOServerCnxnFactory cnxnFactory = new NIOServerCnxnFactory();
        cnxnFactory.configure(peerConfig.getClientPortAddress(), peerConfig.getMaxClientCnxns());

        QuorumPeer quorumPeer = new QuorumPeer();
        quorumPeer.setClientPortAddress(peerConfig.getClientPortAddress());
        quorumPeer.setTxnFactory(//from   w w w  .ja  v  a  2 s .  co  m
                new FileTxnSnapLog(new File(peerConfig.getDataLogDir()), new File(peerConfig.getDataDir())));
        quorumPeer.setQuorumPeers(peerConfig.getServers());
        quorumPeer.setElectionType(peerConfig.getElectionAlg());
        quorumPeer.setMyid(peerConfig.getServerId());
        quorumPeer.setTickTime(peerConfig.getTickTime());
        quorumPeer.setMinSessionTimeout(peerConfig.getMinSessionTimeout());
        quorumPeer.setMaxSessionTimeout(peerConfig.getMaxSessionTimeout());
        quorumPeer.setInitLimit(peerConfig.getInitLimit());
        quorumPeer.setSyncLimit(peerConfig.getSyncLimit());
        quorumPeer.setQuorumVerifier(peerConfig.getQuorumVerifier());
        quorumPeer.setCnxnFactory(cnxnFactory);
        quorumPeer.setZKDatabase(new ZKDatabase(quorumPeer.getTxnFactory()));
        quorumPeer.setLearnerType(peerConfig.getPeerType());

        try {
            LOGGER.debug("Starting quorum peer \"%s\" on address %s", quorumPeer.getMyid(),
                    peerConfig.getClientPortAddress());
            quorumPeer.start();
            LOGGER.debug("Started quorum peer \"%s\"", quorumPeer.getMyid());
        } catch (Exception e) {
            LOGGER.warn(String.format("Failed to start quorum peer \"%s\", reason : %s ", quorumPeer.getMyid(),
                    e.getMessage()));
            quorumPeer.shutdown();
            throw e;
        }

        updateZooKeeperURL(cnxnFactory.getLocalAddress(), cnxnFactory.getLocalPort());

        // Register stats provider
        this.clusteredServer = new ClusteredServer(quorumPeer);
        /*
                    registration = context.registerService(QuorumStats.Provider.class, server, null);
                
        */
    } else {
        ServerConfig serverConfig = getServerConfig(peerConfig);

        ZooKeeperServer zkServer = new ZooKeeperServer();
        FileTxnSnapLog ftxn = new FileTxnSnapLog(new File(serverConfig.getDataLogDir()),
                new File(serverConfig.getDataDir()));
        zkServer.setTxnLogFactory(ftxn);
        zkServer.setTickTime(serverConfig.getTickTime());
        zkServer.setMinSessionTimeout(serverConfig.getMinSessionTimeout());
        zkServer.setMaxSessionTimeout(serverConfig.getMaxSessionTimeout());
        NIOServerCnxnFactory cnxnFactory = new NIOServerCnxnFactory() {
            protected void configureSaslLogin() throws IOException {
            }
        };
        InetSocketAddress clientPortAddress = serverConfig.getClientPortAddress();
        cnxnFactory.configure(clientPortAddress, serverConfig.getMaxClientCnxns());
        updateZooKeeperURL(cnxnFactory.getLocalAddress(), cnxnFactory.getLocalPort());

        try {
            LOGGER.debug("Starting ZooKeeper server on address %s", peerConfig.getClientPortAddress());
            cnxnFactory.startup(zkServer);
            LOGGER.debug("Started ZooKeeper server");
        } catch (Exception e) {
            LOGGER.warn(String.format("Failed to start ZooKeeper server, reason : %s", e));
            cnxnFactory.shutdown();
            throw e;
        }

        // Register stats provider
        this.simplerServer = new SimpleServer(zkServer, cnxnFactory);
        /*
                    registration = context.registerService(ServerStats.Provider.class, server, null);
        */
    }
}

From source file:org.fusesource.fabric.zookeeper.bootstrap.ZooKeeperServerFactory.java

License:Apache License

private Destroyable activateInternal(BundleContext context, Map<String, ?> configuration) throws Exception {
    LOGGER.info("Creating zookeeper server with: {}", configuration);

    Properties props = new Properties();
    for (Entry<String, ?> entry : configuration.entrySet()) {
        props.put(entry.getKey(), entry.getValue());
    }//  w  w w  . j a va  2 s.  c o  m

    // Remove the dependency on the current dir from dataDir
    String dataDir = props.getProperty("dataDir");
    if (dataDir != null && dataDir.startsWith(CreateEnsembleOptions.DEFAULT_DATA_DIR)) {
        RuntimeProperties sysprops = runtimeProperties.get();
        dataDir = dataDir.substring(dataDir.indexOf('/'));
        dataDir = sysprops.getProperty(SystemProperties.KARAF_DATA) + dataDir;
        props.setProperty("dataDir", dataDir);
    }

    // Create myid file
    String serverId = (String) props.get("server.id");
    if (serverId != null) {
        props.remove("server.id");
        File myId = new File(dataDir, "myid");
        if (myId.exists() && !myId.delete()) {
            throw new IOException("Failed to delete " + myId);
        }
        if (myId.getParentFile() == null
                || (!myId.getParentFile().exists() && !myId.getParentFile().mkdirs())) {
            throw new IOException("Failed to create " + myId.getParent());
        }
        FileOutputStream fos = new FileOutputStream(myId);
        try {
            fos.write((serverId + "\n").getBytes());
        } finally {
            fos.close();
        }
    }

    QuorumPeerConfig peerConfig = getPeerConfig(props);

    if (!peerConfig.getServers().isEmpty()) {
        NIOServerCnxnFactory cnxnFactory = new NIOServerCnxnFactory();
        cnxnFactory.configure(peerConfig.getClientPortAddress(), peerConfig.getMaxClientCnxns());

        QuorumPeer quorumPeer = new QuorumPeer();
        quorumPeer.setClientPortAddress(peerConfig.getClientPortAddress());
        quorumPeer.setTxnFactory(
                new FileTxnSnapLog(new File(peerConfig.getDataLogDir()), new File(peerConfig.getDataDir())));
        quorumPeer.setQuorumPeers(peerConfig.getServers());
        quorumPeer.setElectionType(peerConfig.getElectionAlg());
        quorumPeer.setMyid(peerConfig.getServerId());
        quorumPeer.setTickTime(peerConfig.getTickTime());
        quorumPeer.setMinSessionTimeout(peerConfig.getMinSessionTimeout());
        quorumPeer.setMaxSessionTimeout(peerConfig.getMaxSessionTimeout());
        quorumPeer.setInitLimit(peerConfig.getInitLimit());
        quorumPeer.setSyncLimit(peerConfig.getSyncLimit());
        quorumPeer.setQuorumVerifier(peerConfig.getQuorumVerifier());
        quorumPeer.setCnxnFactory(cnxnFactory);
        quorumPeer.setZKDatabase(new ZKDatabase(quorumPeer.getTxnFactory()));
        quorumPeer.setLearnerType(peerConfig.getPeerType());

        try {
            LOGGER.debug("Starting quorum peer \"%s\" on address %s", quorumPeer.getMyid(),
                    peerConfig.getClientPortAddress());
            quorumPeer.start();
            LOGGER.debug("Started quorum peer \"%s\"", quorumPeer.getMyid());
        } catch (Exception e) {
            LOGGER.warn(String.format("Failed to start quorum peer \"%s\", reason : %s ", quorumPeer.getMyid(),
                    e.getMessage()));
            quorumPeer.shutdown();
            throw e;
        }

        // Register stats provider
        ClusteredServer server = new ClusteredServer(quorumPeer);
        registration = context.registerService(QuorumStats.Provider.class, server, null);

        return server;
    } else {
        ServerConfig serverConfig = getServerConfig(peerConfig);

        ZooKeeperServer zkServer = new ZooKeeperServer();
        FileTxnSnapLog ftxn = new FileTxnSnapLog(new File(serverConfig.getDataLogDir()),
                new File(serverConfig.getDataDir()));
        zkServer.setTxnLogFactory(ftxn);
        zkServer.setTickTime(serverConfig.getTickTime());
        zkServer.setMinSessionTimeout(serverConfig.getMinSessionTimeout());
        zkServer.setMaxSessionTimeout(serverConfig.getMaxSessionTimeout());
        NIOServerCnxnFactory cnxnFactory = new NIOServerCnxnFactory() {
            protected void configureSaslLogin() throws IOException {
            }
        };
        cnxnFactory.configure(serverConfig.getClientPortAddress(), serverConfig.getMaxClientCnxns());

        try {
            LOGGER.debug("Starting ZooKeeper server on address %s", peerConfig.getClientPortAddress());
            cnxnFactory.startup(zkServer);
            LOGGER.debug("Started ZooKeeper server");
        } catch (Exception e) {
            LOGGER.warn(String.format("Failed to start ZooKeeper server, reason : %s", e));
            cnxnFactory.shutdown();
            throw e;
        }

        // Register stats provider
        SimpleServer server = new SimpleServer(zkServer, cnxnFactory);
        registration = context.registerService(ServerStats.Provider.class, server, null);

        return server;
    }
}

From source file:org.fusesource.fabric.zookeeper.internal.ZKServerFactoryBean.java

License:Apache License

@Override
protected Object doCreate(Dictionary properties) throws Exception {
    LOGGER.info("Creating zookeeper server with properties: {}", properties);
    Properties props = new Properties();
    for (Enumeration ek = properties.keys(); ek.hasMoreElements();) {
        Object key = ek.nextElement();
        Object val = properties.get(key);
        props.put(key.toString(), val != null ? val.toString() : "");
    }/*from  ww w.j  av  a 2  s .  c o m*/

    // Create myid file
    String serverId = props.getProperty("server.id");
    if (serverId != null) {
        props.remove("server.id");
        File myId = new File(props.getProperty("dataDir"), "myid");
        if (myId.exists() && !myId.delete()) {
            throw new IOException("Failed to delete " + myId);
        }
        if (myId.getParentFile() == null
                || (!myId.getParentFile().exists() && !myId.getParentFile().mkdirs())) {
            throw new IOException("Failed to create " + myId.getParent());
        }
        FileOutputStream fos = new FileOutputStream(myId);
        try {
            fos.write((serverId + "\n").getBytes());
        } finally {
            fos.close();
        }
    }

    // Load properties
    QuorumPeerConfig config = new QuorumPeerConfig();
    config.parseProperties(props);
    if (!config.getServers().isEmpty()) {
        NIOServerCnxnFactory cnxnFactory = new NIOServerCnxnFactory();
        cnxnFactory.configure(config.getClientPortAddress(), config.getMaxClientCnxns());

        QuorumPeer quorumPeer = new QuorumPeer();
        quorumPeer.setClientPortAddress(config.getClientPortAddress());
        quorumPeer.setTxnFactory(
                new FileTxnSnapLog(new File(config.getDataLogDir()), new File(config.getDataDir())));
        quorumPeer.setQuorumPeers(config.getServers());
        quorumPeer.setElectionType(config.getElectionAlg());
        quorumPeer.setMyid(config.getServerId());
        quorumPeer.setTickTime(config.getTickTime());
        quorumPeer.setMinSessionTimeout(config.getMinSessionTimeout());
        quorumPeer.setMaxSessionTimeout(config.getMaxSessionTimeout());
        quorumPeer.setInitLimit(config.getInitLimit());
        quorumPeer.setSyncLimit(config.getSyncLimit());
        quorumPeer.setQuorumVerifier(config.getQuorumVerifier());
        quorumPeer.setCnxnFactory(cnxnFactory);
        quorumPeer.setZKDatabase(new ZKDatabase(quorumPeer.getTxnFactory()));
        quorumPeer.setLearnerType(config.getPeerType());

        try {
            LOGGER.debug("Starting quorum peer \"%s\" on address %s", quorumPeer.getMyid(),
                    config.getClientPortAddress());
            quorumPeer.start();
            LOGGER.debug("Started quorum peer \"%s\"", quorumPeer.getMyid());
        } catch (Exception e) {
            LOGGER.warn(String.format("Failed to start quorum peer \"%s\", reason : %s ", quorumPeer.getMyid(),
                    e.getMessage()));
            quorumPeer.shutdown();
            throw e;
        }
        return new ClusteredServer(quorumPeer);
    } else {
        ServerConfig cfg = new ServerConfig();
        cfg.readFrom(config);

        ZooKeeperServer zkServer = new ZooKeeperServer();
        FileTxnSnapLog ftxn = new FileTxnSnapLog(new File(cfg.getDataLogDir()), new File(cfg.getDataDir()));
        zkServer.setTxnLogFactory(ftxn);
        zkServer.setTickTime(cfg.getTickTime());
        zkServer.setMinSessionTimeout(cfg.getMinSessionTimeout());
        zkServer.setMaxSessionTimeout(cfg.getMaxSessionTimeout());
        NIOServerCnxnFactory cnxnFactory = new NIOServerCnxnFactory();
        cnxnFactory.configure(cfg.getClientPortAddress(), cfg.getMaxClientCnxns());

        try {
            LOGGER.debug("Starting ZooKeeper server on address %s", config.getClientPortAddress());
            cnxnFactory.startup(zkServer);
            LOGGER.debug("Started ZooKeeper server");
        } catch (Exception e) {
            LOGGER.warn(String.format("Failed to start ZooKeeper server, reason : %s", e));
            cnxnFactory.shutdown();
            throw e;
        }
        return new SimpleServer(zkServer, cnxnFactory);
    }
}