Package io.fathom.auto.zookeeper

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

package io.fathom.auto.zookeeper;

import io.fathom.auto.JsonCodec;
import io.fathom.auto.cluster.Cluster;
import io.fathom.auto.config.ConfigPath;
import io.fathom.auto.config.MachineInfo;
import io.fathom.auto.zookeeper.model.ClusterState;
import io.fathom.auto.zookeeper.model.ZookeeperClusterRegistration;

import java.io.IOException;
import java.net.InetAddress;
import java.util.Map;
import java.util.concurrent.locks.Lock;

import com.google.common.net.InetAddresses;

public class ZookeeperCluster extends Cluster<ZookeeperClusterRegistration> {

    public ZookeeperCluster(ConfigPath base, Lock lock) {
        super(base, lock);
    }

    public void writeClusterState(ClusterState state) throws IOException {
        ConfigPath node = getStatePath();

        String json = JsonCodec.gson.toJson(state);
        node.write(json);
    }

    public ClusterState readClusterState() throws IOException {
        String json = getStatePath().read();
        if (json == null) {
            return null;
        }
        return JsonCodec.gson.fromJson(json, ClusterState.class);
    }

    public ClusterSnapshot getSnapshot() throws IOException {
        ClusterState state = readClusterState();

        Map<Integer, ZookeeperClusterRegistration> servers = getServers();

        return new ClusterSnapshot(state, servers);
    }

    private ConfigPath getStatePath() {
        return base.child("state");
    }

    @Override
    protected ZookeeperClusterRegistration deserialize(String json) {
        return JsonCodec.gson.fromJson(json, ZookeeperClusterRegistration.class);
    }

    @Override
    protected String getSignature(ZookeeperClusterRegistration server) {
        return server.signature;
    }

    @Override
    protected ZookeeperClusterRegistration buildRegistration(int myid) {
        InetAddress ip = MachineInfo.INSTANCE.getIp();

        ZookeeperClusterRegistration registration = new ZookeeperClusterRegistration();
        registration.ip = InetAddresses.toAddrString(ip);
        registration.serverId = myid;

        // We start up as an observer, and then we try to upgrade to participant
        registration.type = ZookeeperClusterRegistration.OBSERVER;
        registration.signature = getSignature();

        return registration;
    }

}
TOP

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

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.