summaryrefslogtreecommitdiffstats
path: root/container-core
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@oath.com>2018-01-31 16:53:10 +0100
committerBjørn Christian Seime <bjorncs@oath.com>2018-01-31 16:53:25 +0100
commit0ec38c1f398c809ddf242bfe23794433eb980706 (patch)
tree978cbf79f2e8d49faee6f7e79708df45bf5fb813 /container-core
parent7338b3fe9d4d20b4cce70fe7c8a8ce527fa232d6 (diff)
Ensure timeouts in LoggingRequestHandler are logged
Diffstat (limited to 'container-core')
-rw-r--r--container-core/src/main/java/com/yahoo/container/jdisc/LoggingRequestHandler.java21
1 files changed, 20 insertions, 1 deletions
diff --git a/container-core/src/main/java/com/yahoo/container/jdisc/LoggingRequestHandler.java b/container-core/src/main/java/com/yahoo/container/jdisc/LoggingRequestHandler.java
index 1c2d28c754f..fe11bd42a01 100644
--- a/container-core/src/main/java/com/yahoo/container/jdisc/LoggingRequestHandler.java
+++ b/container-core/src/main/java/com/yahoo/container/jdisc/LoggingRequestHandler.java
@@ -7,9 +7,11 @@ import com.yahoo.container.http.AccessLogUtil;
import com.yahoo.container.logging.AccessLog;
import com.yahoo.container.logging.AccessLogEntry;
import com.yahoo.jdisc.Metric;
+import com.yahoo.jdisc.Request;
import com.yahoo.jdisc.Response;
import com.yahoo.jdisc.handler.CompletionHandler;
import com.yahoo.jdisc.handler.ContentChannel;
+import com.yahoo.jdisc.handler.ResponseHandler;
import com.yahoo.jdisc.http.server.jetty.AccessLoggingRequestHandler;
import com.yahoo.log.LogLevel;
import com.yahoo.yolean.Exceptions;
@@ -20,6 +22,8 @@ import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.util.Optional;
import java.util.concurrent.Executor;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicReference;
/**
* A request handler base class extending the features of
@@ -30,6 +34,8 @@ import java.util.concurrent.Executor;
public abstract class LoggingRequestHandler extends ThreadedHttpRequestHandler {
private AccessLog accessLog;
+ private final AtomicReference<LoggingHandler> loggingHandler = new AtomicReference<>();
+ private final AtomicBoolean hasLogged = new AtomicBoolean(false);
public LoggingRequestHandler(Executor executor, AccessLog accessLog) {
this(executor, accessLog, null);
@@ -89,7 +95,9 @@ public abstract class LoggingRequestHandler extends ThreadedHttpRequestHandler {
HttpResponse response,
HttpRequest httpRequest,
ContentChannelOutputStream rendererWiring) {
- return new LoggingHandler(startTime, renderStartTime, httpRequest, response, rendererWiring);
+ LoggingHandler loggingHandler = new LoggingHandler(startTime, renderStartTime, httpRequest, response, rendererWiring);
+ this.loggingHandler.set(loggingHandler);
+ return loggingHandler;
}
private static String getClientIP(com.yahoo.jdisc.http.HttpRequest httpRequest) {
@@ -232,6 +240,9 @@ public abstract class LoggingRequestHandler extends ThreadedHttpRequestHandler {
}
private void writeToLogs(long endTime) {
+ if (hasLogged.getAndSet(true)) {
+ return;
+ }
com.yahoo.jdisc.http.HttpRequest jdiscRequest = httpRequest.getJDiscRequest();
logTimes(startTime,
@@ -303,4 +314,12 @@ public abstract class LoggingRequestHandler extends ThreadedHttpRequestHandler {
}
}
+ @Override
+ public void handleTimeout(Request request, ResponseHandler responseHandler) {
+ LoggingHandler loggingHandler = this.loggingHandler.get();
+ if (loggingHandler != null) {
+ loggingHandler.writeToLogs(System.currentTimeMillis());
+ }
+ super.handleTimeout(request, responseHandler);
+ }
}