package com.techq.available; import java.io.IOException; import java.net.InetSocketAddress; import java.util.HashMap; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.techq.available.quorum.LeaderElection; import com.techq.available.quorum.ProposalVote; import com.techq.available.quorum.QuorumPeer; import com.techq.available.quorum.ServerState; /** * * @author CHQ * 2012-2-3 */ public class App { //static Logger LOG = Logger.getLogger(App.class); private static final Logger LOG = LoggerFactory.getLogger(App.class); static long myId = -1; static long numPeer = 3; static InetSocketAddress currentServerAddress = new InetSocketAddress(8888); static Map<Long, InetSocketAddress[]> servers = new HashMap<Long, InetSocketAddress[]>(); static { // server id:1, 2, 3 // for (long i = 0; i < numPeer; i++) { // long serverId = i + 1; // servers.put(serverId, new InetSocketAddress[] { // new InetSocketAddress("127.0.0.1"/* + String.valueOf(serverId)*/, 6555), // new InetSocketAddress("127.0.0.1"/* + String.valueOf(serverId)*/, 6556) // }); // } long serverId = 1; servers.put(serverId++, new InetSocketAddress[] { new InetSocketAddress("127.0.0.1"/* + String.valueOf(serverId)*/, 6555), new InetSocketAddress("127.0.0.1"/* + String.valueOf(serverId)*/, 6556) }); servers.put(serverId++, new InetSocketAddress[] { new InetSocketAddress("127.0.0.1"/* + String.valueOf(serverId)*/, 7555), new InetSocketAddress("127.0.0.1"/* + String.valueOf(serverId)*/, 7556) }); servers.put(serverId++, new InetSocketAddress[] { new InetSocketAddress("127.0.0.1"/* + String.valueOf(serverId)*/, 8555), new InetSocketAddress("127.0.0.1"/* + String.valueOf(serverId)*/, 8556) }); } /** * @param args * void * @throws IOException */ public QuorumPeer createPeer(long myId) throws IOException { QuorumPeer quorumPeer = null; LOG.info("Starting quorum peer"); // ����������peers(map<sid, peer>) // �������ļ����У���ô�����sid�ֱ���server�ֶκ����1��2��3 Long.valueOf(sid) // server.1=zoo1:2888:3888 // server.2=zoo2:2888:3888 // server.3=zoo3:2888:3888 // servers.put(Long.valueOf(sid), new QuorumServer(sid, addr)); Map<Long, QuorumPeer.QuorumServer> peers = new HashMap<Long, QuorumPeer.QuorumServer>(); /** * serverId, �������¶˿ڣ�ѡ�ٶ˿ڣ���Ȼ����һ�������DZ�ʾ���ͣ� PARTICIPANT, OBSERVER;�� */ for (int i = 0; i < numPeer; i++) { int serverId = i + 1; // ���ݴ���˿� InetSocketAddress addr1 = servers.get(new Long(serverId))[0]; // ѡ�ٶ˿� InetSocketAddress addr2 = servers.get(new Long(serverId))[1]; QuorumPeer.QuorumServer server = new QuorumPeer.QuorumServer(new Long(serverId), addr1, addr2); peers.put(new Long(serverId), server); } quorumPeer = new QuorumPeer(peers, new ProposalVote(0, myId, 0, ServerState.LOOKING), myId); quorumPeer.setTickTime(2000); /** * * initLimit is timeouts ZooKeeper uses to limit the length of time the * ZooKeeper servers in quorum have to connect to a leader. time = 5 * * tick = 5 * 2000 = 10s */ quorumPeer.setInitLimit(5); quorumPeer.setSyncLimit(2); return quorumPeer; } public static void main( String[] args ) throws IOException, InterruptedException { QuorumPeer peer = new App().createPeer(1L); peer.start(); } }