Search in sources :

Example 1 with QuorumPacket

use of org.apache.zookeeper.server.quorum.QuorumPacket in project zookeeper by apache.

the class ZKDatabase method addCommittedProposal.

/**
     * 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;
        }
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        BinaryOutputArchive boa = BinaryOutputArchive.getArchive(baos);
        try {
            request.getHdr().serialize(boa, "hdr");
            if (request.getTxn() != null) {
                request.getTxn().serialize(boa, "txn");
            }
            baos.close();
        } catch (IOException e) {
            LOG.error("This really should be impossible", e);
        }
        QuorumPacket pp = new QuorumPacket(Leader.PROPOSAL, request.zxid, baos.toByteArray(), null);
        Proposal p = new Proposal();
        p.packet = pp;
        p.request = request;
        committedLog.add(p);
        maxCommittedLog = p.packet.getZxid();
    } finally {
        wl.unlock();
    }
}
Also used : ReentrantReadWriteLock(java.util.concurrent.locks.ReentrantReadWriteLock) WriteLock(java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock) BinaryOutputArchive(org.apache.jute.BinaryOutputArchive) QuorumPacket(org.apache.zookeeper.server.quorum.QuorumPacket) ByteArrayOutputStream(java.io.ByteArrayOutputStream) IOException(java.io.IOException) Proposal(org.apache.zookeeper.server.quorum.Leader.Proposal)

Example 2 with QuorumPacket

use of org.apache.zookeeper.server.quorum.QuorumPacket in project zookeeper by apache.

the class TxnLogProposalIterator method next.

/**
     * 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;
}
Also used : BinaryOutputArchive(org.apache.jute.BinaryOutputArchive) QuorumPacket(org.apache.zookeeper.server.quorum.QuorumPacket) Record(org.apache.jute.Record) ByteArrayOutputStream(java.io.ByteArrayOutputStream) IOException(java.io.IOException) Proposal(org.apache.zookeeper.server.quorum.Leader.Proposal) TxnHeader(org.apache.zookeeper.txn.TxnHeader)

Aggregations

ByteArrayOutputStream (java.io.ByteArrayOutputStream)2 IOException (java.io.IOException)2 BinaryOutputArchive (org.apache.jute.BinaryOutputArchive)2 Proposal (org.apache.zookeeper.server.quorum.Leader.Proposal)2 QuorumPacket (org.apache.zookeeper.server.quorum.QuorumPacket)2 ReentrantReadWriteLock (java.util.concurrent.locks.ReentrantReadWriteLock)1 WriteLock (java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock)1 Record (org.apache.jute.Record)1 TxnHeader (org.apache.zookeeper.txn.TxnHeader)1