From e14a5d3288d4bb425d6615146c914ae90e7f2003 Mon Sep 17 00:00:00 2001 From: Gibeom Gwon Date: Mon, 12 Jan 2026 21:50:23 +0900 Subject: [PATCH] Fix requestEndTime is set after send response when empty content request --- .../common/logging/DefaultRequestLog.java | 24 +++++++++++- .../common/logging/RequestLogBuilder.java | 12 ++++++ .../EmptyContentDecodedHttpRequest.java | 3 ++ .../EmptyContentDecodedHttpRequestTest.java | 37 +++++++++++++++++++ 4 files changed, 75 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/com/linecorp/armeria/common/logging/DefaultRequestLog.java b/core/src/main/java/com/linecorp/armeria/common/logging/DefaultRequestLog.java index 46692b22837..2029afc2f91 100644 --- a/core/src/main/java/com/linecorp/armeria/common/logging/DefaultRequestLog.java +++ b/core/src/main/java/com/linecorp/armeria/common/logging/DefaultRequestLog.java @@ -1118,6 +1118,25 @@ public int currentAttempt() { return currentAttempt; } + @Override + public void requestEnd() { + requestEnd0(System.nanoTime()); + } + + @Override + public void requestEnd(long requestEndTimeNanos) { + requestEnd0(requestEndTimeNanos); + } + + private void requestEnd0(long requestEndTimeNanos) { + if (isAvailable(REQUEST_END_TIME)) { + return; + } + + this.requestEndTimeNanos = requestEndTimeNanos; + updateFlags(REQUEST_END_TIME); + } + @Override public void endRequest() { endRequest0(null); @@ -1183,7 +1202,10 @@ private void endRequest0(@Nullable Throwable requestCause, long requestEndTimeNa setNamesIfAbsent(); } - this.requestEndTimeNanos = requestEndTimeNanos; + // Set requestEndTimeNanos if it is not already set + if (!isAvailable(REQUEST_END_TIME)) { + this.requestEndTimeNanos = requestEndTimeNanos; + } setRequestCause(requestCause); updateFlags(flags); diff --git a/core/src/main/java/com/linecorp/armeria/common/logging/RequestLogBuilder.java b/core/src/main/java/com/linecorp/armeria/common/logging/RequestLogBuilder.java index ba0ad665fb8..f74ad06798f 100644 --- a/core/src/main/java/com/linecorp/armeria/common/logging/RequestLogBuilder.java +++ b/core/src/main/java/com/linecorp/armeria/common/logging/RequestLogBuilder.java @@ -189,6 +189,18 @@ void session(@Nullable Channel channel, SessionProtocol sessionProtocol, @Nullab @UnstableApi void requestCause(Throwable cause); + /** + * Sets the {@link RequestLog#requestEndTimeNanos()}. + */ + @UnstableApi + void requestEnd(); + + /** + * Sets the {@link RequestLog#requestEndTimeNanos()} with the specified timestamp. + */ + @UnstableApi + void requestEnd(long requestEndTimeNanos); + /** * Finishes the collection of the {@link Request} information. This method sets the following properties: *