From 86c7f37b87ba5e5a7a40221999e18afec5c690b1 Mon Sep 17 00:00:00 2001 From: Violeta Georgieva Date: Mon, 2 Dec 2024 14:09:53 +0200 Subject: [PATCH] Avoid using static exceptions for better debugging experience MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Before this change: ``` AbstractErrorWebExceptionHandler : [0861a0da-1] 500 Server Error for HTTP POST "/" reactor.netty.http.server.RequestTimeoutException: null ``` After this change: ``` AbstractErrorWebExceptionHandler : [dbf4f5fb-1] 500 Server Error for HTTP POST "/" reactor.netty.http.server.RequestTimeoutException: Request timed out Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: Error has been observed at the following site(s): *__checkpoint ⇢ Handler com.example.MyController#hello(ServerHttpRequest) [DispatcherHandler] *__checkpoint ⇢ HTTP POST "/" [ExceptionHandlingWebHandler] Original Stack Trace: ``` --- .../reactor/netty/http/server/HttpServerConfig.java | 2 +- .../netty/http/server/HttpServerOperations.java | 2 +- .../netty/http/server/RequestTimeoutException.java | 13 ++++++++----- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/reactor-netty-http/src/main/java/reactor/netty/http/server/HttpServerConfig.java b/reactor-netty-http/src/main/java/reactor/netty/http/server/HttpServerConfig.java index e6a0a3ccb9..5d6a8f89a8 100644 --- a/reactor-netty-http/src/main/java/reactor/netty/http/server/HttpServerConfig.java +++ b/reactor-netty-http/src/main/java/reactor/netty/http/server/HttpServerConfig.java @@ -1618,7 +1618,7 @@ final class RequestTimeoutTask implements Runnable { @SuppressWarnings("FutureReturnValueIgnored") public void run() { if (!requestAvailable) { - ctx.fireExceptionCaught(RequestTimeoutException.INSTANCE); + ctx.fireExceptionCaught(RequestTimeoutException.requestTimedOut()); //"FutureReturnValueIgnored" this is deliberate ctx.close(); } diff --git a/reactor-netty-http/src/main/java/reactor/netty/http/server/HttpServerOperations.java b/reactor-netty-http/src/main/java/reactor/netty/http/server/HttpServerOperations.java index 72cc473d5d..853ee6486b 100644 --- a/reactor-netty-http/src/main/java/reactor/netty/http/server/HttpServerOperations.java +++ b/reactor-netty-http/src/main/java/reactor/netty/http/server/HttpServerOperations.java @@ -1341,7 +1341,7 @@ final class RequestTimeoutTask implements Runnable { @SuppressWarnings("FutureReturnValueIgnored") public void run() { if (ctx.channel().isActive() && !(isInboundCancelled() || isInboundDisposed())) { - onInboundError(RequestTimeoutException.INSTANCE); + onInboundError(RequestTimeoutException.requestTimedOut()); //"FutureReturnValueIgnored" this is deliberate ctx.close(); } diff --git a/reactor-netty-http/src/main/java/reactor/netty/http/server/RequestTimeoutException.java b/reactor-netty-http/src/main/java/reactor/netty/http/server/RequestTimeoutException.java index 46865d4e5d..96b767ab5e 100644 --- a/reactor-netty-http/src/main/java/reactor/netty/http/server/RequestTimeoutException.java +++ b/reactor-netty-http/src/main/java/reactor/netty/http/server/RequestTimeoutException.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2023 VMware, Inc. or its affiliates, All Rights Reserved. + * Copyright (c) 2023-2024 VMware, Inc. or its affiliates, All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,17 +18,20 @@ import io.netty.channel.ChannelException; final class RequestTimeoutException extends ChannelException { - - static final RequestTimeoutException INSTANCE = new RequestTimeoutException(); + static final String REQUEST_TIMED_OUT = "Request timed out"; private static final long serialVersionUID = 422626851161276356L; - RequestTimeoutException() { - super(null, null, true); + RequestTimeoutException(String message) { + super(message); } @Override public synchronized Throwable fillInStackTrace() { return this; } + + static RequestTimeoutException requestTimedOut() { + return new RequestTimeoutException(REQUEST_TIMED_OUT); + } }