public int getQuorumSize(){ return getVotingView().size(); }
/** * Check if a given sid is represented in either the current or * the next voting view * * @param sid Server identifier * @return boolean */ private boolean validVoter(long sid) { return self.getVotingView().containsKey(sid); } }
private boolean isParticipant(long sid) { return self.getVotingView().containsKey(sid); } }
public int getQuorumSize(){ return getVotingView().size(); }
private void starter(QuorumPeer self) { this.self = self; port = self.getVotingView().get(self.getId()).electionAddr.getPort(); proposedLeader = -1; proposedZxid = -1; try { mySocket = new DatagramSocket(port); // mySocket.setSoTimeout(20000); } catch (SocketException e1) { e1.printStackTrace(); throw new RuntimeException(); } sendqueue = new LinkedBlockingQueue<ToSend>(2 * self.getVotingView().size()); recvqueue = new LinkedBlockingQueue<Notification>(2 * self.getVotingView() .size()); new Messenger(self.getVotingView().size() * 2, mySocket); }
/** * Invokes initiateConnection for testing purposes * * @param sid */ public void testInitiateConnection(long sid) throws Exception { LOG.debug("Opening channel to server " + sid); Socket sock = new Socket(); setSockOpts(sock); sock.connect(self.getVotingView().get(sid).electionAddr, cnxTO); initiateConnection(sock, sid); }
private void starter(QuorumPeer self) { this.self = self; port = self.getVotingView().get(self.getId()).electionAddr.getPort(); proposedLeader = -1; proposedZxid = -1; try { mySocket = new DatagramSocket(port); // mySocket.setSoTimeout(20000); } catch (SocketException e1) { e1.printStackTrace(); throw new RuntimeException(); } sendqueue = new LinkedBlockingQueue<ToSend>(2 * self.getVotingView().size()); recvqueue = new LinkedBlockingQueue<Notification>(2 * self.getVotingView() .size()); new Messenger(self.getVotingView().size() * 2, mySocket); }
private boolean termPredicate(Map<InetSocketAddress, Vote> votes, long l, long zxid) { Collection<Vote> votesCast = votes.values(); int count = 0; /* * First make the views consistent. Sometimes peers will have different * zxids for a server depending on timing. */ for (Vote v : votesCast) { if ((v.getId() == l) && (v.getZxid() == zxid)) count++; } if (count > (self.getVotingView().size() / 2)) return true; else return false; }
Messenger(int threads, DatagramSocket s) { mySocket = s; ackset = Collections.<Long>newSetFromMap(new ConcurrentHashMap<Long, Boolean>()); challengeMap = new ConcurrentHashMap<Long, Long>(); challengeMutex = new ConcurrentHashMap<Long, Semaphore>(); ackMutex = new ConcurrentHashMap<Long, Semaphore>(); addrChallengeMap = new ConcurrentHashMap<InetSocketAddress, ConcurrentHashMap<Long, Long>>(); lastProposedLeader = 0; lastProposedZxid = 0; lastEpoch = 0; for (int i = 0; i < threads; ++i) { Thread t = new Thread(new WorkerSender(3), "WorkerSender Thread: " + (i + 1)); t.setDaemon(true); t.start(); } for (QuorumServer server : self.getVotingView().values()) { InetSocketAddress saddr = new InetSocketAddress(server.addr .getAddress(), port); addrChallengeMap.put(saddr, new ConcurrentHashMap<Long, Long>()); } Thread t = new Thread(new WorkerReceiver(s, this), "WorkerReceiver Thread"); t.start(); }
/** * Send notifications to all peers upon a change in our vote */ private void sendNotifications() { for (QuorumServer server : self.getVotingView().values()) { long sid = server.id; ToSend notmsg = new ToSend(ToSend.mType.notification, proposedLeader, proposedZxid, logicalclock.get(), QuorumPeer.ServerState.LOOKING, sid, proposedEpoch); if(LOG.isDebugEnabled()){ LOG.debug("Sending Notification: " + proposedLeader + " (n.leader), 0x" + Long.toHexString(proposedZxid) + " (n.zxid), 0x" + Long.toHexString(logicalclock.get()) + " (n.round), " + sid + " (recipient), " + self.getId() + " (myid), 0x" + Long.toHexString(proposedEpoch) + " (n.peerEpoch)"); } sendqueue.offer(notmsg); } }
private boolean termPredicate(HashMap<InetSocketAddress, Vote> votes, long l, long zxid) { Collection<Vote> votesCast = votes.values(); int count = 0; /* * First make the views consistent. Sometimes peers will have different * zxids for a server depending on timing. */ for (Vote v : votesCast) { if ((v.getId() == l) && (v.getZxid() == zxid)) count++; } if (count > (self.getVotingView().size() / 2)) return true; else return false; }
Messenger(int threads, DatagramSocket s) { mySocket = s; ackset = Collections.<Long>newSetFromMap(new ConcurrentHashMap<Long, Boolean>()); challengeMap = new ConcurrentHashMap<Long, Long>(); challengeMutex = new ConcurrentHashMap<Long, Semaphore>(); ackMutex = new ConcurrentHashMap<Long, Semaphore>(); addrChallengeMap = new ConcurrentHashMap<InetSocketAddress, ConcurrentHashMap<Long, Long>>(); lastProposedLeader = 0; lastProposedZxid = 0; lastEpoch = 0; for (int i = 0; i < threads; ++i) { Thread t = new ZooKeeperThread(new WorkerSender(3), "WorkerSender Thread: " + (i + 1)); t.setDaemon(true); t.start(); } for (QuorumServer server : self.getVotingView().values()) { InetSocketAddress saddr = new InetSocketAddress(server.addr .getAddress(), port); addrChallengeMap.put(saddr, new ConcurrentHashMap<Long, Long>()); } Thread t = new ZooKeeperThread(new WorkerReceiver(s, this), "WorkerReceiver-" + s.getRemoteSocketAddress()); t.start(); }
QuorumPeer.QuorumServer qps = self.getVotingView().get(sid); if (qps != null) {
while (self.isRunning()) { HashMap<InetSocketAddress, Vote> votes = new HashMap<InetSocketAddress, Vote>(self.getVotingView().size()); requestPacket.setLength(4); HashSet<Long> heardFrom = new HashSet<Long>(); for (QuorumServer server : self.getVotingView().values()) { LOG.info("Server address: " + server.addr); try { self.setCurrentVote(result.vote); if (result.winningCount > (self.getVotingView().size() / 2)) { self.setCurrentVote(result.winner); s.close();
if (self.getVotingView().size() == recvset.size()) { self.setPeerState((proposedLeader == self.getId()) ? ServerState.LEADING: ServerState.FOLLOWING);
LOG.info("QuorumPeer 1 voting view: " + s1.getVotingView()); LOG.info("QuorumPeer 2 voting view: " + s2.getVotingView()); LOG.info("QuorumPeer 3 voting view: " + s3.getVotingView()); LOG.info("QuorumPeer 4 voting view: " + s4.getVotingView()); LOG.info("QuorumPeer 5 voting view: " + s5.getVotingView());
if (self.getVotingView().size() == recvset.size()) { self.setPeerState((proposedLeader == self.getId()) ? ServerState.LEADING: ServerState.FOLLOWING);
public int getQuorumSize(){ return getVotingView().size(); }
public int getQuorumSize(){ return getVotingView().size(); }
/** * Invokes initiateConnection for testing purposes * * @param sid */ public void testInitiateConnection(long sid) throws Exception { SocketChannel channel; LOG.debug("Opening channel to server " + sid); channel = SocketChannel .open(self.getVotingView().get(sid).electionAddr); channel.socket().setTcpNoDelay(true); initiateConnection(channel, sid); }