Package io.grpc.netty

Class NettyServerHandler

  • All Implemented Interfaces:
    io.netty.channel.ChannelHandler, io.netty.channel.ChannelInboundHandler, io.netty.channel.ChannelOutboundHandler, io.netty.handler.codec.http2.Http2LifecycleManager

    class NettyServerHandler
    extends AbstractNettyHandler
    Server-side Netty handler for GRPC processing. All event handlers are executed entirely within the context of the Netty Channel thread.
    • Field Detail

      • logger

        private static final java.util.logging.Logger logger
      • GRACEFUL_SHUTDOWN_PING_TIMEOUT_NANOS

        private static final long GRACEFUL_SHUTDOWN_PING_TIMEOUT_NANOS
      • DISABLE_CONNECTION_HEADER_CHECK

        private static final boolean DISABLE_CONNECTION_HEADER_CHECK
        Temporary workaround for #8674. Fine to delete after v1.45 release, and maybe earlier.
      • streamKey

        private final io.netty.handler.codec.http2.Http2Connection.PropertyKey streamKey
      • maxMessageSize

        private final int maxMessageSize
      • keepAliveTimeInNanos

        private final long keepAliveTimeInNanos
      • keepAliveTimeoutInNanos

        private final long keepAliveTimeoutInNanos
      • maxConnectionAgeInNanos

        private final long maxConnectionAgeInNanos
      • maxConnectionAgeGraceInNanos

        private final long maxConnectionAgeGraceInNanos
      • maxRstCount

        private final int maxRstCount
      • maxRstPeriodNanos

        private final long maxRstPeriodNanos
      • eagAttributes

        private final Attributes eagAttributes
      • ticker

        private final com.google.common.base.Ticker ticker
      • negotiationAttributes

        private Attributes negotiationAttributes
        Incomplete attributes produced by negotiator.
      • attributes

        private Attributes attributes
        Completed attributes produced by transportReady.
      • connectionError

        private java.lang.Throwable connectionError
      • teWarningLogged

        private boolean teWarningLogged
      • serverWriteQueue

        private WriteQueue serverWriteQueue
      • lastKnownAuthority

        private io.netty.util.AsciiString lastKnownAuthority
      • maxConnectionAgeMonitor

        @CheckForNull
        private java.util.concurrent.ScheduledFuture<?> maxConnectionAgeMonitor
      • rstCount

        private int rstCount
      • lastRstNanoTime

        private long lastRstNanoTime
    • Constructor Detail

      • NettyServerHandler

        private NettyServerHandler​(io.netty.channel.ChannelPromise channelUnused,
                                   io.netty.handler.codec.http2.Http2Connection connection,
                                   ServerTransportListener transportListener,
                                   java.util.List<? extends ServerStreamTracer.Factory> streamTracerFactories,
                                   TransportTracer transportTracer,
                                   io.netty.handler.codec.http2.Http2ConnectionDecoder decoder,
                                   io.netty.handler.codec.http2.Http2ConnectionEncoder encoder,
                                   io.netty.handler.codec.http2.Http2Settings settings,
                                   int maxMessageSize,
                                   long keepAliveTimeInNanos,
                                   long keepAliveTimeoutInNanos,
                                   long maxConnectionIdleInNanos,
                                   long maxConnectionAgeInNanos,
                                   long maxConnectionAgeGraceInNanos,
                                   KeepAliveEnforcer keepAliveEnforcer,
                                   boolean autoFlowControl,
                                   int maxRstCount,
                                   long maxRstPeriodNanos,
                                   Attributes eagAttributes,
                                   com.google.common.base.Ticker ticker)
    • Method Detail

      • newHandler

        static NettyServerHandler newHandler​(ServerTransportListener transportListener,
                                             io.netty.channel.ChannelPromise channelUnused,
                                             java.util.List<? extends ServerStreamTracer.Factory> streamTracerFactories,
                                             TransportTracer transportTracer,
                                             int maxStreams,
                                             boolean autoFlowControl,
                                             int flowControlWindow,
                                             int maxHeaderListSize,
                                             int maxMessageSize,
                                             long keepAliveTimeInNanos,
                                             long keepAliveTimeoutInNanos,
                                             long maxConnectionIdleInNanos,
                                             long maxConnectionAgeInNanos,
                                             long maxConnectionAgeGraceInNanos,
                                             boolean permitKeepAliveWithoutCalls,
                                             long permitKeepAliveTimeInNanos,
                                             int maxRstCount,
                                             long maxRstPeriodNanos,
                                             Attributes eagAttributes)
      • newHandler

        static NettyServerHandler newHandler​(io.netty.channel.ChannelPromise channelUnused,
                                             io.netty.handler.codec.http2.Http2FrameReader frameReader,
                                             io.netty.handler.codec.http2.Http2FrameWriter frameWriter,
                                             ServerTransportListener transportListener,
                                             java.util.List<? extends ServerStreamTracer.Factory> streamTracerFactories,
                                             TransportTracer transportTracer,
                                             int maxStreams,
                                             boolean autoFlowControl,
                                             int flowControlWindow,
                                             int maxHeaderListSize,
                                             int maxMessageSize,
                                             long keepAliveTimeInNanos,
                                             long keepAliveTimeoutInNanos,
                                             long maxConnectionIdleInNanos,
                                             long maxConnectionAgeInNanos,
                                             long maxConnectionAgeGraceInNanos,
                                             boolean permitKeepAliveWithoutCalls,
                                             long permitKeepAliveTimeInNanos,
                                             int maxRstCount,
                                             long maxRstPeriodNanos,
                                             Attributes eagAttributes,
                                             com.google.common.base.Ticker ticker)
      • connectionError

        @Nullable
        java.lang.Throwable connectionError()
      • handlerAdded

        public void handlerAdded​(io.netty.channel.ChannelHandlerContext ctx)
                          throws java.lang.Exception
        Specified by:
        handlerAdded in interface io.netty.channel.ChannelHandler
        Overrides:
        handlerAdded in class AbstractNettyHandler
        Throws:
        java.lang.Exception
      • onHeadersRead

        private void onHeadersRead​(io.netty.channel.ChannelHandlerContext ctx,
                                   int streamId,
                                   io.netty.handler.codec.http2.Http2Headers headers)
                            throws io.netty.handler.codec.http2.Http2Exception
        Throws:
        io.netty.handler.codec.http2.Http2Exception
      • getOrUpdateAuthority

        private java.lang.String getOrUpdateAuthority​(io.netty.util.AsciiString authority)
      • onDataRead

        private void onDataRead​(int streamId,
                                io.netty.buffer.ByteBuf data,
                                int padding,
                                boolean endOfStream)
                         throws io.netty.handler.codec.http2.Http2Exception
        Throws:
        io.netty.handler.codec.http2.Http2Exception
      • onRstStreamRead

        private void onRstStreamRead​(int streamId,
                                     long errorCode)
                              throws io.netty.handler.codec.http2.Http2Exception
        Throws:
        io.netty.handler.codec.http2.Http2Exception
      • onConnectionError

        protected void onConnectionError​(io.netty.channel.ChannelHandlerContext ctx,
                                         boolean outbound,
                                         java.lang.Throwable cause,
                                         io.netty.handler.codec.http2.Http2Exception http2Ex)
        Overrides:
        onConnectionError in class io.netty.handler.codec.http2.Http2ConnectionHandler
      • onStreamError

        protected void onStreamError​(io.netty.channel.ChannelHandlerContext ctx,
                                     boolean outbound,
                                     java.lang.Throwable cause,
                                     io.netty.handler.codec.http2.Http2Exception.StreamException http2Ex)
        Overrides:
        onStreamError in class io.netty.handler.codec.http2.Http2ConnectionHandler
      • setKeepAliveManagerForTest

        void setKeepAliveManagerForTest​(KeepAliveManager keepAliveManager)
      • channelInactive

        public void channelInactive​(io.netty.channel.ChannelHandlerContext ctx)
                             throws java.lang.Exception
        Handler for the Channel shutting down.
        Specified by:
        channelInactive in interface io.netty.channel.ChannelInboundHandler
        Overrides:
        channelInactive in class io.netty.handler.codec.http2.Http2ConnectionHandler
        Throws:
        java.lang.Exception
      • write

        public void write​(io.netty.channel.ChannelHandlerContext ctx,
                          java.lang.Object msg,
                          io.netty.channel.ChannelPromise promise)
                   throws java.lang.Exception
        Handler for commands sent from the stream.
        Specified by:
        write in interface io.netty.channel.ChannelOutboundHandler
        Overrides:
        write in class io.netty.handler.codec.http2.Http2ConnectionHandler
        Throws:
        java.lang.Exception
      • close

        public void close​(io.netty.channel.ChannelHandlerContext ctx,
                          io.netty.channel.ChannelPromise promise)
                   throws java.lang.Exception
        Specified by:
        close in interface io.netty.channel.ChannelOutboundHandler
        Overrides:
        close in class io.netty.handler.codec.http2.Http2ConnectionHandler
        Throws:
        java.lang.Exception
      • returnProcessedBytes

        void returnProcessedBytes​(io.netty.handler.codec.http2.Http2Stream http2Stream,
                                  int bytes)
        Returns the given processed bytes back to inbound flow control.
      • closeStreamWhenDone

        private void closeStreamWhenDone​(io.netty.channel.ChannelPromise promise,
                                         io.netty.handler.codec.http2.Http2Stream stream)
      • streamGone

        private static void streamGone​(int streamId,
                                       io.netty.channel.ChannelPromise promise)
      • sendGrpcFrame

        private void sendGrpcFrame​(io.netty.channel.ChannelHandlerContext ctx,
                                   SendGrpcFrameCommand cmd,
                                   io.netty.channel.ChannelPromise promise)
                            throws io.netty.handler.codec.http2.Http2Exception
        Sends the given gRPC frame to the client.
        Throws:
        io.netty.handler.codec.http2.Http2Exception
      • sendResponseHeaders

        private void sendResponseHeaders​(io.netty.channel.ChannelHandlerContext ctx,
                                         SendResponseHeadersCommand cmd,
                                         io.netty.channel.ChannelPromise promise)
                                  throws io.netty.handler.codec.http2.Http2Exception
        Sends the response headers to the client.
        Throws:
        io.netty.handler.codec.http2.Http2Exception
      • cancelStream

        private void cancelStream​(io.netty.channel.ChannelHandlerContext ctx,
                                  CancelServerStreamCommand cmd,
                                  io.netty.channel.ChannelPromise promise)
      • shouldCloseStreamWithHeaders

        private static boolean shouldCloseStreamWithHeaders​(CancelServerStreamCommand cmd,
                                                            io.netty.handler.codec.http2.Http2Connection conn)
      • gracefulClose

        private void gracefulClose​(io.netty.channel.ChannelHandlerContext ctx,
                                   GracefulServerCloseCommand msg,
                                   io.netty.channel.ChannelPromise promise)
                            throws java.lang.Exception
        Throws:
        java.lang.Exception
      • forcefulClose

        private void forcefulClose​(io.netty.channel.ChannelHandlerContext ctx,
                                   ForcefulCloseCommand msg,
                                   io.netty.channel.ChannelPromise promise)
                            throws java.lang.Exception
        Throws:
        java.lang.Exception
      • respondWithHttpError

        private void respondWithHttpError​(io.netty.channel.ChannelHandlerContext ctx,
                                          int streamId,
                                          int code,
                                          Status.Code statusCode,
                                          java.lang.String msg)
      • requireHttp2Stream

        private io.netty.handler.codec.http2.Http2Stream requireHttp2Stream​(int streamId)
      • serverStream

        private NettyServerStream.TransportState serverStream​(io.netty.handler.codec.http2.Http2Stream stream)
        Returns the server stream associated to the given HTTP/2 stream object.
      • newStreamException

        private io.netty.handler.codec.http2.Http2Exception newStreamException​(int streamId,
                                                                               java.lang.Throwable cause)