synchronized void informAndActivate(long zxid, long suggestedLeaderId) { QuorumPacket pkt = removeProposedPacket(zxid); if (pkt == null) { return; } // Build the INFORMANDACTIVATE packet QuorumPacket informAndActivateQP = Leader.buildInformAndActivePacket( zxid, suggestedLeaderId, pkt.getData()); cacheCommittedPacket(informAndActivateQP); sendPacket(informAndActivateQP); }
@Override protected void revalidateSession(ServerCnxn cnxn, long sessionId, int sessionTimeout) throws IOException { if (upgradeableSessionTracker.isLocalSession(sessionId)) { super.revalidateSession(cnxn, sessionId, sessionTimeout); } else { getLearner().validateSession(cnxn, sessionId, sessionTimeout); } }
/** * send a packet to all observers */ void sendObserverPacket(QuorumPacket qp) { for (LearnerHandler f : getObservingLearners()) { f.queuePacket(qp); } }
void mockServer() throws InterruptedException, IOException { QuorumPeer peer = new QuorumPeer(peers, tmpdir[0], tmpdir[0], port[0], 3, 0, 1000, 2, 2); cnxManager = peer.createCnxnManager(); cnxManager.listener.start(); cnxManager.toSend(1l, FLETestUtils.createMsg(ServerState.LOOKING.ordinal(), 0, 0, 0)); cnxManager.recvQueue.take(); cnxManager.toSend(1L, FLETestUtils.createMsg(ServerState.FOLLOWING.ordinal(), 1, 0, 0)); } }
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()); }
Proposal createProposal(long zxid) { Proposal p = new Proposal(); p.packet = new QuorumPacket(); p.packet.setZxid(zxid); p.packet.setType(Leader.PROPOSAL); return p; }
/** * Update the peer state based on the given proposedLeader. Also update * the leadingVoteSet if it becomes the leader. */ private void setPeerState(long proposedLeader, SyncedLearnerTracker voteSet) { ServerState ss = (proposedLeader == self.getId()) ? ServerState.LEADING: learningState(); self.setPeerState(ss); if (ss == ServerState.LEADING) { leadingVoteSet = voteSet; } }
boolean isLeader(long id) { Vote vote = getCurrentVote(); return vote != null && id == vote.getId(); } }
/** * Create an inform packet and send it to all observers. */ public void inform(Proposal proposal) { QuorumPacket qp = new QuorumPacket(Leader.INFORM, proposal.request.zxid, proposal.packet.getData(), null); sendObserverPacket(qp); }
/** * Create an inform&activate packet and send it to all observers. */ public void informAndActivate(Proposal proposal, long designatedLeader) { sendObserverPacket(buildInformAndActivePacket(proposal.request.zxid, designatedLeader, proposal.packet.getData())); }
public MockProposalRequestProcessor(LeaderZooKeeperServer zks, RequestProcessor nextProcessor) { super(zks, nextProcessor); /** * The only purpose here is to inject the mocked * SyncRequestProcessor */ AckRequestProcessor ackProcessor = new AckRequestProcessor(zks.getLeader()); syncProcessor = new MockSyncRequestProcessor(zks, ackProcessor); } }
/** * Queue leader packet of a given type * @param type * @param zxid */ private void queueOpPacket(int type, long zxid) { QuorumPacket packet = new QuorumPacket(type, zxid, null, null); queuePacket(packet); }
SimpleLearner(FileTxnSnapLog ftsl) throws IOException { self = new QuorumPeer(); zk = new SimpleLearnerZooKeeperServer(ftsl, self); ((SimpleLearnerZooKeeperServer) zk).learner = this; } }
private QuorumPeer getLeaderQuorumPeer(MainThread[] mt) { for (int i = mt.length - 1; i >= 0; i--) { QuorumPeer quorumPeer = mt[i].getQuorumPeer(); if (null != quorumPeer && ServerState.LEADING == quorumPeer.getPeerState()) { return quorumPeer; } } return null; }
@Override void writePacket(QuorumPacket pp, boolean flush) throws IOException { if (pp != null && pp.getType() == Leader.ACK && context.exitWhenAckNewLeader) { if (context.newLeaderAckCallback != null) { context.newLeaderAckCallback.start(); } } super.writePacket(pp, flush); } };
@Override public void resetProposalStatistics() { leader.getProposalStats().reset(); } }
public void restartAllServersAndClients(Watcher watcher) throws IOException, InterruptedException { for (MainThread t : mt) { if (!t.isAlive()) { t.start(); } } for (int i = 0; i < zk.length; i++) { restartClient(i, watcher); } }
public static Leader createMockLeader(File tmpDir, QuorumPeer peer) throws IOException, NoSuchFieldException, IllegalAccessException, X509Exception { LeaderZooKeeperServer zk = prepareLeader(tmpDir, peer); return new MockLeader(peer, zk); }
/** * Sends a sync message to the appropriate server */ public void sendSync(LearnerSyncRequest r){ QuorumPacket qp = new QuorumPacket(Leader.SYNC, 0, null, null); r.fh.queuePacket(qp); }
private QuorumPeer getLeader(MainThread[] mt) { for (int i = mt.length - 1; i >= 0; i--) { QuorumPeer quorumPeer = mt[i].getQuorumPeer(); if (quorumPeer != null && ServerState.LEADING == quorumPeer.getPeerState()) { return quorumPeer; } } return null; }