summaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-01-28 13:31:21 +0100
committerHenning Baldersheim <balder@yahoo-inc.com>2022-01-28 13:40:01 +0100
commit11782742bd36b88f116f716e03c11df1c8d21f12 (patch)
treea9a7f7201525d0b4d2bb562c38c931500f22a844 /container-search
parentc58fe9e096554ec64a64060db4fc127f9d89f614 (diff)
Use half of available cores to compile query profiles.
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/search/query/profile/compiled/CompiledQueryProfileRegistry.java28
-rw-r--r--container-search/src/test/java/com/yahoo/search/query/profile/compiled/CompiledQueryProfileRegistryTest.java4
2 files changed, 27 insertions, 5 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/query/profile/compiled/CompiledQueryProfileRegistry.java b/container-search/src/main/java/com/yahoo/search/query/profile/compiled/CompiledQueryProfileRegistry.java
index 8d2c847dc3a..29a383f8896 100644
--- a/container-search/src/main/java/com/yahoo/search/query/profile/compiled/CompiledQueryProfileRegistry.java
+++ b/container-search/src/main/java/com/yahoo/search/query/profile/compiled/CompiledQueryProfileRegistry.java
@@ -12,6 +12,10 @@ import com.yahoo.search.query.profile.config.QueryProfilesConfig;
import com.yahoo.search.query.profile.types.QueryProfileTypeRegistry;
import com.yahoo.yolean.UncheckedInterruptedException;
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.Executor;
+import java.util.concurrent.LinkedBlockingQueue;
+
/**
* A set of compiled query profiles.
*
@@ -25,12 +29,28 @@ public class CompiledQueryProfileRegistry extends ComponentRegistry<CompiledQuer
private final QueryProfileTypeRegistry typeRegistry;
@Inject
- public CompiledQueryProfileRegistry(QueryProfilesConfig config) {
+ public CompiledQueryProfileRegistry(QueryProfilesConfig config, Executor executor) {
QueryProfileRegistry registry = QueryProfileConfigurer.createFromConfig(config);
typeRegistry = registry.getTypeRegistry();
- for (QueryProfile inputProfile : registry.allComponents()) {
- abortIfInterrupted();
- register(QueryProfileCompiler.compile(inputProfile, this));
+ int maxConcurrent = Math.max(1, Runtime.getRuntime().availableProcessors()/2);
+ BlockingQueue<CompiledQueryProfile> doneQ = new LinkedBlockingQueue<>();
+ int started = 0;
+ int completed = 0;
+ try {
+ for (QueryProfile inputProfile : registry.allComponents()) {
+ abortIfInterrupted();
+ if (started++ >= maxConcurrent) {
+ register(doneQ.take());
+ completed++;
+ }
+ executor.execute(() -> doneQ.add(QueryProfileCompiler.compile(inputProfile, this)));
+ }
+ while (completed < started) {
+ register(doneQ.take());
+ completed++;
+ }
+ } catch (InterruptedException e) {
+ throw new UncheckedInterruptedException("Interrupted while waiting for compiled query profiles", true);
}
}
diff --git a/container-search/src/test/java/com/yahoo/search/query/profile/compiled/CompiledQueryProfileRegistryTest.java b/container-search/src/test/java/com/yahoo/search/query/profile/compiled/CompiledQueryProfileRegistryTest.java
index a9792049fb7..6819578c2ae 100644
--- a/container-search/src/test/java/com/yahoo/search/query/profile/compiled/CompiledQueryProfileRegistryTest.java
+++ b/container-search/src/test/java/com/yahoo/search/query/profile/compiled/CompiledQueryProfileRegistryTest.java
@@ -4,6 +4,8 @@ package com.yahoo.search.query.profile.compiled;
import com.yahoo.search.query.profile.config.QueryProfilesConfig;
import org.junit.Test;
+import java.util.concurrent.Executors;
+
import static org.junit.Assert.assertEquals;
/**
@@ -21,7 +23,7 @@ public class CompiledQueryProfileRegistryTest {
.value("5")))
.build();
- var registry = new CompiledQueryProfileRegistry(config);
+ var registry = new CompiledQueryProfileRegistry(config, Executors.newCachedThreadPool());
var profile1 = registry.findQueryProfile("profile1");
assertEquals("5", profile1.get("hits"));
}