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

    Constructors
    Constructor
    Description
    P2PFileTransferClientHandler(String baseDir, CompletionStage<InputStream> inputStreamFuture, String storeName, int version, int partition, BlobTransferUtils.BlobTransferTableFormat tableFormat)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    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

  • Method Details

    • channelRead0

      protected void channelRead0(io.netty.channel.ChannelHandlerContext ctx, io.netty.handler.codec.http.HttpObject msg) throws Exception
      Specified by:
      channelRead0 in class io.netty.channel.SimpleChannelInboundHandler<io.netty.handler.codec.http.HttpObject>
      Throws:
      Exception
    • channelInactive

      public void channelInactive(io.netty.channel.ChannelHandlerContext ctx) throws Exception
      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 by userEventTriggered(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 interface io.netty.channel.ChannelInboundHandler
      Overrides:
      channelInactive in class io.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 interface io.netty.channel.ChannelInboundHandler
      Overrides:
      userEventTriggered in class io.netty.channel.ChannelInboundHandlerAdapter
      Parameters:
      ctx - the channel handler context
      evt - the user event, expected to be IdleStateEvent for timeout detection
      Throws:
      Exception
    • exceptionCaught

      public void exceptionCaught(io.netty.channel.ChannelHandlerContext ctx, Throwable cause)
      Specified by:
      exceptionCaught in interface io.netty.channel.ChannelHandler
      Specified by:
      exceptionCaught in interface io.netty.channel.ChannelInboundHandler
      Overrides:
      exceptionCaught in class io.netty.channel.ChannelInboundHandlerAdapter