aboutsummaryrefslogtreecommitdiffstats
path: root/container-core/src/main
diff options
context:
space:
mode:
authorjonmv <venstad@gmail.com>2024-05-22 10:33:14 +0200
committerjonmv <venstad@gmail.com>2024-05-22 10:33:14 +0200
commit16a95dd84218e8bed8321798dcd06d31789dd008 (patch)
treec58c18e963610d3c93b409d36c65a5b4b20fdccb /container-core/src/main
parent656362675b248edaecfb12baec704bea384de451 (diff)
Override to 400 and 408 when client EoFs or times out
Diffstat (limited to 'container-core/src/main')
-rw-r--r--container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/AccessLogRequestLog.java3
-rw-r--r--container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/HttpRequestDispatch.java7
2 files changed, 7 insertions, 3 deletions
diff --git a/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/AccessLogRequestLog.java b/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/AccessLogRequestLog.java
index ccb41ca3055..94678c5ab3a 100644
--- a/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/AccessLogRequestLog.java
+++ b/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/AccessLogRequestLog.java
@@ -57,6 +57,7 @@ class AccessLogRequestLog extends AbstractLifeCycle implements org.eclipse.jetty
int peerPort = request.getRemotePort();
long startTime = request.getTimeStamp();
long endTime = System.currentTimeMillis();
+ Integer statusCodeOverride = (Integer) request.getAttribute(HttpRequestDispatch.STATUS_CODE_OVERRIDE);
builder.peerAddress(peerAddress)
.peerPort(peerPort)
.localPort(getLocalPort(request))
@@ -64,7 +65,7 @@ class AccessLogRequestLog extends AbstractLifeCycle implements org.eclipse.jetty
.duration(Duration.ofMillis(Math.max(0, endTime - startTime)))
.responseSize(response.getHttpChannel().getBytesWritten())
.requestSize(request.getHttpInput().getContentReceived())
- .statusCode(response.getCommittedMetaData().getStatus());
+ .statusCode(statusCodeOverride != null ? statusCodeOverride : response.getCommittedMetaData().getStatus());
addNonNullValue(builder, request.getMethod(), RequestLogEntry.Builder::httpMethod);
addNonNullValue(builder, request.getRequestURI(), RequestLogEntry.Builder::rawPath);
diff --git a/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/HttpRequestDispatch.java b/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/HttpRequestDispatch.java
index a2c2a5df4df..0ec01496cda 100644
--- a/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/HttpRequestDispatch.java
+++ b/container-core/src/main/java/com/yahoo/jdisc/http/server/jetty/HttpRequestDispatch.java
@@ -42,9 +42,10 @@ import static com.yahoo.jdisc.http.server.jetty.RequestUtils.getConnector;
*/
class HttpRequestDispatch {
- private static final Logger log = Logger.getLogger(HttpRequestDispatch.class.getName());
+ public static final String STATUS_CODE_OVERRIDE = "com.yahoo.jdisc.http.server.jetty.STATUS_CODE_OVERRIDE";
- private final static String CHARSET_ANNOTATION = ";charset=";
+ private static final Logger log = Logger.getLogger(HttpRequestDispatch.class.getName());
+ private static final String CHARSET_ANNOTATION = ";charset=";
private final JDiscContext jDiscContext;
private final Request jettyRequest;
@@ -129,10 +130,12 @@ class HttpRequestDispatch {
error,
() -> "Network connection was unexpectedly terminated: " + jettyRequest.getRequestURI());
metricReporter.prematurelyClosed();
+ asyncCtx.getRequest().setAttribute(STATUS_CODE_OVERRIDE, 400);
} else if (isErrorOfType(error, TimeoutException.class)) {
log.log(Level.FINE,
error,
() -> "Request/stream was timed out by Jetty: " + jettyRequest.getRequestURI());
+ asyncCtx.getRequest().setAttribute(STATUS_CODE_OVERRIDE, 408);
} else if (!isErrorOfType(error, OverloadException.class, BindingNotFoundException.class, RequestException.class)) {
log.log(Level.WARNING, "Request failed: " + jettyRequest.getRequestURI(), error);
}