protected Leader makeLeader(FileTxnSnapLog logFactory) throws IOException, X509Exception { return new Leader(this, new LeaderZooKeeperServer(logFactory, this, this.zkDb)); }
public ProposalRequestProcessor(LeaderZooKeeperServer zks, RequestProcessor nextProcessor) { this.zks = zks; this.nextProcessor = nextProcessor; AckRequestProcessor ackProcessor = new AckRequestProcessor(zks.getLeader()); syncProcessor = new SyncRequestProcessor(zks, ackProcessor); }
/** * Start up Leader ZooKeeper server and initialize zxid to the new epoch */ private synchronized void startZkServer() { // Update lastCommitted and Db's zxid to a value representing the new epoch lastCommitted = zk.getZxid(); LOG.info("Have quorum of supporters, sids: [ " + getSidSetString(newLeaderProposal.ackSet) + " ]; starting up and setting last processed zxid: 0x{}", Long.toHexString(zk.getZxid())); zk.startup(); /* * Update the election vote here to ensure that all members of the * ensemble report the same vote to new servers that start up and * send leader election notifications to the ensemble. * * @see https://issues.apache.org/jira/browse/ZOOKEEPER-1732 */ self.updateElectionVote(getEpoch()); zk.getZKDatabase().setlastProcessedZxid(zk.getZxid()); }
@Override public void createSessionTracker() { sessionTracker = new LeaderSessionTracker( this, getZKDatabase().getSessionWithTimeOuts(), tickTime, self.getId(), self.areLocalSessionsEnabled(), getZooKeeperServerListener()); }
@Override protected void setupRequestProcessors() { RequestProcessor finalProcessor = new FinalRequestProcessor(this); RequestProcessor toBeAppliedProcessor = new Leader.ToBeAppliedRequestProcessor(finalProcessor, getLeader()); commitProcessor = new CommitProcessor(toBeAppliedProcessor, Long.toString(getServerId()), false, getZooKeeperServerListener()); commitProcessor.start(); ProposalRequestProcessor proposalProcessor = new ProposalRequestProcessor(this, commitProcessor); proposalProcessor.initialize(); prepRequestProcessor = new PrepRequestProcessor(this, proposalProcessor); prepRequestProcessor.start(); firstProcessor = new LeaderRequestProcessor(this, prepRequestProcessor); setupContainerManager(); }
self.end_fle = 0; zk.registerJMX(new LeaderBean(this, zk), self.jmxLocalPeerBean); zk.loadData(); leaderStateSummary = new StateSummary(self.getCurrentEpoch(), zk.getLastProcessedZxid()); long epoch = getEpochToPropose(self.getId(), self.getAcceptedEpoch()); zk.setZxid(ZxidUtils.makeZxid(epoch, 0)); lastProposed = zk.getZxid(); newLeaderProposal.packet = new QuorumPacket(NEWLEADER, zk.getZxid(), null, null); waitForNewLeaderAck(self.getId(), zk.getZxid()); } catch (InterruptedException e) { shutdown("Waiting for a quorum of followers, only synced with sids: [ " if (initialZxid != null) { long zxid = Long.parseLong(initialZxid); zk.setZxid((zk.getZxid() & 0xffffffff00000000L) | zxid); zk.unregisterJMX(this);
zk.registerJMX(new LeaderBean(this, zk), self.jmxLocalPeerBean); zk.loadData(); zk.startup(); long epoch = self.getLastLoggedZxid() >> 32L; epoch++; zk.setZxid(epoch << 32L); zk.getZKDatabase().setlastProcessedZxid(zk.getZxid()); lastProposed = zk.getZxid(); newLeaderProposal.packet = new QuorumPacket(NEWLEADER, zk.getZxid(), null, null); zk.unregisterJMX(this);
ReentrantReadWriteLock lock = leader.zk.getZKDatabase().getLogLock(); ReadLock rl = lock.readLock(); try { rl.lock(); final long maxCommittedLog = leader.zk.getZKDatabase().getmaxCommittedLog(); final long minCommittedLog = leader.zk.getZKDatabase().getminCommittedLog(); LOG.info("Synchronizing with Follower sid: " + sid +" maxCommittedLog=0x"+Long.toHexString(maxCommittedLog) LinkedList<Proposal> proposals = leader.zk.getZKDatabase().getCommittedLog(); if (peerLastZxid == leader.zk.getZKDatabase().getDataTreeLastProcessedZxid()) { zxidToSend = leader.zk.getZKDatabase().getDataTreeLastProcessedZxid(); leader.zk.getZKDatabase().serializeSnapshot(oa); oa.writeString("BenWasHere", "signature"); while(!leader.zk.isRunning() && !this.isInterrupted()){ leader.zk.wait(20); long sess = dis.readLong(); int to = dis.readInt(); leader.zk.touch(sess, to); DataOutputStream dos = new DataOutputStream(bos); dos.writeLong(id); boolean valid = leader.zk.touch(id, to); if (valid) {
@Before public void setUp() { outputWriter = new StringWriter(); ServerCnxn serverCnxnMock = mock(ServerCnxn.class); LeaderZooKeeperServer zks = mock(LeaderZooKeeperServer.class); when(zks.isRunning()).thenReturn(true); providerMock = mock(ServerStats.Provider.class); when(zks.serverStats()).thenReturn(new ServerStats(providerMock)); ZKDatabase zkDatabaseMock = mock(ZKDatabase.class); when(zks.getZKDatabase()).thenReturn(zkDatabaseMock); Leader leaderMock = mock(Leader.class); when(leaderMock.getProposalStats()).thenReturn(new BufferStats()); when(zks.getLeader()).thenReturn(leaderMock); ServerCnxnFactory serverCnxnFactory = mock(ServerCnxnFactory.class); ServerCnxn serverCnxn = mock(ServerCnxn.class); List<ServerCnxn> connections = new ArrayList<>(); connections.add(serverCnxn); when(serverCnxnFactory.getConnections()).thenReturn(connections); statCommand = new StatCommand(new PrintWriter(outputWriter), serverCnxnMock, FourLetterCommands.statCmd); statCommand.setZkServer(zks); statCommand.setFactory(serverCnxnFactory); }
@Override protected void setupRequestProcessors() { RequestProcessor finalProcessor = new FinalRequestProcessor(this); RequestProcessor toBeAppliedProcessor = new Leader.ToBeAppliedRequestProcessor( finalProcessor, getLeader().toBeApplied); commitProcessor = new CommitProcessor(toBeAppliedProcessor, Long.toString(getServerId()), false, getZooKeeperServerListener()); commitProcessor.start(); ProposalRequestProcessor proposalProcessor = new ProposalRequestProcessor(this, commitProcessor); proposalProcessor.initialize(); firstProcessor = new PrepRequestProcessor(this, proposalProcessor); ((PrepRequestProcessor)firstProcessor).start(); }
@Override public ZKDatabase getZKDatabase() { return zk.getZKDatabase(); }
@Test public void testStatResetWithLeader() { // Arrange LeaderZooKeeperServer leaderZks = mock(LeaderZooKeeperServer.class); when(leaderZks.isRunning()).thenReturn(true); when(leaderZks.serverStats()).thenReturn(serverStats); Leader leader = mock(Leader.class); when(leaderZks.getLeader()).thenReturn(leader); statResetCommand.setZkServer(leaderZks); when(serverStats.getServerState()).thenReturn("leader"); BufferStats bufferStats = mock(BufferStats.class); when(leader.getProposalStats()).thenReturn(bufferStats); // Act statResetCommand.commandRun(); // Assert String output = outputWriter.toString(); assertEquals("Server stats reset.\n", output); verify(serverStats, times(1)).reset(); verify(bufferStats, times(1)).reset(); } }
@Override protected void setupRequestProcessors() { RequestProcessor finalProcessor = new FinalRequestProcessor(this); RequestProcessor toBeAppliedProcessor = new Leader.ToBeAppliedRequestProcessor( finalProcessor, getLeader().toBeApplied); commitProcessor = new CommitProcessor(toBeAppliedProcessor, Long.toString(getServerId()), false); commitProcessor.start(); ProposalRequestProcessor proposalProcessor = new ProposalRequestProcessor(this, commitProcessor); proposalProcessor.initialize(); firstProcessor = new PrepRequestProcessor(this, proposalProcessor); ((PrepRequestProcessor)firstProcessor).start(); }
self.processReconfig(newQV, designatedLeader, zk.getZxid(), true);
@Override public void waitForStartup() throws InterruptedException { synchronized(zk) { while(!zk.isRunning() && !Thread.currentThread().isInterrupted()) { zk.wait(20); } } }
@Test public void testGetCurrentZxid() { // Arrange zks.setZxid(1); // Assert assertEquals("0x1", leaderBean.getCurrentZxid()); }
@Test public void testWaitForEpochAck() throws Exception { leader.leaderStateSummary = new StateSummary(leader.self.getCurrentEpoch(), leader.zk.getLastProcessedZxid());
@Override public void registerLearnerHandlerBean(final LearnerHandler learnerHandler, Socket socket) { LearnerHandlerBean bean = new LearnerHandlerBean(learnerHandler, socket); if (zk.registerJMX(bean)) { connectionBeans.put(learnerHandler, bean); } }
self.end_fle = 0; zk.registerJMX(new LeaderBean(this, zk), self.jmxLocalPeerBean); zk.loadData(); leaderStateSummary = new StateSummary(self.getCurrentEpoch(), zk.getLastProcessedZxid()); zk.setZxid(ZxidUtils.makeZxid(epoch, 0)); lastProposed = zk.getZxid(); newLeaderProposal.packet = new QuorumPacket(NEWLEADER, zk.getZxid(), null, null); newQV.setVersion(zk.getZxid()); self.setLastSeenQuorumVerifier(newQV, true); } catch (Exception e) { waitForNewLeaderAck(self.getId(), zk.getZxid()); } catch (InterruptedException e) { shutdown("Waiting for a quorum of followers, only synced with sids: [ " if (initialZxid != null) { long zxid = Long.parseLong(initialZxid); zk.setZxid((zk.getZxid() & 0xffffffff00000000L) | zxid); zk.unregisterJMX(this);
LinkedList<Proposal> proposals = leader.zk.getZKDatabase().getCommittedLog(); synchronized(proposals) { if (proposals.size() != 0) { if ((leader.zk.getZKDatabase().getmaxCommittedLog() >= peerLastZxid) && (leader.zk.getZKDatabase().getminCommittedLog() <= peerLastZxid)) { packetToSend = Leader.DIFF; zxidToSend = leader.zk.getZKDatabase().getmaxCommittedLog(); for (Proposal propose: proposals) { if (propose.packet.getZxid() > peerLastZxid) { if (logTxns && (peerLastZxid > leader.zk.getZKDatabase().getmaxCommittedLog())) { zxidToSend = leader.zk.getZKDatabase().getmaxCommittedLog(); updates = zxidToSend; leader.zk.getZKDatabase().serializeSnapshot(oa); oa.writeString("BenWasHere", "signature"); long sess = dis.readLong(); int to = dis.readInt(); leader.zk.touch(sess, to); DataOutputStream dos = new DataOutputStream(bos); dos.writeLong(id); boolean valid = leader.zk.touch(id, to); if (valid) { try { leader.zk.setOwner(id, this);