Package io.fathom.auto.zookeeper

Source Code of io.fathom.auto.zookeeper.SupervisedZookeeper

package io.fathom.auto.zookeeper;

import io.fathom.auto.TimeSpan;

import java.io.IOException;

import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.ZooKeeper.States;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SupervisedZookeeper {
    private static final Logger log = LoggerFactory.getLogger(SupervisedZookeeper.class);

    private ZookeeperProcess process;

    private ZookeeperClient client;

    private final ZookeeperConfig config;

    private SupervisedZookeeper(ZookeeperConfig config, ZookeeperProcess process) {
        this.config = config;
        this.process = process;
    }

    public synchronized void start() throws IOException {
        if (this.process == null) {
            this.process = ZookeeperProcess.start(config);
        }

        this.client = waitForZkAlive();
    }

    public void monitor() {
        monitorCluster(getClient());
    }

    private ZookeeperClient getClient() {
        if (this.client == null) {
            this.client = waitForZkAlive();
        }
        return this.client;
    }

    private static ZookeeperClient waitForZkAlive() {
        ZookeeperClient client = new ZookeeperClient("127.0.0.1:2181");

        while (true) {
            try {
                log.info("Waiting for zookeeper server to start");

                States state = client.getState();
                log.info("Zookeeper state: {}", state);
                if (state.isConnected()) {
                    // String config = client.getConfig();
                    // log.info("Zookeeper config: {}", config);

                    return client;
                }
            } catch (IOException e) {
                log.error("Error connecting to ZK", e);
            } catch (KeeperException e) {
                log.error("Error from ZK", e);
            }

            TimeSpan.seconds(1).sleep();
        }
    }

    private static void monitorCluster(ZookeeperClient zk) {
        while (true) {
            try {
                log.info("Checking zookeeper status");

                States state = zk.getState();
                if (state.isConnected()) {
                    log.info("Connection status: {}", state);
                    // String config = zk.getConfig();
                    // log.info("Cluster state: {}", config);
                } else {
                    log.error("Not connected to ZK: {}", state);
                }
            } catch (IOException e) {
                log.error("Error connecting to ZK", e);
            } catch (KeeperException e) {
                log.error("Error from ZK", e);
            }

            // We're local; we can poll quickly...
            TimeSpan.seconds(10).sleep();
        }

    }

    public static SupervisedZookeeper build(ZookeeperConfig config) throws IOException {
        ZookeeperProcess process = ZookeeperProcess.find(config);
        return new SupervisedZookeeper(config, process);
    }

    public synchronized boolean isRunning() {
        return process != null;
    }
}
TOP

Related Classes of io.fathom.auto.zookeeper.SupervisedZookeeper

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.