From d9e20a94c5680cc90d31f4eeee5b3e7fee410495 Mon Sep 17 00:00:00 2001 From: Bjørn Christian Seime Date: Thu, 3 Sep 2020 16:23:26 +0200 Subject: Inject container threadpool directly to FeedHandler and RestApi --- .../yahoo/document/restapi/resource/RestApi.java | 23 +++++++++++++--------- .../com/yahoo/vespa/http/server/FeedHandler.java | 13 ++++++++---- .../com/yahoo/vespa/http/server/FeedHandlerV3.java | 16 ++++++++------- .../com/yahoo/feedhandler/v3/FeedTesterV3.java | 4 +++- 4 files changed, 35 insertions(+), 21 deletions(-) diff --git a/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/resource/RestApi.java b/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/resource/RestApi.java index cf33b6033cd..6000026580a 100644 --- a/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/resource/RestApi.java +++ b/vespaclient-container-plugin/src/main/java/com/yahoo/document/restapi/resource/RestApi.java @@ -3,11 +3,11 @@ package com.yahoo.document.restapi.resource; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.google.inject.Inject; - import com.fasterxml.jackson.databind.node.ObjectNode; +import com.google.inject.Inject; import com.yahoo.cloud.config.ClusterListConfig; import com.yahoo.container.handler.ThreadpoolConfig; +import com.yahoo.container.handler.threadpool.ContainerThreadPool; import com.yahoo.container.jdisc.HttpRequest; import com.yahoo.container.jdisc.HttpResponse; import com.yahoo.container.jdisc.LoggingRequestHandler; @@ -15,7 +15,6 @@ import com.yahoo.container.logging.AccessLog; import com.yahoo.document.DocumentTypeManager; import com.yahoo.document.TestAndSetCondition; import com.yahoo.document.config.DocumentmanagerConfig; - import com.yahoo.document.json.SingleDocumentParser; import com.yahoo.document.restapi.OperationHandler; import com.yahoo.document.restapi.OperationHandlerImpl; @@ -27,11 +26,11 @@ import com.yahoo.document.select.parser.ParseException; import com.yahoo.documentapi.messagebus.MessageBusDocumentAccess; import com.yahoo.documentapi.messagebus.MessageBusParams; import com.yahoo.documentapi.messagebus.loadtypes.LoadTypeSet; -import java.util.logging.Level; +import com.yahoo.jdisc.Metric; import com.yahoo.metrics.simple.MetricReceiver; import com.yahoo.text.Text; -import com.yahoo.vespa.config.content.LoadTypeConfig; import com.yahoo.vespa.config.content.AllClustersBucketSpacesConfig; +import com.yahoo.vespa.config.content.LoadTypeConfig; import com.yahoo.vespaclient.ClusterDef; import com.yahoo.vespaclient.ClusterList; import com.yahoo.vespaxmlparser.DocumentFeedOperation; @@ -46,6 +45,7 @@ import java.util.List; import java.util.Optional; import java.util.concurrent.Executor; import java.util.concurrent.atomic.AtomicInteger; +import java.util.logging.Level; import static com.yahoo.jdisc.Response.Status.BAD_REQUEST; @@ -77,11 +77,16 @@ public class RestApi extends LoggingRequestHandler { private final AtomicInteger threadsAvailableForApi; @Inject - public RestApi(LoggingRequestHandler.Context parentCtx, DocumentmanagerConfig documentManagerConfig, - LoadTypeConfig loadTypeConfig, ThreadpoolConfig threadpoolConfig, + public RestApi(ContainerThreadPool threadpool, + AccessLog accessLog, + Metric metric, + DocumentmanagerConfig documentManagerConfig, + LoadTypeConfig loadTypeConfig, + ThreadpoolConfig threadpoolConfig, AllClustersBucketSpacesConfig bucketSpacesConfig, - ClusterListConfig clusterListConfig, MetricReceiver metricReceiver) { - super(parentCtx); + ClusterListConfig clusterListConfig, + MetricReceiver metricReceiver) { + super(threadpool.executor(), accessLog, metric); MessageBusParams params = new MessageBusParams(new LoadTypeSet(loadTypeConfig)); params.setDocumentmanagerConfig(documentManagerConfig); this.operationHandler = new OperationHandlerImpl(new MessageBusDocumentAccess(params), diff --git a/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/FeedHandler.java b/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/FeedHandler.java index 1df0ce3594b..7776c8fa34c 100644 --- a/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/FeedHandler.java +++ b/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/FeedHandler.java @@ -3,12 +3,15 @@ package com.yahoo.vespa.http.server; import com.yahoo.collections.Tuple2; import com.yahoo.container.handler.ThreadpoolConfig; +import com.yahoo.container.handler.threadpool.ContainerThreadPool; import com.yahoo.container.jdisc.HttpRequest; import com.yahoo.container.jdisc.HttpResponse; import com.yahoo.container.jdisc.LoggingRequestHandler; import com.yahoo.container.jdisc.messagebus.SessionCache; +import com.yahoo.container.logging.AccessLog; import com.yahoo.document.config.DocumentmanagerConfig; import com.yahoo.documentapi.metrics.DocumentApiMetrics; +import com.yahoo.jdisc.Metric; import com.yahoo.messagebus.ReplyHandler; import com.yahoo.metrics.simple.MetricReceiver; import com.yahoo.vespa.http.client.core.Headers; @@ -39,15 +42,17 @@ public class FeedHandler extends LoggingRequestHandler { private final DocumentApiMetrics metricsHelper; @Inject - public FeedHandler(LoggingRequestHandler.Context parentCtx, + public FeedHandler(ContainerThreadPool threadpool, + Metric metric, + AccessLog accessLog, DocumentmanagerConfig documentManagerConfig, SessionCache sessionCache, ThreadpoolConfig threadpoolConfig, MetricReceiver metricReceiver) throws Exception { - super(parentCtx); + super(threadpool.executor(), accessLog, metric); metricsHelper = new DocumentApiMetrics(metricReceiver, "vespa.http.server"); - feedHandlerV3 = new FeedHandlerV3(parentCtx, documentManagerConfig, sessionCache, threadpoolConfig, metricsHelper); - feedReplyHandler = new FeedReplyReader(parentCtx.getMetric(), metricsHelper); + feedHandlerV3 = new FeedHandlerV3(threadpool.executor(), metric, accessLog, documentManagerConfig, sessionCache, threadpoolConfig, metricsHelper); + feedReplyHandler = new FeedReplyReader(metric, metricsHelper); } private Tuple2 checkProtocolVersion(HttpRequest request) { diff --git a/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/FeedHandlerV3.java b/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/FeedHandlerV3.java index a932ca935e0..9bd48b707f8 100644 --- a/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/FeedHandlerV3.java +++ b/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/FeedHandlerV3.java @@ -7,26 +7,26 @@ import com.yahoo.container.jdisc.HttpRequest; import com.yahoo.container.jdisc.HttpResponse; import com.yahoo.container.jdisc.LoggingRequestHandler; import com.yahoo.container.jdisc.messagebus.SessionCache; +import com.yahoo.container.logging.AccessLog; import com.yahoo.document.DocumentTypeManager; import com.yahoo.document.config.DocumentmanagerConfig; import com.yahoo.documentapi.metrics.DocumentApiMetrics; import com.yahoo.jdisc.Metric; import com.yahoo.jdisc.ReferencedResource; -import java.util.logging.Level; import com.yahoo.messagebus.ReplyHandler; import com.yahoo.messagebus.SourceSessionParams; import com.yahoo.messagebus.shared.SharedSourceSession; import com.yahoo.vespa.http.client.core.Headers; import com.yahoo.yolean.Exceptions; -import java.time.Duration; -import java.time.Instant; import java.util.HashMap; import java.util.Iterator; import java.util.Map; +import java.util.concurrent.Executor; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; +import java.util.logging.Level; import java.util.logging.Logger; /** @@ -48,18 +48,20 @@ public class FeedHandlerV3 extends LoggingRequestHandler { private final AtomicInteger threadsAvailableForFeeding; private static final Logger log = Logger.getLogger(FeedHandlerV3.class.getName()); - public FeedHandlerV3(LoggingRequestHandler.Context parentCtx, + public FeedHandlerV3(Executor executor, + Metric metric, + AccessLog accessLog, DocumentmanagerConfig documentManagerConfig, SessionCache sessionCache, ThreadpoolConfig threadpoolConfig, DocumentApiMetrics metricsHelper) { - super(parentCtx); + super(executor, accessLog, metric); docTypeManager = new DocumentTypeManager(documentManagerConfig); this.sessionCache = sessionCache; - feedReplyHandler = new FeedReplyReader(parentCtx.getMetric(), metricsHelper); + feedReplyHandler = new FeedReplyReader(metric, metricsHelper); cron = new ScheduledThreadPoolExecutor(1, ThreadFactoryFactory.getThreadFactory("feedhandlerv3.cron")); cron.scheduleWithFixedDelay(this::removeOldClients, 16, 11, TimeUnit.MINUTES); - this.metric = parentCtx.getMetric(); + this.metric = metric; // 40% of the threads can be blocking on feeding before we deny requests. if (threadpoolConfig != null) { threadsAvailableForFeeding = new AtomicInteger(Math.max((int) (0.4 * threadpoolConfig.maxthreads()), 1)); diff --git a/vespaclient-container-plugin/src/test/java/com/yahoo/feedhandler/v3/FeedTesterV3.java b/vespaclient-container-plugin/src/test/java/com/yahoo/feedhandler/v3/FeedTesterV3.java index 1efa8129cdb..a6cc52e8aea 100644 --- a/vespaclient-container-plugin/src/test/java/com/yahoo/feedhandler/v3/FeedTesterV3.java +++ b/vespaclient-container-plugin/src/test/java/com/yahoo/feedhandler/v3/FeedTesterV3.java @@ -120,7 +120,9 @@ public class FeedTesterV3 { Executor threadPool = Executors.newCachedThreadPool(); DocumentmanagerConfig docMan = new DocumentmanagerConfig(new DocumentmanagerConfig.Builder().enablecompression(true)); FeedHandlerV3 feedHandlerV3 = new FeedHandlerV3( - new FeedHandlerV3.Context(threadPool, AccessLog.voidAccessLog(), metric), + threadPool, + metric, + AccessLog.voidAccessLog(), docMan, null /* session cache */, threadPoolConfig /* thread pool config */, -- cgit v1.2.3