diff options
author | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2020-09-16 18:22:11 +0200 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2020-09-16 18:22:11 +0200 |
commit | 6d09cc239f0f4145aab0ec21419fa7726589a4d7 (patch) | |
tree | 84e7356d4cd222bc97f423773729ab69225f17e8 /config-model/src/main/java/com/yahoo/vespa/model/container/ContainerThreadpool.java | |
parent | 951e558ed5cbfa4ae98fc0962f8ebe5ea1fddeb0 (diff) |
Allow applications to override threadpool configuration in services.xml
Diffstat (limited to 'config-model/src/main/java/com/yahoo/vespa/model/container/ContainerThreadpool.java')
-rw-r--r-- | config-model/src/main/java/com/yahoo/vespa/model/container/ContainerThreadpool.java | 47 |
1 files changed, 45 insertions, 2 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerThreadpool.java b/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerThreadpool.java index 6e4514c31b4..c4d252ccbfe 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerThreadpool.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerThreadpool.java @@ -5,9 +5,12 @@ import com.yahoo.container.bundle.BundleInstantiationSpecification; import com.yahoo.container.handler.threadpool.ContainerThreadPool; import com.yahoo.container.handler.threadpool.ContainerThreadpoolConfig; import com.yahoo.osgi.provider.model.ComponentModel; +import com.yahoo.text.XML; import com.yahoo.vespa.model.container.component.SimpleComponent; +import org.w3c.dom.Element; import java.util.List; +import java.util.Optional; import java.util.stream.Collectors; /** @@ -18,17 +21,32 @@ import java.util.stream.Collectors; public class ContainerThreadpool extends SimpleComponent implements ContainerThreadpoolConfig.Producer { private final String name; + private final UserOptions userOptions; - public ContainerThreadpool(String name) { + public ContainerThreadpool(String name) { this(name, null); } + + public ContainerThreadpool(String name, UserOptions userOptions) { super(new ComponentModel( BundleInstantiationSpecification.getFromStrings( "threadpool@" + name, ContainerThreadPool.class.getName(), null))); this.name = name; + this.userOptions = userOptions; + } + + @Override + public void getConfig(ContainerThreadpoolConfig.Builder builder) { + builder.name(this.name); + if (userOptions != null) { + builder.maxThreads(userOptions.maxThreads); + builder.minThreads(userOptions.minThreads); + builder.queueSize(userOptions.queueSize); + } } - @Override public void getConfig(ContainerThreadpoolConfig.Builder builder) { builder.name(this.name); } + protected Optional<UserOptions> userOptions() { return Optional.ofNullable(userOptions); } + protected boolean hasUserOptions() { return userOptions().isPresent(); } protected static double vcpu(ContainerCluster<?> cluster) { List<Double> vcpus = cluster.getContainers().stream() @@ -40,4 +58,29 @@ public class ContainerThreadpool extends SimpleComponent implements ContainerThr if (vcpus.size() != 1 || vcpus.get(0) == 0) return 0; return vcpus.get(0); } + + public static class UserOptions { + private final int maxThreads; + private final int minThreads; + private final int queueSize; + + private UserOptions(int maxThreads, int minThreads, int queueSize) { + this.maxThreads = maxThreads; + this.minThreads = minThreads; + this.queueSize = queueSize; + } + + public static Optional<UserOptions> fromXml(Element xml) { + Element element = XML.getChild(xml, "threadpool"); + if (element == null) return Optional.empty(); + return Optional.of(new UserOptions( + intOption(element, "max-threads"), + intOption(element, "min-threads"), + intOption(element, "queue-size"))); + } + + private static int intOption(Element element, String name) { + return Integer.parseInt(XML.getChild(element, name).getTextContent()); + } + } } |