Package io.grpc.netty
Class NettyServerHandler
- java.lang.Object
-
- io.netty.channel.ChannelHandlerAdapter
-
- io.netty.channel.ChannelInboundHandlerAdapter
-
- io.netty.handler.codec.ByteToMessageDecoder
-
- io.netty.handler.codec.http2.Http2ConnectionHandler
-
- io.grpc.netty.GrpcHttp2ConnectionHandler
-
- io.grpc.netty.AbstractNettyHandler
-
- io.grpc.netty.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.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private classNettyServerHandler.FrameListenerprivate classNettyServerHandler.GracefulShutdownprivate classNettyServerHandler.KeepAlivePingerprivate static classNettyServerHandler.ServerChannelLoggerprivate static classNettyServerHandler.WriteMonitoringFrameWriter-
Nested classes/interfaces inherited from class io.grpc.netty.AbstractNettyHandler
AbstractNettyHandler.FlowControlPinger, AbstractNettyHandler.PingLimiter
-
-
Field Summary
Fields Modifier and Type Field Description private AttributesattributesCompleted attributes produced by transportReady.private java.lang.ThrowableconnectionErrorprivate static booleanDISABLE_CONNECTION_HEADER_CHECKTemporary workaround for #8674.private AttributeseagAttributes(package private) static longGRACEFUL_SHUTDOWN_PINGprivate static longGRACEFUL_SHUTDOWN_PING_TIMEOUT_NANOSprivate NettyServerHandler.GracefulShutdowngracefulShutdownprivate static longKEEPALIVE_PINGprivate KeepAliveEnforcerkeepAliveEnforcerprivate KeepAliveManagerkeepAliveManagerprivate longkeepAliveTimeInNanosprivate longkeepAliveTimeoutInNanosprivate io.netty.util.AsciiStringlastKnownAuthorityprivate longlastRstNanoTimeprivate static java.util.logging.Loggerloggerprivate longmaxConnectionAgeGraceInNanosprivate longmaxConnectionAgeInNanosprivate java.util.concurrent.ScheduledFuture<?>maxConnectionAgeMonitorprivate MaxConnectionIdleManagermaxConnectionIdleManagerprivate intmaxMessageSizeprivate intmaxRstCountprivate longmaxRstPeriodNanosprivate AttributesnegotiationAttributesIncomplete attributes produced by negotiator.private intrstCountprivate InternalChannelz.SecuritysecurityInfoprivate WriteQueueserverWriteQueueprivate io.netty.handler.codec.http2.Http2Connection.PropertyKeystreamKeyprivate java.util.List<? extends ServerStreamTracer.Factory>streamTracerFactoriesprivate booleanteWarningLoggedprivate com.google.common.base.Tickertickerprivate ServerTransportListenertransportListenerprivate TransportTracertransportTracer-
Fields inherited from class io.grpc.netty.GrpcHttp2ConnectionHandler
ADAPTIVE_CUMULATOR, ADAPTIVE_CUMULATOR_COMPOSE_MIN_SIZE_DEFAULT, channelUnused
-
-
Constructor Summary
Constructors Modifier Constructor Description privateNettyServerHandler(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 Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description private voidcancelStream(io.netty.channel.ChannelHandlerContext ctx, CancelServerStreamCommand cmd, io.netty.channel.ChannelPromise promise)voidchannelInactive(io.netty.channel.ChannelHandlerContext ctx)Handler for the Channel shutting down.voidclose(io.netty.channel.ChannelHandlerContext ctx, io.netty.channel.ChannelPromise promise)private voidcloseStreamWhenDone(io.netty.channel.ChannelPromise promise, io.netty.handler.codec.http2.Http2Stream stream)(package private) java.lang.ThrowableconnectionError()private voidforcefulClose(io.netty.channel.ChannelHandlerContext ctx, ForcefulCloseCommand msg, io.netty.channel.ChannelPromise promise)AttributesgetEagAttributes()Get the attributes of the EquivalentAddressGroup used to create this transport.(package private) KeepAliveManagergetKeepAliveManagerForTest()private java.lang.StringgetOrUpdateAuthority(io.netty.util.AsciiString authority)(package private) InternalChannelz.SecuritygetSecurityInfo()(package private) WriteQueuegetWriteQueue()private voidgracefulClose(io.netty.channel.ChannelHandlerContext ctx, GracefulServerCloseCommand msg, io.netty.channel.ChannelPromise promise)voidhandleProtocolNegotiationCompleted(Attributes attrs, InternalChannelz.Security securityInfo)Triggered on protocol negotiation completion.voidhandlerAdded(io.netty.channel.ChannelHandlerContext ctx)(package private) static NettyServerHandlernewHandler(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)(package private) static NettyServerHandlernewHandler(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)private io.netty.handler.codec.http2.Http2ExceptionnewStreamException(int streamId, java.lang.Throwable cause)protected voidonConnectionError(io.netty.channel.ChannelHandlerContext ctx, boolean outbound, java.lang.Throwable cause, io.netty.handler.codec.http2.Http2Exception http2Ex)private voidonDataRead(int streamId, io.netty.buffer.ByteBuf data, int padding, boolean endOfStream)private voidonHeadersRead(io.netty.channel.ChannelHandlerContext ctx, int streamId, io.netty.handler.codec.http2.Http2Headers headers)private voidonRstStreamRead(int streamId, long errorCode)protected voidonStreamError(io.netty.channel.ChannelHandlerContext ctx, boolean outbound, java.lang.Throwable cause, io.netty.handler.codec.http2.Http2Exception.StreamException http2Ex)private io.netty.handler.codec.http2.Http2StreamrequireHttp2Stream(int streamId)private voidrespondWithHttpError(io.netty.channel.ChannelHandlerContext ctx, int streamId, int code, Status.Code statusCode, java.lang.String msg)(package private) voidreturnProcessedBytes(io.netty.handler.codec.http2.Http2Stream http2Stream, int bytes)Returns the given processed bytes back to inbound flow control.private voidsendGrpcFrame(io.netty.channel.ChannelHandlerContext ctx, SendGrpcFrameCommand cmd, io.netty.channel.ChannelPromise promise)Sends the given gRPC frame to the client.private voidsendResponseHeaders(io.netty.channel.ChannelHandlerContext ctx, SendResponseHeadersCommand cmd, io.netty.channel.ChannelPromise promise)Sends the response headers to the client.private NettyServerStream.TransportStateserverStream(io.netty.handler.codec.http2.Http2Stream stream)Returns the server stream associated to the given HTTP/2 stream object.(package private) voidsetKeepAliveManagerForTest(KeepAliveManager keepAliveManager)private static booleanshouldCloseStreamWithHeaders(CancelServerStreamCommand cmd, io.netty.handler.codec.http2.Http2Connection conn)private static voidstreamGone(int streamId, io.netty.channel.ChannelPromise promise)private static java.util.logging.LeveltoJavaLogLevel(ChannelLogger.ChannelLogLevel level)voidwrite(io.netty.channel.ChannelHandlerContext ctx, java.lang.Object msg, io.netty.channel.ChannelPromise promise)Handler for commands sent from the stream.-
Methods inherited from class io.grpc.netty.AbstractNettyHandler
channelActive, ctx, exceptionCaught, flowControlPing, setAutoTuneFlowControl
-
Methods inherited from class io.grpc.netty.GrpcHttp2ConnectionHandler
getAuthority, getNegotiationLogger, handleProtocolNegotiationCompleted, notifyUnused, usingPre4_1_111_Netty
-
Methods inherited from class io.netty.handler.codec.http2.Http2ConnectionHandler
bind, channelReadComplete, channelWritabilityChanged, closeStream, closeStreamLocal, closeStreamRemote, connect, connection, decode, decoder, deregister, disconnect, encoder, flush, frameWriter, goAway, gracefulShutdownTimeoutMillis, gracefulShutdownTimeoutMillis, handlerRemoved0, handleServerHeaderDecodeSizeError, isGracefulShutdownComplete, onError, onHttpClientUpgrade, onHttpServerUpgrade, read, resetStream
-
Methods inherited from class io.netty.handler.codec.ByteToMessageDecoder
actualReadableBytes, callDecode, channelRead, decodeLast, discardSomeReadBytes, handlerRemoved, internalBuffer, isSingleDecode, setCumulator, setDiscardAfterReads, setSingleDecode, userEventTriggered
-
Methods inherited from class io.netty.channel.ChannelInboundHandlerAdapter
channelRegistered, channelUnregistered
-
-
-
-
Field Detail
-
logger
private static final java.util.logging.Logger logger
-
KEEPALIVE_PING
private static final long KEEPALIVE_PING
- See Also:
- Constant Field Values
-
GRACEFUL_SHUTDOWN_PING
static final long GRACEFUL_SHUTDOWN_PING
- See Also:
- Constant Field Values
-
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
-
transportListener
private final ServerTransportListener transportListener
-
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
-
streamTracerFactories
private final java.util.List<? extends ServerStreamTracer.Factory> streamTracerFactories
-
transportTracer
private final TransportTracer transportTracer
-
keepAliveEnforcer
private final KeepAliveEnforcer keepAliveEnforcer
-
eagAttributes
private final Attributes eagAttributes
-
ticker
private final com.google.common.base.Ticker ticker
-
negotiationAttributes
private Attributes negotiationAttributes
Incomplete attributes produced by negotiator.
-
securityInfo
private InternalChannelz.Security securityInfo
-
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
-
keepAliveManager
@CheckForNull private KeepAliveManager keepAliveManager
-
maxConnectionIdleManager
@CheckForNull private MaxConnectionIdleManager maxConnectionIdleManager
-
maxConnectionAgeMonitor
@CheckForNull private java.util.concurrent.ScheduledFuture<?> maxConnectionAgeMonitor
-
gracefulShutdown
@CheckForNull private NettyServerHandler.GracefulShutdown gracefulShutdown
-
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:
handlerAddedin interfaceio.netty.channel.ChannelHandler- Overrides:
handlerAddedin classAbstractNettyHandler- 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:
onConnectionErrorin classio.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:
onStreamErrorin classio.netty.handler.codec.http2.Http2ConnectionHandler
-
handleProtocolNegotiationCompleted
public void handleProtocolNegotiationCompleted(Attributes attrs, InternalChannelz.Security securityInfo)
Description copied from class:GrpcHttp2ConnectionHandlerTriggered on protocol negotiation completion.It must me called after negotiation is completed but before given handler is added to the channel.
- Overrides:
handleProtocolNegotiationCompletedin classGrpcHttp2ConnectionHandler- Parameters:
attrs- arbitrary attributes passed after protocol negotiation (eg. SSLSession).securityInfo- informs channelz about the security protocol.
-
getEagAttributes
public Attributes getEagAttributes()
Description copied from class:GrpcHttp2ConnectionHandlerGet the attributes of the EquivalentAddressGroup used to create this transport.- Overrides:
getEagAttributesin classGrpcHttp2ConnectionHandler
-
getSecurityInfo
InternalChannelz.Security getSecurityInfo()
-
getKeepAliveManagerForTest
KeepAliveManager getKeepAliveManagerForTest()
-
setKeepAliveManagerForTest
void setKeepAliveManagerForTest(KeepAliveManager keepAliveManager)
-
channelInactive
public void channelInactive(io.netty.channel.ChannelHandlerContext ctx) throws java.lang.ExceptionHandler for the Channel shutting down.- Specified by:
channelInactivein interfaceio.netty.channel.ChannelInboundHandler- Overrides:
channelInactivein classio.netty.handler.codec.http2.Http2ConnectionHandler- Throws:
java.lang.Exception
-
getWriteQueue
WriteQueue getWriteQueue()
-
write
public void write(io.netty.channel.ChannelHandlerContext ctx, java.lang.Object msg, io.netty.channel.ChannelPromise promise) throws java.lang.ExceptionHandler for commands sent from the stream.- Specified by:
writein interfaceio.netty.channel.ChannelOutboundHandler- Overrides:
writein classio.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:
closein interfaceio.netty.channel.ChannelOutboundHandler- Overrides:
closein classio.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.Http2ExceptionSends 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.Http2ExceptionSends 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)
-
toJavaLogLevel
private static java.util.logging.Level toJavaLogLevel(ChannelLogger.ChannelLogLevel level)
-
-