/** * maintains a list of last <i>committedLog</i> * or so committed requests. This is used for * fast follower synchronization. * @param request committed request */ public void addCommittedProposal(Request request) { WriteLock wl = logLock.writeLock(); try { wl.lock(); if (committedLog.size() > commitLogCount) { committedLog.removeFirst(); minCommittedLog = committedLog.getFirst().packet.getZxid(); } if (committedLog.size() == 0) { minCommittedLog = request.zxid; maxCommittedLog = request.zxid; } // byte[] data = SerializeUtils.serializeRequest(request); QuorumPacket pp = new QuorumPacket(Leader.PROPOSAL, request.zxid, data, null); Proposal p = new Proposal(); p.packet = pp; p.request = request; committedLog.add(p); maxCommittedLog = p.packet.getZxid(); } finally { wl.unlock(); } }
p.addAck(sid);
if (!p.hasAllQuorums()) { return false;
Proposal p = new Proposal(); p.packet = pp; p.request = request;
baos.toByteArray(), null); Proposal p = new Proposal(); p.packet = pp; p.request = request;
newLeaderProposal.addQuorumVerifier(self.getQuorumVerifier()); if (self.getLastSeenQuorumVerifier().getVersion() > self.getQuorumVerifier().getVersion()){ newLeaderProposal.addQuorumVerifier(self.getLastSeenQuorumVerifier()); } catch (InterruptedException e) { shutdown("Waiting for a quorum of followers, only synced with sids: [ " + newLeaderProposal.ackSetsToString() + " ]"); HashSet<Long> followerSet = new HashSet<Long>();
QuorumPacket pp = new QuorumPacket(Leader.PROPOSAL, request.zxid, data, null); Proposal p = new Proposal(); p.packet = pp; p.request = request;
Proposal p = new Proposal(); p.addQuorumVerifier(s1.getQuorumVerifier()); p.addAck(Long.valueOf(1)); p.addAck(Long.valueOf(2)); Assert.assertEquals(false, p.hasAllQuorums()); p.addAck(Long.valueOf(6)); Assert.assertEquals(false, p.hasAllQuorums()); p.addAck(Long.valueOf(3)); Assert.assertEquals(true, p.hasAllQuorums()); p = new Proposal(); p.addQuorumVerifier(s1.getQuorumVerifier()); p.addAck(Long.valueOf(1)); Assert.assertEquals(false, p.hasAllQuorums()); p.addAck(Long.valueOf(4)); p.addAck(Long.valueOf(5)); Assert.assertEquals(false, p.hasAllQuorums()); p.addAck(Long.valueOf(6)); Assert.assertEquals(false, p.hasAllQuorums()); p.addAck(Long.valueOf(2)); Assert.assertEquals(true, p.hasAllQuorums());
leader.newLeaderProposal.addQuorumVerifier(peer.getQuorumVerifier());
+ newLeaderProposal.ackSetsToString() + " ]; starting up and setting last processed zxid: 0x{}", Long.toHexString(zk.getZxid()));
newLeaderProposal.addAck(sid); if (newLeaderProposal.hasAllQuorums()) { quorumFormed = true; newLeaderProposal.qvAcksetPairs.notifyAll();
QuorumPacket pp = new QuorumPacket(Leader.PROPOSAL, request.zxid, data, null); Proposal p = new Proposal(); p.packet = pp; p.request = request; p.addQuorumVerifier(self.getQuorumVerifier()); p.addQuorumVerifier(self.getLastSeenQuorumVerifier());
/** * Proposal returned by this iterator has request part set to null, since * it is not used for follower sync-up. */ @Override public Proposal next() { ByteArrayOutputStream baos = new ByteArrayOutputStream(); BinaryOutputArchive boa = BinaryOutputArchive.getArchive(baos); Proposal p = new Proposal(); try { TxnHeader hdr = itr.getHeader(); Record txn = itr.getTxn(); hdr.serialize(boa, "hdr"); if (txn != null) { txn.serialize(boa, "txn"); } baos.close(); QuorumPacket pp = new QuorumPacket(Leader.PROPOSAL, itr.getHeader() .getZxid(), baos.toByteArray(), null); p.packet = pp; p.request = null; // This is the only place that can throw IO exception hasNext = itr.next(); } catch (IOException e) { LOG.error("Unable to read txnlog from disk", e); hasNext = false; } return p; }
/** * maintains a list of last <i>committedLog</i> * or so committed requests. This is used for * fast follower synchronization. * @param request committed request */ public void addCommittedProposal(Request request) { WriteLock wl = logLock.writeLock(); try { wl.lock(); if (committedLog.size() > commitLogCount) { committedLog.removeFirst(); minCommittedLog = committedLog.getFirst().packet.getZxid(); } if (committedLog.isEmpty()) { minCommittedLog = request.zxid; maxCommittedLog = request.zxid; } byte[] data = SerializeUtils.serializeRequest(request); QuorumPacket pp = new QuorumPacket(Leader.PROPOSAL, request.zxid, data, null); Proposal p = new Proposal(); p.packet = pp; p.request = request; committedLog.add(p); maxCommittedLog = p.packet.getZxid(); } finally { wl.unlock(); } }
Proposal createProposal(long zxid) { Proposal p = new Proposal(); p.packet = new QuorumPacket(); p.packet.setZxid(zxid); p.packet.setType(Leader.PROPOSAL); return p; }