Package net.spy.memcached.protocol
Class TCPMemcachedNodeImpl
java.lang.Object
net.spy.memcached.compat.SpyObject
net.spy.memcached.protocol.TCPMemcachedNodeImpl
- All Implemented Interfaces:
MemcachedNode
- Direct Known Subclasses:
AsciiMemcachedNodeImpl,BinaryMemcachedNodeImpl
Represents a node with the memcached cluster, along with buffering and
operation queues.
-
Field Summary
Fields -
Constructor Summary
ConstructorsConstructorDescriptionTCPMemcachedNodeImpl(SocketAddress sa, SocketChannel c, int bufSize, BlockingQueue<Operation> rq, BlockingQueue<Operation> wq, BlockingQueue<Operation> iq, long opQueueMaxBlockTime, boolean waitForAuth, long dt, long authWaitTime, ConnectionFactory fact) -
Method Summary
Modifier and TypeMethodDescriptionfinal voidAdd an operation to the queue.final voidLet the node know that auth is complete.voidMark this node as having just completed a read.final voidNotify this node that it has reconnected.final voidMove all of the operations delivered via addOperation into the internal write queue.final ByteBufferConvert the encrypted data record that received from this node to plain text data.Extract all queued items for this node destructively.final booleandoTlsHandshake(long timeoutInMillis) Do handshake for connecting to this node when TLS enabled.final voidfillWriteBuffer(boolean shouldOptimize) Fill the write buffer with data from the next operations in the queue.final voidfixupOps()Fix up the selection ops on the selection key.final intGet the number of bytes remaining to write.final SocketChannelGet the SocketChannel for this connection.intfinal OperationGet the operation at the top of the queue that is requiring input.final OperationGet the operation at the top of the queue that has information available to write.final NodeEndPointGet NodeEndPointfinal ByteBuffergetRbuf()Get the buffer used for reading data from this node.final intGet the current reconnect count.final intCompute the appropriate selection operations for the channel this MemcachedNode holds to the server.final SelectionKeygetSk()Get the selection key from this node.final SocketAddressGet the SocketAddress of the server to which this node is connected.final ByteBuffergetWbuf()Get the buffer used for writing data to this node.final booleanTrue if an operation is available to read.final booleanTrue if an operation is available to write.final voidInsert an operation to the beginning of the queue.final booleanisActive()True if this node isactive.
i.e.booleanTrue if this node isauthenticated.
longNumber of milliseconds since the last read of this node completed.protected abstract voidoptimize()final voidNotify this node that it will be reconnecting.final voidregisterChannel(SocketChannel ch, SelectionKey skey) Register a channel with this node.final OperationRemove the operation at the top of the queue that is requiring input.final OperationRemove the operation at the top of the queue that has information available to write.final voidSet the SocketChannel this node uses.voidsetConnection(MemcachedConnection connection) voidsetContinuousTimeout(boolean timedOut) Count 'time out' exceptions to drop connections that fail perpetually.voidsetNodeEndPoint(NodeEndPoint nodeEndPoint) Set NodeEndPointfinal voidsetSk(SelectionKey to) Set the selection key for this node.final voidTell a node to set up for authentication.final voidClear the queue of currently processing operations by either cancelling them or setting them up to be reapplied after a reconnect.final StringtoString()final voidTransition the current write item into a read state.final intWrite some bytes and return the number of bytes written.
-
Field Details
-
writeQ
-
optimizedOp
-
-
Constructor Details
-
TCPMemcachedNodeImpl
public TCPMemcachedNodeImpl(SocketAddress sa, SocketChannel c, int bufSize, BlockingQueue<Operation> rq, BlockingQueue<Operation> wq, BlockingQueue<Operation> iq, long opQueueMaxBlockTime, boolean waitForAuth, long dt, long authWaitTime, ConnectionFactory fact)
-
-
Method Details
-
copyInputQueue
public final void copyInputQueue()Description copied from interface:MemcachedNodeMove all of the operations delivered via addOperation into the internal write queue.- Specified by:
copyInputQueuein interfaceMemcachedNode
-
destroyInputQueue
Description copied from interface:MemcachedNodeExtract all queued items for this node destructively. This is useful for redistributing items.- Specified by:
destroyInputQueuein interfaceMemcachedNode
-
setupResend
public final void setupResend()Description copied from interface:MemcachedNodeClear the queue of currently processing operations by either cancelling them or setting them up to be reapplied after a reconnect.- Specified by:
setupResendin interfaceMemcachedNode
-
fillWriteBuffer
Description copied from interface:MemcachedNodeFill the write buffer with data from the next operations in the queue.- Specified by:
fillWriteBufferin interfaceMemcachedNode- Parameters:
shouldOptimize- if true, combine sequential gets into a single multi-key get- Throws:
IOException
-
transitionWriteItem
public final void transitionWriteItem()Description copied from interface:MemcachedNodeTransition the current write item into a read state.- Specified by:
transitionWriteItemin interfaceMemcachedNode
-
optimize
protected abstract void optimize() -
getCurrentReadOp
Description copied from interface:MemcachedNodeGet the operation at the top of the queue that is requiring input.- Specified by:
getCurrentReadOpin interfaceMemcachedNode
-
removeCurrentReadOp
Description copied from interface:MemcachedNodeRemove the operation at the top of the queue that is requiring input.- Specified by:
removeCurrentReadOpin interfaceMemcachedNode
-
getCurrentWriteOp
Description copied from interface:MemcachedNodeGet the operation at the top of the queue that has information available to write.- Specified by:
getCurrentWriteOpin interfaceMemcachedNode
-
removeCurrentWriteOp
Description copied from interface:MemcachedNodeRemove the operation at the top of the queue that has information available to write.- Specified by:
removeCurrentWriteOpin interfaceMemcachedNode
-
hasReadOp
public final boolean hasReadOp()Description copied from interface:MemcachedNodeTrue if an operation is available to read.- Specified by:
hasReadOpin interfaceMemcachedNode
-
hasWriteOp
public final boolean hasWriteOp()Description copied from interface:MemcachedNodeTrue if an operation is available to write.- Specified by:
hasWriteOpin interfaceMemcachedNode
-
addOp
Description copied from interface:MemcachedNodeAdd an operation to the queue. Authentication operations should never be added to the queue, but this is not checked.- Specified by:
addOpin interfaceMemcachedNode
-
insertOp
Description copied from interface:MemcachedNodeInsert an operation to the beginning of the queue. This method is meant to be invoked rarely.- Specified by:
insertOpin interfaceMemcachedNode
-
getSelectionOps
public final int getSelectionOps()Description copied from interface:MemcachedNodeCompute the appropriate selection operations for the channel this MemcachedNode holds to the server.- Specified by:
getSelectionOpsin interfaceMemcachedNode
-
getRbuf
Description copied from interface:MemcachedNodeGet the buffer used for reading data from this node.- Specified by:
getRbufin interfaceMemcachedNode
-
getWbuf
Description copied from interface:MemcachedNodeGet the buffer used for writing data to this node.- Specified by:
getWbufin interfaceMemcachedNode
-
doTlsHandshake
Description copied from interface:MemcachedNodeDo handshake for connecting to this node when TLS enabled.- Specified by:
doTlsHandshakein interfaceMemcachedNode- Returns:
- true if handshake is successful, false if handshake is unsuccessful.
- Throws:
IOException
-
decryptNextTLSDataRecord
Description copied from interface:MemcachedNodeConvert the encrypted data record that received from this node to plain text data.- Specified by:
decryptNextTLSDataRecordin interfaceMemcachedNode- Returns:
- buffer contains plain text data.
- Throws:
IOException
-
getSocketAddress
Description copied from interface:MemcachedNodeGet the SocketAddress of the server to which this node is connected.- Specified by:
getSocketAddressin interfaceMemcachedNode
-
getNodeEndPoint
Description copied from interface:MemcachedNodeGet NodeEndPoint- Specified by:
getNodeEndPointin interfaceMemcachedNode- Returns:
-
setNodeEndPoint
Description copied from interface:MemcachedNodeSet NodeEndPoint- Specified by:
setNodeEndPointin interfaceMemcachedNode- Parameters:
nodeEndPoint-
-
isActive
public final boolean isActive()Description copied from interface:MemcachedNodeTrue if this node isactive.
i.e. is is currently connected and expected to be able to process requests- Specified by:
isActivein interfaceMemcachedNode
-
isAuthenticated
public boolean isAuthenticated()Description copied from interface:MemcachedNodeTrue if this node isauthenticated.
- Specified by:
isAuthenticatedin interfaceMemcachedNode
-
reconnecting
public final void reconnecting()Description copied from interface:MemcachedNodeNotify this node that it will be reconnecting.- Specified by:
reconnectingin interfaceMemcachedNode
-
connected
public final void connected()Description copied from interface:MemcachedNodeNotify this node that it has reconnected.- Specified by:
connectedin interfaceMemcachedNode
-
getReconnectCount
public final int getReconnectCount()Description copied from interface:MemcachedNodeGet the current reconnect count.- Specified by:
getReconnectCountin interfaceMemcachedNode
-
toString
-
registerChannel
Description copied from interface:MemcachedNodeRegister a channel with this node.- Specified by:
registerChannelin interfaceMemcachedNode
-
setChannel
Description copied from interface:MemcachedNodeSet the SocketChannel this node uses.- Specified by:
setChannelin interfaceMemcachedNode
-
getChannel
Description copied from interface:MemcachedNodeGet the SocketChannel for this connection.- Specified by:
getChannelin interfaceMemcachedNode
-
setSk
Description copied from interface:MemcachedNodeSet the selection key for this node.- Specified by:
setSkin interfaceMemcachedNode
-
getSk
Description copied from interface:MemcachedNodeGet the selection key from this node.- Specified by:
getSkin interfaceMemcachedNode
-
getBytesRemainingToWrite
public final int getBytesRemainingToWrite()Description copied from interface:MemcachedNodeGet the number of bytes remaining to write.- Specified by:
getBytesRemainingToWritein interfaceMemcachedNode
-
writeSome
Description copied from interface:MemcachedNodeWrite some bytes and return the number of bytes written.- Specified by:
writeSomein interfaceMemcachedNode- Returns:
- the number of bytes written
- Throws:
IOException- if there's a problem writing
-
setContinuousTimeout
public void setContinuousTimeout(boolean timedOut) Description copied from interface:MemcachedNodeCount 'time out' exceptions to drop connections that fail perpetually.- Specified by:
setContinuousTimeoutin interfaceMemcachedNode- Parameters:
timedOut-
-
getContinuousTimeout
public int getContinuousTimeout()- Specified by:
getContinuousTimeoutin interfaceMemcachedNode
-
fixupOps
public final void fixupOps()Description copied from interface:MemcachedNodeFix up the selection ops on the selection key.- Specified by:
fixupOpsin interfaceMemcachedNode
-
authComplete
public final void authComplete()Description copied from interface:MemcachedNodeLet 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:
authCompletein interfaceMemcachedNode
-
setupForAuth
public final void setupForAuth()Description copied from interface:MemcachedNodeTell 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:
setupForAuthin interfaceMemcachedNode
-
lastReadDelta
public long lastReadDelta()Number of milliseconds since the last read of this node completed.- Specified by:
lastReadDeltain interfaceMemcachedNode- Returns:
- milliseconds since last read.
-
completedRead
public void completedRead()Mark this node as having just completed a read.- Specified by:
completedReadin interfaceMemcachedNode
-
getConnection
- Specified by:
getConnectionin interfaceMemcachedNode
-
setConnection
- Specified by:
setConnectionin interfaceMemcachedNode
-