summaryrefslogtreecommitdiffstats
path: root/container-core
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@yahoo-inc.com>2016-10-25 10:06:20 +0200
committerJon Bratseth <bratseth@yahoo-inc.com>2016-10-25 10:06:20 +0200
commit2ee87c18e47fd10392440f64aec12a00f52b8376 (patch)
treed2cf98f36f2a583f75b6641bceb41d9e7065c604 /container-core
parentd0793fd0709c6e4a726ca9c94f5048537c1847e3 (diff)
Use a dedicated thread for VIP status
Also, various nonfunctiuonal changes.
Diffstat (limited to 'container-core')
-rw-r--r--container-core/src/main/java/com/yahoo/container/handler/ThreadPoolProvider.java2
-rw-r--r--container-core/src/main/java/com/yahoo/container/handler/VipStatusHandler.java18
-rw-r--r--container-core/src/main/java/com/yahoo/container/jdisc/ThreadedHttpRequestHandler.java4
3 files changed, 19 insertions, 5 deletions
diff --git a/container-core/src/main/java/com/yahoo/container/handler/ThreadPoolProvider.java b/container-core/src/main/java/com/yahoo/container/handler/ThreadPoolProvider.java
index 474c2f1a4a2..bd8e9e1601d 100644
--- a/container-core/src/main/java/com/yahoo/container/handler/ThreadPoolProvider.java
+++ b/container-core/src/main/java/com/yahoo/container/handler/ThreadPoolProvider.java
@@ -22,7 +22,7 @@ import com.yahoo.jdisc.Metric;
* A configurable thread pool provider. This provides the worker threads used for normal request processing.
* Request an Executor injected in your component constructor if you want to use it.
*
- * @author <a href="mailto:steinar@yahoo-inc.com">Steinar Knutsen</a>
+ * @author Steinar Knutsen
* @author baldersheim
* @author bratseth
*/
diff --git a/container-core/src/main/java/com/yahoo/container/handler/VipStatusHandler.java b/container-core/src/main/java/com/yahoo/container/handler/VipStatusHandler.java
index f36cd77c0b7..7a244bc94cb 100644
--- a/container-core/src/main/java/com/yahoo/container/handler/VipStatusHandler.java
+++ b/container-core/src/main/java/com/yahoo/container/handler/VipStatusHandler.java
@@ -7,6 +7,9 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.concurrent.Executor;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
import java.util.logging.Logger;
import com.google.inject.Inject;
@@ -23,7 +26,8 @@ import com.yahoo.vespa.defaults.Defaults;
* Transmit status to VIP from file or memory. Bind this to
* "http://{@literal *}/status.html" to serve VIP status requests.
*
- * @author <a href="mailto:steinar@yahoo-inc.com">Steinar Knutsen</a>
+ * @author Steinar Knutsen
+ * @author bratseth
*/
public final class VipStatusHandler extends ThreadedHttpRequestHandler {
@@ -160,13 +164,23 @@ public final class VipStatusHandler extends ThreadedHttpRequestHandler {
@Inject
public VipStatusHandler(Executor executor, VipStatusConfig vipConfig, Metric metric, VipStatus vipStatus) {
- super(executor, metric);
+ super(createDedicatedThreadExecutor(), metric);
this.accessDisk = vipConfig.accessdisk();
this.statusFile = new File(Defaults.getDefaults().underVespaHome(vipConfig.statusfile()));
this.noSearchBackendsImpliesOutOfService = vipConfig.noSearchBackendsImpliesOutOfService();
this.vipStatus = vipStatus;
}
+ /**
+ * Use a dedicated thread pool to avoid returning an error to VIPs when the regular thread pool is out of capacity.
+ * One thread should be enough for status handling - otherwise something else is completely wrong,
+ * in which case this will eventually start returning a 503 (due to work rejection) as the bounded
+ * queue will fill up
+ */
+ private static Executor createDedicatedThreadExecutor() {
+ return new ThreadPoolExecutor(1, 1, 0, TimeUnit.SECONDS, new LinkedBlockingQueue<>(100));
+ }
+
@Override
public HttpResponse handle(HttpRequest request) {
if (metric != null)
diff --git a/container-core/src/main/java/com/yahoo/container/jdisc/ThreadedHttpRequestHandler.java b/container-core/src/main/java/com/yahoo/container/jdisc/ThreadedHttpRequestHandler.java
index 6600a36f9db..07af6d45aed 100644
--- a/container-core/src/main/java/com/yahoo/container/jdisc/ThreadedHttpRequestHandler.java
+++ b/container-core/src/main/java/com/yahoo/container/jdisc/ThreadedHttpRequestHandler.java
@@ -24,14 +24,14 @@ import java.util.logging.Logger;
* {@link HttpResponse#render(java.io.OutputStream)} method.
*
* @author hmusum
- * @author <a href="mailto:steinar@yahoo-inc.com">Steinar Knutsen</a>
+ * @author Steinar Knutsen
* @author bratseth
* @since 5.1
*/
public abstract class ThreadedHttpRequestHandler extends ThreadedRequestHandler {
public static final String CONTENT_TYPE = "Content-Type";
- public static final String DATE = "Date";
+ public static final String DATE = "Date"; // TODO: Remove on Vespa 7
private static final String RENDERING_ERRORS = "rendering_errors";
/** Logger for subclasses */