/** * Check if a node is in the current view. With static membership, the * result of this check will never change; only when dynamic membership * is introduced will this be more useful. */ public boolean viewContains(Long sid) { return this.getView().containsKey(sid); }
private void sendNotifications() { for (QuorumServer server : self.getView().values()) { ToSend notmsg = new ToSend(ToSend.mType.notification, AuthFastLeaderElection.sequencer++, proposedLeader, proposedZxid, logicalclock.get(), QuorumPeer.ServerState.LOOKING, self.getView().get(server.id).electionAddr); sendqueue.offer(notmsg); } }
@Override public String getPeerInfo(long sid) { QuorumPeer.QuorumServer server = self.getView().get(sid); return server == null ? "" : server.toString(); }
@Override public String getPeerInfo(long sid) { QuorumPeer.QuorumServer server = self.getView().get(sid); return server == null ? "" : server.toString(); }
@Override public boolean isPartOfEnsemble() { return peer.getView().containsKey(peer.getId()); }
/** * Returns only observers, no followers. */ public Map<Long,QuorumPeer.QuorumServer> getObservingView() { Map<Long,QuorumPeer.QuorumServer> ret = new HashMap<Long, QuorumPeer.QuorumServer>(); Map<Long,QuorumPeer.QuorumServer> view = getView(); for (QuorumServer server : view.values()) { if (server.type == LearnerType.OBSERVER) { ret.put(server.id, server); } } return ret; }
private void sendNotifications() { for (QuorumServer server : self.getView().values()) { ToSend notmsg = new ToSend(ToSend.mType.notification, AuthFastLeaderElection.sequencer++, proposedLeader, proposedZxid, logicalclock, QuorumPeer.ServerState.LOOKING, self.getView().get(server.id).electionAddr); sendqueue.offer(notmsg); } }
/** * Observers are not contained in this view, only nodes with * PeerType=PARTICIPANT. */ public Map<Long,QuorumPeer.QuorumServer> getVotingView() { return QuorumPeer.viewToVotingView(getView()); }
@Override public synchronized void start() { if (!getView().containsKey(myid)) { throw new RuntimeException("My id " + myid + " not in the peer list"); } loadDataBase(); startServerCnxnFactory(); try { adminServer.start(); } catch (AdminServerException e) { LOG.warn("Problem starting AdminServer", e); System.out.println(e); } startLeaderElection(); super.start(); }
Map<Long, QuorumPeer.QuorumServer> lastCommittedView = self.getView(); QuorumVerifier lastSeenQV = self.getLastSeenQuorumVerifier(); Map<Long, QuorumPeer.QuorumServer> lastProposedView = lastSeenQV.getAllMembers();
/** * Returns the address of the node we think is the leader. */ protected QuorumServer findLeader() { QuorumServer leaderServer = null; // Find the leader by id Vote current = self.getCurrentVote(); for (QuorumServer s : self.getView().values()) { if (s.id == current.getId()) { // Ensure we have the leader's correct IP address before // attempting to connect. s.recreateSocketAddresses(); leaderServer = s; break; } } if (leaderServer == null) { LOG.warn("Couldn't find the leader with id = " + current.getId()); } return leaderServer; }
public QuorumCnxManager createCnxnManager() { return new QuorumCnxManager(this, this.getId(), this.getView(), this.authServer, this.authLearner, this.tickTime * this.syncLimit, this.getQuorumListenOnAllIPs(), this.quorumCnxnThreadsSize, this.isQuorumSaslAuthEnabled()); }
public void initialize() throws SaslException { // init quorum auth server & learner if (isQuorumSaslAuthEnabled()) { Set<String> authzHosts = new HashSet<String>(); for (QuorumServer qs : getView().values()) { authzHosts.add(qs.hostname); } authServer = new SaslQuorumAuthServer(isQuorumServerSaslAuthRequired(), quorumServerLoginContext, authzHosts); authLearner = new SaslQuorumAuthLearner(isQuorumLearnerSaslAuthRequired(), quorumServicePrincipal, quorumLearnerLoginContext); } else { authServer = new NullQuorumAuthServer(); authLearner = new NullQuorumAuthLearner(); } }
synchronized public void startLeaderElection() { try { currentVote = new Vote(myid, getLastLoggedZxid(), getCurrentEpoch()); } catch(IOException e) { RuntimeException re = new RuntimeException(e.getMessage()); re.setStackTrace(e.getStackTrace()); throw re; } for (QuorumServer p : getView().values()) { if (p.id == myid) { myQuorumAddr = p.addr; break; } } if (myQuorumAddr == null) { throw new RuntimeException("My id " + myid + " not in the peer list"); } if (electionType == 0) { try { udpSocket = new DatagramSocket(myQuorumAddr.getPort()); responder = new ResponderThread(); responder.start(); } catch (SocketException e) { throw new RuntimeException(e); } } this.electionAlg = createElectionAlgorithm(electionType); }
/** * Returns the address of the node we think is the leader. */ protected QuorumServer findLeader() { QuorumServer leaderServer = null; // Find the leader by id Vote current = self.getCurrentVote(); for (QuorumServer s : self.getView().values()) { if (s.id == current.getId()) { // Ensure we have the leader's correct IP address before // attempting to connect. s.recreateSocketAddresses(); leaderServer = s; break; } } if (leaderServer == null) { LOG.warn("Couldn't find the leader with id = " + current.getId()); } return leaderServer; }
public QuorumCnxManager createCnxnManager() { return new QuorumCnxManager(this.getId(), this.getView(), this.authServer, this.authLearner, this.tickTime * this.syncLimit, this.getQuorumListenOnAllIPs(), this.quorumCnxnThreadsSize, this.isQuorumSaslAuthEnabled()); }
public void initialize() throws SaslException { // init quorum auth server & learner if (isQuorumSaslAuthEnabled()) { Set<String> authzHosts = new HashSet<String>(); for (QuorumServer qs : getView().values()) { authzHosts.add(qs.hostname); } authServer = new SaslQuorumAuthServer(isQuorumServerSaslAuthRequired(), quorumServerLoginContext, authzHosts); authLearner = new SaslQuorumAuthLearner(isQuorumLearnerSaslAuthRequired(), quorumServicePrincipal, quorumLearnerLoginContext); authInitialized = true; } else { authServer = new NullQuorumAuthServer(); authLearner = new NullQuorumAuthLearner(); } }
int replica2 = 2; QuorumPeer peer2 = qu.getPeer(replica2).peer; QuorumServer leavingQS2 = peer2.getView().get(new Long(leavingIndex)); String remotePeerBean2 = CommonNames.DOMAIN + ":name0=ReplicatedServer_id" + replica2 + ",name1=replica." QuorumServer leavingQS3 = peer3.getView().get(new Long(leavingIndex)); String remotePeerBean3 = CommonNames.DOMAIN + ":name0=ReplicatedServer_id" + replica3 + ",name1=replica." leavingQS2 = peer2.getView().get(new Long(leavingIndex)); assertRemotePeerMXBeanAttributes(leavingQS2, remotePeerBean2); leavingQS3 = peer3.getView().get(new Long(leavingIndex)); assertRemotePeerMXBeanAttributes(leavingQS3, remotePeerBean3);
int replica2 = 2; QuorumPeer peer2 = qu.getPeer(replica2).peer; QuorumServer changingQS2 = peer2.getView().get(new Long(changingIndex)); String remotePeerBean2 = CommonNames.DOMAIN + ":name0=ReplicatedServer_id" + replica2 + ",name1=replica." QuorumServer changingQS3 = peer3.getView().get(new Long(changingIndex)); String remotePeerBean3 = CommonNames.DOMAIN + ":name0=ReplicatedServer_id" + replica3 + ",name1=replica." changingQS2 = peer2.getView().get(new Long(changingIndex)); assertRemotePeerMXBeanAttributes(changingQS2, remotePeerBean2); changingQS3 = peer3.getView().get(new Long(changingIndex)); assertRemotePeerMXBeanAttributes(changingQS3, remotePeerBean3);