Package org.apache.cassandra.net
Class FrameDecoder
java.lang.Object
io.netty.channel.ChannelHandlerAdapter
io.netty.channel.ChannelInboundHandlerAdapter
org.apache.cassandra.net.FrameDecoder
- All Implemented Interfaces:
io.netty.channel.ChannelHandler,io.netty.channel.ChannelInboundHandler
- Direct Known Subclasses:
FrameDecoderCrc,FrameDecoderLZ4
public abstract class FrameDecoder
extends io.netty.channel.ChannelInboundHandlerAdapter
A Netty inbound handler that decodes incoming frames and passes them forward to
InboundMessageHandler for processing.
Handles work stashing, and together with InboundMessageHandler - flow control.
Unlike most Netty inbound handlers, doesn't use the pipeline to talk to its
upstream handler. Instead, a FrameDecoder.FrameProcessor must be registered with
the frame decoder, to be invoked on new frames. See deliver(FrameProcessor).
See activate(FrameProcessor), reactivate(), and FrameDecoder.FrameProcessor
for flow control implementation.
Five frame decoders currently exist, one used for each connection depending on flags and messaging version:
1. FrameDecoderCrc:
no compression; payload is protected by CRC32
2. FrameDecoderLZ4:
LZ4 compression with custom frame format; payload is protected by CRC32
3. FrameDecoderUnprotected:
no compression; no integrity protection-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final classA corrupted frame was encountered; this represents the knowledge we have about this frame, and whether or not the stream is recoverable.static classstatic interfacestatic final classThe payload bytes of a complete frame, i.e.Nested classes/interfaces inherited from interface io.netty.channel.ChannelHandler
io.netty.channel.ChannelHandler.Sharable -
Field Summary
Fields -
Method Summary
Modifier and TypeMethodDescriptionvoidactivate(FrameDecoder.FrameProcessor processor) For use by InboundMessageHandler (or other upstream handlers) that want to start receiving frames.voidchannelInactive(io.netty.channel.ChannelHandlerContext ctx) voidchannelRead(io.netty.channel.ChannelHandlerContext ctx, Object msg) Called by Netty pipeline when a new message arrives; we anticipate in normal operation this will receive messages of typeBufferPoolAllocator.WrappedorBufferPoolAllocator.Wrapped.voidchannelReadComplete(io.netty.channel.ChannelHandlerContext ctx) voiddiscard()For use by InboundMessageHandler (or other upstream handlers) that want to permanently stop receiving frames, e.g.voidhandlerAdded(io.netty.channel.ChannelHandlerContext ctx) booleanisActive()voidFor use by InboundMessageHandler (or other upstream handlers) that want to resume receiving frames after previously indicating that processing should be paused.Methods inherited from class io.netty.channel.ChannelInboundHandlerAdapter
channelActive, channelRegistered, channelUnregistered, channelWritabilityChanged, exceptionCaught, userEventTriggeredMethods inherited from class io.netty.channel.ChannelHandlerAdapter
ensureNotSharable, handlerRemoved, isSharableMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface io.netty.channel.ChannelHandler
handlerRemoved
-
Field Details
-
allocator
-
-
Method Details
-
isActive
public boolean isActive()- Returns:
- true if we are actively decoding and processing frames
-
activate
For use by InboundMessageHandler (or other upstream handlers) that want to start receiving frames. -
reactivate
For use by InboundMessageHandler (or other upstream handlers) that want to resume receiving frames after previously indicating that processing should be paused.- Throws:
IOException
-
discard
public void discard()For use by InboundMessageHandler (or other upstream handlers) that want to permanently stop receiving frames, e.g. because of an exception caught. -
channelRead
Called by Netty pipeline when a new message arrives; we anticipate in normal operation this will receive messages of typeBufferPoolAllocator.WrappedorBufferPoolAllocator.Wrapped. These buffers are unwrapped and passed todecode(Collection, ShareableBytes), which collects decoded frames intoframes, which we send upstream indeliver(org.apache.cassandra.net.FrameDecoder.FrameProcessor)- Specified by:
channelReadin interfaceio.netty.channel.ChannelInboundHandler- Overrides:
channelReadin classio.netty.channel.ChannelInboundHandlerAdapter- Throws:
IOException
-
channelReadComplete
public void channelReadComplete(io.netty.channel.ChannelHandlerContext ctx) - Specified by:
channelReadCompletein interfaceio.netty.channel.ChannelInboundHandler- Overrides:
channelReadCompletein classio.netty.channel.ChannelInboundHandlerAdapter
-
handlerAdded
public void handlerAdded(io.netty.channel.ChannelHandlerContext ctx) - Specified by:
handlerAddedin interfaceio.netty.channel.ChannelHandler- Overrides:
handlerAddedin classio.netty.channel.ChannelHandlerAdapter
-
channelInactive
public void channelInactive(io.netty.channel.ChannelHandlerContext ctx) - Specified by:
channelInactivein interfaceio.netty.channel.ChannelInboundHandler- Overrides:
channelInactivein classio.netty.channel.ChannelInboundHandlerAdapter
-