Class TCPMemcachedNodeImpl

    • Field Detail

      • socketAddress

        private final java.net.SocketAddress socketAddress
      • rbuf

        private final java.nio.ByteBuffer rbuf
      • wbuf

        private final java.nio.ByteBuffer wbuf
      • writeQ

        protected final java.util.concurrent.BlockingQueue<Operation> writeQ
      • readQ

        private final java.util.concurrent.BlockingQueue<Operation> readQ
      • inputQueue

        private final java.util.concurrent.BlockingQueue<Operation> inputQueue
      • opQueueMaxBlockTime

        private final long opQueueMaxBlockTime
      • authWaitTime

        private final long authWaitTime
      • reconnectAttempt

        private java.util.concurrent.atomic.AtomicInteger reconnectAttempt
      • channel

        private java.nio.channels.SocketChannel channel
      • toWrite

        private int toWrite
      • optimizedOp

        protected Operation optimizedOp
      • sk

        private volatile java.nio.channels.SelectionKey sk
      • shouldAuth

        private boolean shouldAuth
      • authLatch

        private java.util.concurrent.CountDownLatch authLatch
      • reconnectBlocked

        private java.util.ArrayList<Operation> reconnectBlocked
      • defaultOpTimeout

        private long defaultOpTimeout
      • lastReadTimestamp

        private volatile long lastReadTimestamp
      • continuousTimeout

        private final java.util.concurrent.atomic.AtomicInteger continuousTimeout
    • Constructor Detail

      • TCPMemcachedNodeImpl

        public TCPMemcachedNodeImpl​(java.net.SocketAddress sa,
                                    java.nio.channels.SocketChannel c,
                                    int bufSize,
                                    java.util.concurrent.BlockingQueue<Operation> rq,
                                    java.util.concurrent.BlockingQueue<Operation> wq,
                                    java.util.concurrent.BlockingQueue<Operation> iq,
                                    long opQueueMaxBlockTime,
                                    boolean waitForAuth,
                                    long dt,
                                    long authWaitTime,
                                    ConnectionFactory fact)
    • Method Detail

      • copyInputQueue

        public final void copyInputQueue()
        Description copied from interface: MemcachedNode
        Move all of the operations delivered via addOperation into the internal write queue.
        Specified by:
        copyInputQueue in interface MemcachedNode
      • destroyInputQueue

        public java.util.Collection<Operation> destroyInputQueue()
        Description copied from interface: MemcachedNode
        Extract all queued items for this node destructively. This is useful for redistributing items.
        Specified by:
        destroyInputQueue in interface MemcachedNode
      • setupResend

        public final void setupResend()
        Description copied from interface: MemcachedNode
        Clear the queue of currently processing operations by either cancelling them or setting them up to be reapplied after a reconnect.
        Specified by:
        setupResend in interface MemcachedNode
      • preparePending

        private boolean preparePending()
      • fillWriteBuffer

        public final void fillWriteBuffer​(boolean shouldOptimize)
        Description copied from interface: MemcachedNode
        Fill the write buffer with data from the next operations in the queue.
        Specified by:
        fillWriteBuffer in interface MemcachedNode
        Parameters:
        shouldOptimize - if true, combine sequential gets into a single multi-key get
      • getNextWritableOp

        private Operation getNextWritableOp()
      • transitionWriteItem

        public final void transitionWriteItem()
        Description copied from interface: MemcachedNode
        Transition the current write item into a read state.
        Specified by:
        transitionWriteItem in interface MemcachedNode
      • optimize

        protected abstract void optimize()
      • hasReadOp

        public final boolean hasReadOp()
        Description copied from interface: MemcachedNode
        True if an operation is available to read.
        Specified by:
        hasReadOp in interface MemcachedNode
      • hasWriteOp

        public final boolean hasWriteOp()
        Description copied from interface: MemcachedNode
        True if an operation is available to write.
        Specified by:
        hasWriteOp in interface MemcachedNode
      • addOp

        public final void addOp​(Operation op)
        Description copied from interface: MemcachedNode
        Add an operation to the queue. Authentication operations should never be added to the queue, but this is not checked.
        Specified by:
        addOp in interface MemcachedNode
      • insertOp

        public final void insertOp​(Operation op)
        Description copied from interface: MemcachedNode
        Insert an operation to the beginning of the queue. This method is meant to be invoked rarely.
        Specified by:
        insertOp in interface MemcachedNode
      • getSelectionOps

        public final int getSelectionOps()
        Description copied from interface: MemcachedNode
        Compute the appropriate selection operations for the channel this MemcachedNode holds to the server.
        Specified by:
        getSelectionOps in interface MemcachedNode
      • getRbuf

        public final java.nio.ByteBuffer getRbuf()
        Description copied from interface: MemcachedNode
        Get the buffer used for reading data from this node.
        Specified by:
        getRbuf in interface MemcachedNode
      • getWbuf

        public final java.nio.ByteBuffer getWbuf()
        Description copied from interface: MemcachedNode
        Get the buffer used for writing data to this node.
        Specified by:
        getWbuf in interface MemcachedNode
      • getSocketAddress

        public final java.net.SocketAddress getSocketAddress()
        Description copied from interface: MemcachedNode
        Get the SocketAddress of the server to which this node is connected.
        Specified by:
        getSocketAddress in interface MemcachedNode
      • isActive

        public final boolean isActive()
        Description copied from interface: MemcachedNode
        True if this node is active. i.e. is is currently connected and expected to be able to process requests
        Specified by:
        isActive in interface MemcachedNode
      • reconnecting

        public final void reconnecting()
        Description copied from interface: MemcachedNode
        Notify this node that it will be reconnecting.
        Specified by:
        reconnecting in interface MemcachedNode
      • connected

        public final void connected()
        Description copied from interface: MemcachedNode
        Notify this node that it has reconnected.
        Specified by:
        connected in interface MemcachedNode
      • toString

        public final java.lang.String toString()
        Overrides:
        toString in class java.lang.Object
      • registerChannel

        public final void registerChannel​(java.nio.channels.SocketChannel ch,
                                          java.nio.channels.SelectionKey skey)
        Description copied from interface: MemcachedNode
        Register a channel with this node.
        Specified by:
        registerChannel in interface MemcachedNode
      • setChannel

        public final void setChannel​(java.nio.channels.SocketChannel to)
        Description copied from interface: MemcachedNode
        Set the SocketChannel this node uses.
        Specified by:
        setChannel in interface MemcachedNode
      • getChannel

        public final java.nio.channels.SocketChannel getChannel()
        Description copied from interface: MemcachedNode
        Get the SocketChannel for this connection.
        Specified by:
        getChannel in interface MemcachedNode
      • setSk

        public final void setSk​(java.nio.channels.SelectionKey to)
        Description copied from interface: MemcachedNode
        Set the selection key for this node.
        Specified by:
        setSk in interface MemcachedNode
      • getSk

        public final java.nio.channels.SelectionKey getSk()
        Description copied from interface: MemcachedNode
        Get the selection key from this node.
        Specified by:
        getSk in interface MemcachedNode
      • writeSome

        public final int writeSome()
                            throws java.io.IOException
        Description copied from interface: MemcachedNode
        Write some bytes and return the number of bytes written.
        Specified by:
        writeSome in interface MemcachedNode
        Returns:
        the number of bytes written
        Throws:
        java.io.IOException - if there's a problem writing
      • setContinuousTimeout

        public void setContinuousTimeout​(boolean timedOut)
        Description copied from interface: MemcachedNode
        Count 'time out' exceptions to drop connections that fail perpetually.
        Specified by:
        setContinuousTimeout in interface MemcachedNode
      • fixupOps

        public final void fixupOps()
        Description copied from interface: MemcachedNode
        Fix up the selection ops on the selection key.
        Specified by:
        fixupOps in interface MemcachedNode
      • authComplete

        public final void authComplete()
        Description copied from interface: MemcachedNode
        Let the node know that auth is complete. Typically this would mean the node can start processing and accept new operations to its input queue.
        Specified by:
        authComplete in interface MemcachedNode
      • setupForAuth

        public final void setupForAuth()
        Description copied from interface: MemcachedNode
        Tell a node to set up for authentication. Typically this would mean blocking additions to the queue. In a reconnect situation this may mean putting any queued operations on hold to get to an auth complete state.
        Specified by:
        setupForAuth in interface MemcachedNode
      • lastReadDelta

        public long lastReadDelta()
        Number of milliseconds since the last read of this node completed.
        Specified by:
        lastReadDelta in interface MemcachedNode
        Returns:
        milliseconds since last read.
      • completedRead

        public void completedRead()
        Mark this node as having just completed a read.
        Specified by:
        completedRead in interface MemcachedNode