aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-03-24 10:46:42 +0100
committerHenning Baldersheim <balder@yahoo-inc.com>2022-03-24 10:46:42 +0100
commit8079e630502119474f8cdd4b265f4188b8dd4f63 (patch)
tree1907d3bcba3f35e5e6e46bc66138a016c2a4626f
parente1e8e116f74c3b32faf5d901a07bbe14c67d1249 (diff)
Use a common executor for all renderers.
-rw-r--r--container-search/src/main/java/com/yahoo/search/rendering/RendererRegistry.java12
-rw-r--r--container-search/src/main/java/com/yahoo/search/searchchain/ExecutionFactory.java15
2 files changed, 24 insertions, 3 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/rendering/RendererRegistry.java b/container-search/src/main/java/com/yahoo/search/rendering/RendererRegistry.java
index ecad9ced3be..2f5478d4bfe 100644
--- a/container-search/src/main/java/com/yahoo/search/rendering/RendererRegistry.java
+++ b/container-search/src/main/java/com/yahoo/search/rendering/RendererRegistry.java
@@ -26,7 +26,11 @@ public final class RendererRegistry extends ComponentRegistry<com.yahoo.processi
public static final ComponentId jsonRendererId = ComponentId.fromString("JsonRenderer");
public static final ComponentId defaultRendererId = jsonRendererId;
- /** Creates a registry containing the built-in renderers only */
+ /**
+ * Creates a registry containing the built-in renderers only
+ * @deprecated Supply external executor
+ */
+ @Deprecated(forRemoval = true, since = "7")
public RendererRegistry() {
this(Collections.emptyList());
}
@@ -40,7 +44,11 @@ public final class RendererRegistry extends ComponentRegistry<com.yahoo.processi
this(Collections.emptyList(), executor);
}
- /** Creates a registry of the given renderers plus the built-in ones */
+ /**
+ * Creates a registry of the given renderers plus the built-in ones
+ * @deprecated Supply external executor
+ */
+ @Deprecated(forRemoval = true, since = "7")
public RendererRegistry(Collection<Renderer> renderers) {
this(renderers, null);
}
diff --git a/container-search/src/main/java/com/yahoo/search/searchchain/ExecutionFactory.java b/container-search/src/main/java/com/yahoo/search/searchchain/ExecutionFactory.java
index 9bb1a794537..80064dcad3d 100644
--- a/container-search/src/main/java/com/yahoo/search/searchchain/ExecutionFactory.java
+++ b/container-search/src/main/java/com/yahoo/search/searchchain/ExecutionFactory.java
@@ -8,6 +8,7 @@ import com.yahoo.component.chain.ChainsConfigurer;
import com.yahoo.component.chain.model.ChainsModel;
import com.yahoo.component.chain.model.ChainsModelBuilder;
import com.yahoo.component.provider.ComponentRegistry;
+import com.yahoo.concurrent.ThreadFactoryFactory;
import com.yahoo.container.QrSearchersConfig;
import com.yahoo.container.core.ChainsConfig;
import com.yahoo.container.handler.threadpool.ContainerThreadPool;
@@ -24,6 +25,9 @@ import com.yahoo.vespa.configdefinition.SpecialtokensConfig;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
/**
* Provides creation of fully configured query Execution instances.
@@ -41,6 +45,15 @@ public class ExecutionFactory extends AbstractComponent {
private final RendererRegistry rendererRegistry;
private final Executor executor;
+ private static ThreadPoolExecutor createRenderingExecutor() {
+ int threadCount = Runtime.getRuntime().availableProcessors();
+ ThreadPoolExecutor executor = new ThreadPoolExecutor(threadCount, threadCount, 1L, TimeUnit.SECONDS,
+ new LinkedBlockingQueue<>(),
+ ThreadFactoryFactory.getThreadFactory("common-rendering"));
+ executor.prestartAllCoreThreads();
+ return executor;
+ }
+
@Inject
public ExecutionFactory(ChainsConfig chainsConfig,
IndexInfoConfig indexInfo,
@@ -54,7 +67,7 @@ public class ExecutionFactory extends AbstractComponent {
this.indexFacts = new IndexFacts(new IndexModel(indexInfo, clusters)).freeze();
this.specialTokens = new SpecialTokenRegistry(specialTokens);
this.linguistics = linguistics;
- this.rendererRegistry = new RendererRegistry(renderers.allComponents());
+ this.rendererRegistry = new RendererRegistry(renderers.allComponents(), createRenderingExecutor());
this.executor = executor != null ? executor : Executors.newSingleThreadExecutor();
}