Search in sources :

Example 1 with CompleteReason

use of com.netflix.netty.common.HttpLifecycleChannelHandler.CompleteReason in project zuul by Netflix.

the class OriginResponseReceiver method userEventTriggered.

@Override
public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
    if (evt instanceof CompleteEvent) {
        final CompleteReason reason = ((CompleteEvent) evt).getReason();
        if ((reason != SESSION_COMPLETE) && (edgeProxy != null)) {
            LOG.error("Origin request completed with reason other than COMPLETE: {}, {}", reason.name(), ChannelUtils.channelInfoForLogging(ctx.channel()));
            final ZuulException ze = new ZuulException("CompleteEvent", reason.name(), true);
            edgeProxy.errorFromOrigin(ze);
        }
        // See channelWrite() where these vars are first set onto the channel.
        try {
            super.userEventTriggered(ctx, evt);
        } finally {
            postCompleteHook(ctx, evt);
        }
    } else if (evt instanceof SslHandshakeCompletionEvent && !((SslHandshakeCompletionEvent) evt).isSuccess()) {
        Throwable cause = ((SslHandshakeCompletionEvent) evt).cause();
        ctx.channel().attr(SSL_HANDSHAKE_UNSUCCESS_FROM_ORIGIN_THROWABLE).set(cause);
    } else if (evt instanceof IdleStateEvent) {
        if (edgeProxy != null) {
            LOG.error("Origin request received IDLE event: {}", ChannelUtils.channelInfoForLogging(ctx.channel()));
            edgeProxy.errorFromOrigin(new OutboundException(READ_TIMEOUT, edgeProxy.getRequestAttempts()));
        }
        super.userEventTriggered(ctx, evt);
    } else {
        super.userEventTriggered(ctx, evt);
    }
}
Also used : IdleStateEvent(io.netty.handler.timeout.IdleStateEvent) SslHandshakeCompletionEvent(io.netty.handler.ssl.SslHandshakeCompletionEvent) CompleteEvent(com.netflix.netty.common.HttpLifecycleChannelHandler.CompleteEvent) ZuulException(com.netflix.zuul.exception.ZuulException) CompleteReason(com.netflix.netty.common.HttpLifecycleChannelHandler.CompleteReason) OutboundException(com.netflix.zuul.exception.OutboundException)

Example 2 with CompleteReason

use of com.netflix.netty.common.HttpLifecycleChannelHandler.CompleteReason in project zuul by Netflix.

the class ClientRequestReceiver method userEventTriggered.

@Override
public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
    if (evt instanceof CompleteEvent) {
        final CompleteReason reason = ((CompleteEvent) evt).getReason();
        if (zuulRequest != null) {
            zuulRequest.getContext().cancel();
            zuulRequest.disposeBufferedBody();
            final CurrentPassport passport = CurrentPassport.fromSessionContext(zuulRequest.getContext());
            if ((passport != null) && (passport.findState(PassportState.OUT_RESP_LAST_CONTENT_SENT) == null)) {
                // Only log this state if the response does not seem to have completed normally.
                passport.add(PassportState.IN_REQ_CANCELLED);
            }
        }
        if (reason == CompleteReason.INACTIVE && zuulRequest != null) {
            // Client closed connection prematurely.
            StatusCategoryUtils.setStatusCategory(zuulRequest.getContext(), ZuulStatusCategory.FAILURE_CLIENT_CANCELLED);
        }
        if (reason == CompleteReason.PIPELINE_REJECT && zuulRequest != null) {
            StatusCategoryUtils.setStatusCategory(zuulRequest.getContext(), ZuulStatusCategory.FAILURE_CLIENT_PIPELINE_REJECT);
        }
        if (reason != SESSION_COMPLETE && zuulRequest != null) {
            final SessionContext zuulCtx = zuulRequest.getContext();
            if (clientRequest != null) {
                if (LOG.isInfoEnabled()) {
                    // thats ok, so don't log in that case.
                    if (!"HTTP/2".equals(zuulRequest.getProtocol())) {
                        LOG.debug("Client {} request UUID {} to {} completed with reason = {}, {}", clientRequest.method(), zuulCtx.getUUID(), clientRequest.uri(), reason.name(), ChannelUtils.channelInfoForLogging(ctx.channel()));
                    }
                }
            }
            if (zuulCtx.debugRequest()) {
                LOG.debug("Endpoint = {}", zuulCtx.getEndpoint());
                dumpDebugInfo(Debug.getRequestDebug(zuulCtx));
                dumpDebugInfo(Debug.getRoutingDebug(zuulCtx));
            }
        }
        if (zuulRequest == null) {
            Spectator.globalRegistry().counter("zuul.client.complete.null", "reason", String.valueOf(reason)).increment();
        }
        clientRequest = null;
        zuulRequest = null;
    }
    super.userEventTriggered(ctx, evt);
    if (evt instanceof CompleteEvent) {
        final Channel channel = ctx.channel();
        channel.attr(ATTR_ZUUL_REQ).set(null);
        channel.attr(ATTR_ZUUL_RESP).set(null);
        channel.attr(ATTR_LAST_CONTENT_RECEIVED).set(null);
    }
}
Also used : CurrentPassport(com.netflix.zuul.passport.CurrentPassport) Channel(io.netty.channel.Channel) CompleteEvent(com.netflix.netty.common.HttpLifecycleChannelHandler.CompleteEvent) SessionContext(com.netflix.zuul.context.SessionContext) CompleteReason(com.netflix.netty.common.HttpLifecycleChannelHandler.CompleteReason)

Aggregations

CompleteEvent (com.netflix.netty.common.HttpLifecycleChannelHandler.CompleteEvent)2 CompleteReason (com.netflix.netty.common.HttpLifecycleChannelHandler.CompleteReason)2 SessionContext (com.netflix.zuul.context.SessionContext)1 OutboundException (com.netflix.zuul.exception.OutboundException)1 ZuulException (com.netflix.zuul.exception.ZuulException)1 CurrentPassport (com.netflix.zuul.passport.CurrentPassport)1 Channel (io.netty.channel.Channel)1 SslHandshakeCompletionEvent (io.netty.handler.ssl.SslHandshakeCompletionEvent)1 IdleStateEvent (io.netty.handler.timeout.IdleStateEvent)1