Class PerChannelBookieClient

  • All Implemented Interfaces:,

              help="Per channel bookie client stats")
    public class PerChannelBookieClient
    This class manages all details of connection to a particular bookie. It also has reconnect logic if a connection to a bookie fails.
    • Field Detail

      • LOG

        static final org.slf4j.Logger LOG
      • eventLoopGroup

        final eventLoopGroup
      • allocator

        final io.netty.buffer.ByteBufAllocator allocator
      • addEntryTimeoutNanos

        final long addEntryTimeoutNanos
      • readEntryTimeoutNanos

        final long readEntryTimeoutNanos
      • maxFrameSize

        final int maxFrameSize
      • getBookieInfoTimeoutNanos

        final long getBookieInfoTimeoutNanos
      • startTLSTimeout

        final int startTLSTimeout
      • channel

        volatile channel
      • closeLock

        final java.util.concurrent.locks.ReentrantReadWriteLock closeLock
    • Method Detail

      • getNumPendingCompletionRequests

        protected long getNumPendingCompletionRequests()
      • connect

        protected connect()
      • cleanDisconnectAndClose

        void cleanDisconnectAndClose()
      • isWritable

        public boolean isWritable()
        boolean, true is PCBC is writable
      • setWritable

        public void setWritable​(boolean val)
      • addEntry

        void addEntry​(long ledgerId,
                      byte[] masterKey,
                      long entryId,
                      ByteBufList toSend,
                      BookkeeperInternalCallbacks.WriteCallback cb,
                      java.lang.Object ctx,
                      int options,
                      boolean allowFastFail,
                      java.util.EnumSet<WriteFlag> writeFlags)
        This method should be called only after connection has been checked for connectIfNeededAndDoOp(GenericCallback).
        ledgerId - Ledger Id
        masterKey - Master Key
        entryId - Entry Id
        toSend - Buffer to send
        cb - Write callback
        ctx - Write callback context
        allowFastFail - allowFastFail flag
        writeFlags - WriteFlags
      • readEntryWaitForLACUpdate

        public void readEntryWaitForLACUpdate​(long ledgerId,
                                              long entryId,
                                              long previousLAC,
                                              long timeOutInMillis,
                                              boolean piggyBackEntry,
                                              BookkeeperInternalCallbacks.ReadEntryCallback cb,
                                              java.lang.Object ctx)
        Long Poll Reads.
      • checkTimeoutOnPendingOperations

        public void checkTimeoutOnPendingOperations()
      • disconnect

        public void disconnect()
        Disconnects the bookie client. It can be reused.
      • disconnect

        public void disconnect​(boolean wait)
      • close

        public void close()
        Closes the bookie client permanently. It cannot be reused.
      • close

        public void close​(boolean wait)
      • channelWritabilityChanged

        public void channelWritabilityChanged​( ctx)
                                       throws java.lang.Exception
        Specified by:
        channelWritabilityChanged in interface
        channelWritabilityChanged in class
      • errorOutPendingOps

        void errorOutPendingOps​(int rc)
        Errors out pending ops from per channel bookie client. As the channel is being closed, all the operations waiting on the connection will be sent to completion with error.
      • errorOutOutstandingEntries

        void errorOutOutstandingEntries​(int rc)
        Errors out pending entries. We call this method from one thread to avoid concurrent executions to QuorumOpMonitor (implements callbacks). It seems simpler to call it from BookieHandle instead of calling directly from here.
      • recordError

        void recordError()
      • channelInactive

        public void channelInactive​( ctx)
                             throws java.lang.Exception
        If our channel has disconnected, we just error out the pending entries.
        Specified by:
        channelInactive in interface
        channelInactive in class
      • exceptionCaught

        public void exceptionCaught​( ctx,
                                    java.lang.Throwable cause)
                             throws java.lang.Exception
        Called by netty when an exception happens in one of the netty threads (mostly due to what we do in the netty threads).
        Specified by:
        exceptionCaught in interface
        Specified by:
        exceptionCaught in interface
        exceptionCaught in class
      • channelRead

        public void channelRead​( ctx,
                                java.lang.Object msg)
                         throws java.lang.Exception
        Called by netty when a message is received on a channel.
        Specified by:
        channelRead in interface
        channelRead in class
      • initTLSHandshake

        void initTLSHandshake()
      • acquireV2Key

        org.apache.bookkeeper.proto.PerChannelBookieClient.V2CompletionKey acquireV2Key​(long ledgerId,
                                                                                        long entryId,
                                                                                        org.apache.bookkeeper.proto.BookkeeperProtocol.OperationType operationType)
      • withRequestContext

        org.apache.bookkeeper.proto.BookkeeperProtocol.Request.Builder withRequestContext​(org.apache.bookkeeper.proto.BookkeeperProtocol.Request.Builder builder)
      • appendRequestContext

        static org.apache.bookkeeper.proto.BookkeeperProtocol.Request.Builder appendRequestContext​(org.apache.bookkeeper.proto.BookkeeperProtocol.Request.Builder builder)
      • contextPreservingListener contextPreservingListener​( listener)