Package io.grpc.netty

Class WriteBufferingAndExceptionHandler

java.lang.Object
io.netty.channel.ChannelHandlerAdapter
io.netty.channel.ChannelInboundHandlerAdapter
io.netty.channel.ChannelDuplexHandler
io.grpc.netty.WriteBufferingAndExceptionHandler
All Implemented Interfaces:
io.netty.channel.ChannelHandler, io.netty.channel.ChannelInboundHandler, io.netty.channel.ChannelOutboundHandler

final class WriteBufferingAndExceptionHandler extends io.netty.channel.ChannelDuplexHandler
Buffers all writes until either writeBufferedAndRemove(ChannelHandlerContext) or failWrites(Throwable) is called. This handler allows us to write to a Channel before we are allowed to write to it officially i.e. before it's active or the TLS Handshake is complete.
  • Field Details

  • Constructor Details

    • WriteBufferingAndExceptionHandler

      WriteBufferingAndExceptionHandler(io.netty.channel.ChannelHandler next)
  • Method Details

    • handlerAdded

      public void handlerAdded(io.netty.channel.ChannelHandlerContext ctx) throws Exception
      Specified by:
      handlerAdded in interface io.netty.channel.ChannelHandler
      Overrides:
      handlerAdded in class io.netty.channel.ChannelHandlerAdapter
      Throws:
      Exception
    • handlerRemoved

      public void handlerRemoved(io.netty.channel.ChannelHandlerContext ctx) throws Exception
      Specified by:
      handlerRemoved in interface io.netty.channel.ChannelHandler
      Overrides:
      handlerRemoved in class io.netty.channel.ChannelHandlerAdapter
      Throws:
      Exception
    • channelInactive

      public void channelInactive(io.netty.channel.ChannelHandlerContext ctx)
      If this channel becomes inactive, then notify all buffered writes that we failed.
      Specified by:
      channelInactive in interface io.netty.channel.ChannelInboundHandler
      Overrides:
      channelInactive in class io.netty.channel.ChannelInboundHandlerAdapter
    • 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
    • write

      public void write(io.netty.channel.ChannelHandlerContext ctx, Object msg, io.netty.channel.ChannelPromise promise)
      Buffers the write until either writeBufferedAndRemove(ChannelHandlerContext) is called, or we have somehow failed. If we have already failed in the past, then the write will fail immediately.
      Specified by:
      write in interface io.netty.channel.ChannelOutboundHandler
      Overrides:
      write in class io.netty.channel.ChannelDuplexHandler
    • connect

      public void connect(io.netty.channel.ChannelHandlerContext ctx, SocketAddress remoteAddress, SocketAddress localAddress, io.netty.channel.ChannelPromise promise) throws Exception
      Specified by:
      connect in interface io.netty.channel.ChannelOutboundHandler
      Overrides:
      connect in class io.netty.channel.ChannelDuplexHandler
      Throws:
      Exception
    • channelRead

      public void channelRead(io.netty.channel.ChannelHandlerContext ctx, Object msg)
      Specified by:
      channelRead in interface io.netty.channel.ChannelInboundHandler
      Overrides:
      channelRead in class io.netty.channel.ChannelInboundHandlerAdapter
    • flush

      public void flush(io.netty.channel.ChannelHandlerContext ctx)
      Calls to this method will not trigger an immediate flush. The flush will be deferred until writeBufferedAndRemove(ChannelHandlerContext).
      Specified by:
      flush in interface io.netty.channel.ChannelOutboundHandler
      Overrides:
      flush in class io.netty.channel.ChannelDuplexHandler
    • close

      public void close(io.netty.channel.ChannelHandlerContext ctx, io.netty.channel.ChannelPromise future) throws Exception
      If we are still performing protocol negotiation, then this will propagate failures to all buffered writes.
      Specified by:
      close in interface io.netty.channel.ChannelOutboundHandler
      Overrides:
      close in class io.netty.channel.ChannelDuplexHandler
      Throws:
      Exception
    • writeBufferedAndRemove

      final void writeBufferedAndRemove(io.netty.channel.ChannelHandlerContext ctx)
    • failWrites

      private void failWrites(Throwable cause)
      Propagate failures to all buffered writes.