Class P2PFileTransferClientHandler
java.lang.Object
io.netty.channel.ChannelHandlerAdapter
io.netty.channel.ChannelInboundHandlerAdapter
io.netty.channel.SimpleChannelInboundHandler<io.netty.handler.codec.http.HttpObject>
com.linkedin.davinci.blobtransfer.client.P2PFileTransferClientHandler
- All Implemented Interfaces:
io.netty.channel.ChannelHandler
,io.netty.channel.ChannelInboundHandler
public class P2PFileTransferClientHandler
extends io.netty.channel.SimpleChannelInboundHandler<io.netty.handler.codec.http.HttpObject>
The client-side Netty handler to process responses for P2P file transfer. It's not shareable among multiple requests since it
maintains the states for a single partition.
It's important to note that this handler is operated in a single thread, and it processes file transfers sequentially.
-
Nested Class Summary
Nested classes/interfaces inherited from interface io.netty.channel.ChannelHandler
io.netty.channel.ChannelHandler.Sharable
-
Constructor Summary
ConstructorsConstructorDescriptionP2PFileTransferClientHandler
(String baseDir, CompletionStage<InputStream> inputStreamFuture, String storeName, int version, int partition, BlobTransferUtils.BlobTransferTableFormat tableFormat) -
Method Summary
Modifier and TypeMethodDescriptionvoid
channelInactive
(io.netty.channel.ChannelHandlerContext ctx) Handles channel deactivation, typically triggered when the server gracefully closes the connection.protected void
channelRead0
(io.netty.channel.ChannelHandlerContext ctx, io.netty.handler.codec.http.HttpObject msg) void
exceptionCaught
(io.netty.channel.ChannelHandlerContext ctx, Throwable cause) void
userEventTriggered
(io.netty.channel.ChannelHandlerContext ctx, Object evt) Handles idle state events to detect unresponsive server connections during blob transfer.Methods inherited from class io.netty.channel.SimpleChannelInboundHandler
acceptInboundMessage, channelRead
Methods inherited from class io.netty.channel.ChannelInboundHandlerAdapter
channelActive, channelReadComplete, channelRegistered, channelUnregistered, channelWritabilityChanged
Methods inherited from class io.netty.channel.ChannelHandlerAdapter
ensureNotSharable, handlerAdded, handlerRemoved, isSharable
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface io.netty.channel.ChannelHandler
handlerAdded, handlerRemoved
-
Constructor Details
-
P2PFileTransferClientHandler
public P2PFileTransferClientHandler(String baseDir, CompletionStage<InputStream> inputStreamFuture, String storeName, int version, int partition, BlobTransferUtils.BlobTransferTableFormat tableFormat)
-
-
Method Details
-
channelRead0
protected void channelRead0(io.netty.channel.ChannelHandlerContext ctx, io.netty.handler.codec.http.HttpObject msg) throws Exception - Specified by:
channelRead0
in classio.netty.channel.SimpleChannelInboundHandler<io.netty.handler.codec.http.HttpObject>
- Throws:
Exception
-
channelInactive
Handles channel deactivation, typically triggered when the server gracefully closes the connection. This is called when the server sends a FIN packet (graceful shutdown), which is different from abrupt termination handled byuserEventTriggered(io.netty.channel.ChannelHandlerContext, java.lang.Object)
. If the transfer was incomplete, this indicates the server shut down unexpectedly during the transfer process, so we complete the input stream future exceptionally for fast failover.- Specified by:
channelInactive
in interfaceio.netty.channel.ChannelInboundHandler
- Overrides:
channelInactive
in classio.netty.channel.ChannelInboundHandlerAdapter
- Parameters:
ctx
-- Throws:
Exception
-
userEventTriggered
public void userEventTriggered(io.netty.channel.ChannelHandlerContext ctx, Object evt) throws Exception Handles idle state events to detect unresponsive server connections during blob transfer. When no data is received within the timeout (READER_IDLE), this method assumes the server is unavailable, completes the transfer future exceptionally, and closes the channel. This enables fast failover to the next available peer instead of waiting for the longer client timeout configured in NettyFileTransferClient#blobReceiveTimeoutInMin. Please note that if traffic is legitimately slow but continuous, it should NOT trigger READER_IDLE. However, if traffic has long gaps, it WILL trigger.- Specified by:
userEventTriggered
in interfaceio.netty.channel.ChannelInboundHandler
- Overrides:
userEventTriggered
in classio.netty.channel.ChannelInboundHandlerAdapter
- Parameters:
ctx
- the channel handler contextevt
- the user event, expected to be IdleStateEvent for timeout detection- Throws:
Exception
-
exceptionCaught
- Specified by:
exceptionCaught
in interfaceio.netty.channel.ChannelHandler
- Specified by:
exceptionCaught
in interfaceio.netty.channel.ChannelInboundHandler
- Overrides:
exceptionCaught
in classio.netty.channel.ChannelInboundHandlerAdapter
-