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 toInboundMessageHandler
for processing. Handles work stashing, and together withInboundMessageHandler
- flow control. Unlike most Netty inbound handlers, doesn't use the pipeline to talk to its upstream handler. Instead, aFrameDecoder.FrameProcessor
must be registered with the frame decoder, to be invoked on new frames. Seedeliver(FrameProcessor)
. Seeactivate(FrameProcessor)
,reactivate()
, andFrameDecoder.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 4.FrameDecoderLegacy
: no compression; no integrity protection; turns unframed streams of legacy messages (< 4.0) into frames 5.FrameDecoderLegacyLZ4
LZ4 compression using standard LZ4 frame format; groups legacy messages (< 4.0) into frames
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
FrameDecoder.CorruptFrame
A corrupted frame was encountered; this represents the knowledge we have about this frame, and whether or not the stream is recoverable.static class
FrameDecoder.Frame
static interface
FrameDecoder.FrameProcessor
static class
FrameDecoder.IntactFrame
The payload bytes of a complete frame, i.e.
-
Field Summary
Fields Modifier and Type Field Description protected BufferPoolAllocator
allocator
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
activate(FrameDecoder.FrameProcessor processor)
For use by InboundMessageHandler (or other upstream handlers) that want to start receiving frames.void
channelInactive(io.netty.channel.ChannelHandlerContext ctx)
void
channelRead(io.netty.channel.ChannelHandlerContext ctx, java.lang.Object msg)
Called by Netty pipeline when a new message arrives; we anticipate in normal operation this will receive messages of typeBufferPoolAllocator.Wrapped
orBufferPoolAllocator.Wrapped
.void
channelReadComplete(io.netty.channel.ChannelHandlerContext ctx)
void
discard()
For use by InboundMessageHandler (or other upstream handlers) that want to permanently stop receiving frames, e.g.void
handlerAdded(io.netty.channel.ChannelHandlerContext ctx)
-
Methods inherited from class io.netty.channel.ChannelInboundHandlerAdapter
channelActive, channelRegistered, channelUnregistered, channelWritabilityChanged, exceptionCaught, userEventTriggered
-
Methods inherited from class io.netty.channel.ChannelHandlerAdapter
ensureNotSharable, handlerRemoved, isSharable
-
-
-
-
Field Detail
-
allocator
protected final BufferPoolAllocator allocator
-
-
Method Detail
-
activate
public void activate(FrameDecoder.FrameProcessor processor)
For use by InboundMessageHandler (or other upstream handlers) that want to start receiving frames.
-
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
public void channelRead(io.netty.channel.ChannelHandlerContext ctx, java.lang.Object msg) throws java.io.IOException
Called by Netty pipeline when a new message arrives; we anticipate in normal operation this will receive messages of typeBufferPoolAllocator.Wrapped
orBufferPoolAllocator.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:
channelRead
in interfaceio.netty.channel.ChannelInboundHandler
- Overrides:
channelRead
in classio.netty.channel.ChannelInboundHandlerAdapter
- Throws:
java.io.IOException
-
channelReadComplete
public void channelReadComplete(io.netty.channel.ChannelHandlerContext ctx)
- Specified by:
channelReadComplete
in interfaceio.netty.channel.ChannelInboundHandler
- Overrides:
channelReadComplete
in classio.netty.channel.ChannelInboundHandlerAdapter
-
handlerAdded
public void handlerAdded(io.netty.channel.ChannelHandlerContext ctx)
- Specified by:
handlerAdded
in interfaceio.netty.channel.ChannelHandler
- Overrides:
handlerAdded
in classio.netty.channel.ChannelHandlerAdapter
-
channelInactive
public void channelInactive(io.netty.channel.ChannelHandlerContext ctx)
- Specified by:
channelInactive
in interfaceio.netty.channel.ChannelInboundHandler
- Overrides:
channelInactive
in classio.netty.channel.ChannelInboundHandlerAdapter
-
-