diff options
author | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2020-10-08 16:15:36 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-08 16:15:36 +0200 |
commit | f6e624397e546eb6e4ef2d0345267c88b0b6f3e7 (patch) | |
tree | 0c81b8730c68ec654144d906199484bf6aa76e26 /config-model/src/test | |
parent | 07aec913686ddb759996f11e2d234656f9a7ba4e (diff) | |
parent | be03cedb06d196714fd3c86de9cb4e00a5a0dfbb (diff) |
Merge pull request #14781 from vespa-engine/bjorncs/adaptable-default-threadpool
Bjorncs/adaptable default threadpool
Diffstat (limited to 'config-model/src/test')
3 files changed, 95 insertions, 44 deletions
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/ContainerClusterTest.java b/config-model/src/test/java/com/yahoo/vespa/model/container/ContainerClusterTest.java index d493afd9c1f..3515efb7bc1 100755 --- a/config-model/src/test/java/com/yahoo/vespa/model/container/ContainerClusterTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/container/ContainerClusterTest.java @@ -4,9 +4,11 @@ package com.yahoo.vespa.model.container; import com.yahoo.cloud.config.ClusterInfoConfig; import com.yahoo.cloud.config.ConfigserverConfig; import com.yahoo.cloud.config.RoutingProviderConfig; +import com.yahoo.component.ComponentId; import com.yahoo.config.application.api.DeployLogger; import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.model.deploy.TestProperties; +import com.yahoo.config.model.test.MockApplicationPackage; import com.yahoo.config.model.test.MockRoot; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.Environment; @@ -14,6 +16,7 @@ import com.yahoo.config.provision.RegionName; import com.yahoo.config.provision.SystemName; import com.yahoo.config.provision.Zone; import com.yahoo.container.di.config.PlatformBundlesConfig; +import com.yahoo.container.handler.ThreadPoolProvider; import com.yahoo.container.handler.ThreadpoolConfig; import com.yahoo.search.config.QrStartConfig; import com.yahoo.vespa.model.Host; @@ -33,6 +36,7 @@ import java.util.Iterator; import java.util.List; import java.util.stream.Collectors; +import static org.hamcrest.Matchers.hasKey; import static org.hamcrest.collection.IsIterableContainingInAnyOrder.containsInAnyOrder; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -167,12 +171,11 @@ public class ContainerClusterTest { assertEquals(512, qrStartConfig.jvm().heapsize()); assertEquals(32, qrStartConfig.jvm().compressedClassSpaceSize()); assertEquals(0, qrStartConfig.jvm().heapSizeAsPercentageOfPhysicalMemory()); + root.freezeModelTopology(); - ThreadpoolConfig.Builder tpBuilder = new ThreadpoolConfig.Builder(); - cluster.getConfig(tpBuilder); - ThreadpoolConfig threadpoolConfig = new ThreadpoolConfig(tpBuilder); + ThreadpoolConfig threadpoolConfig = root.getConfig(ThreadpoolConfig.class, "container0/component/default-threadpool"); assertEquals(10, threadpoolConfig.maxthreads()); - assertEquals(0, threadpoolConfig.queueSize()); + assertEquals(50, threadpoolConfig.queueSize()); } @Test @@ -219,10 +222,9 @@ public class ContainerClusterTest { MockRoot root = new MockRoot("foo", state); ApplicationContainerCluster cluster = createContainerCluster(root, false); addContainer(root.deployLogger(), cluster, "c1", "host-c1"); + root.freezeModelTopology(); - ThreadpoolConfig.Builder tpBuilder = new ThreadpoolConfig.Builder(); - cluster.getConfig(tpBuilder); - ThreadpoolConfig threadpoolConfig = new ThreadpoolConfig(tpBuilder); + ThreadpoolConfig threadpoolConfig = root.getConfig(ThreadpoolConfig.class, "container0/component/default-threadpool"); assertEquals(500, threadpoolConfig.maxthreads()); assertEquals(0, threadpoolConfig.queueSize()); } @@ -232,15 +234,52 @@ public class ContainerClusterTest { MockRoot root = new MockRoot("foo"); ApplicationContainerCluster cluster = createContainerCluster(root, false); addContainer(root.deployLogger(), cluster, "c1", "host-c1"); + root.freezeModelTopology(); - ThreadpoolConfig.Builder tpBuilder = new ThreadpoolConfig.Builder(); - cluster.getConfig(tpBuilder); - ThreadpoolConfig threadpoolConfig = new ThreadpoolConfig(tpBuilder); + ThreadpoolConfig threadpoolConfig = root.getConfig(ThreadpoolConfig.class, "container0/component/default-threadpool"); assertEquals(500, threadpoolConfig.maxthreads()); assertEquals(0, threadpoolConfig.queueSize()); } @Test + public void container_cluster_has_default_threadpool_provider() { + MockRoot root = new MockRoot("foo"); + ApplicationContainerCluster cluster = createContainerCluster(root, false); + addContainer(root.deployLogger(), cluster, "c1", "host-c1"); + root.freezeModelTopology(); + + ComponentId expectedComponentId = new ComponentId("default-threadpool"); + var components = cluster.getComponentsMap(); + assertThat(components, hasKey(expectedComponentId)); + Component<?, ?> component = components.get(expectedComponentId); + assertEquals(ThreadPoolProvider.class.getName(), component.getClassId().getName()); + } + + @Test + public void config_for_default_threadpool_provider_scales_with_node_resources() { + HostProvisionerWithCustomRealResource hostProvisioner = new HostProvisionerWithCustomRealResource(); + MockRoot root = new MockRoot( + "foo", + new DeployState.Builder() + .properties(new TestProperties() + .setThreadPoolSizeFactor(4) + .setQueueSizeFactor(20)) + .applicationPackage(new MockApplicationPackage.Builder().build()) + .modelHostProvisioner(hostProvisioner) + .build()); + ApplicationContainerCluster cluster = createContainerCluster(root, false); + HostResource hostResource = new HostResource( + new Host(null, "host-c1"), + hostProvisioner.allocateHost("host-c1")); + addContainerWithHostResource(root.deployLogger(), cluster, "c1", hostResource); + root.freezeModelTopology(); + + ThreadpoolConfig threadpoolConfig = root.getConfig(ThreadpoolConfig.class, "container0/component/default-threadpool"); + assertEquals(16, threadpoolConfig.maxthreads()); + assertEquals(320, threadpoolConfig.queueSize()); + } + + @Test public void requireThatRoutingProviderIsDisabledForNonHosted() { DeployState state = new DeployState.Builder().properties(new TestProperties().setHostedVespa(false)).build(); MockRoot root = new MockRoot("foo", state); @@ -287,8 +326,12 @@ public class ContainerClusterTest { private static void addContainer(DeployLogger deployLogger, ApplicationContainerCluster cluster, String name, String hostName) { + addContainerWithHostResource(deployLogger, cluster, name, new HostResource(new Host(null, hostName))); + } + + private static void addContainerWithHostResource(DeployLogger deployLogger, ApplicationContainerCluster cluster, String name, HostResource hostResource) { ApplicationContainer container = new ApplicationContainer(cluster, name, 0, cluster.isHostedVespa()); - container.setHostResource(new HostResource(new Host(null, hostName))); + container.setHostResource(hostResource); container.initService(deployLogger); cluster.addContainer(container); } diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/HostProvisionerWithCustomRealResource.java b/config-model/src/test/java/com/yahoo/vespa/model/container/HostProvisionerWithCustomRealResource.java new file mode 100644 index 00000000000..450049ffe99 --- /dev/null +++ b/config-model/src/test/java/com/yahoo/vespa/model/container/HostProvisionerWithCustomRealResource.java @@ -0,0 +1,40 @@ +// Copyright Verizon Media. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.vespa.model.container; + +import com.yahoo.config.model.api.HostProvisioner; +import com.yahoo.config.model.provision.Host; +import com.yahoo.config.provision.Capacity; +import com.yahoo.config.provision.ClusterMembership; +import com.yahoo.config.provision.ClusterSpec; +import com.yahoo.config.provision.HostSpec; +import com.yahoo.config.provision.NodeResources; +import com.yahoo.config.provision.ProvisionLogger; +import com.yahoo.net.HostName; + +import java.util.List; +import java.util.Optional; + +/** + * @author bjorncs + */ +public class HostProvisionerWithCustomRealResource implements HostProvisioner { + + @Override + public HostSpec allocateHost(String alias) { + Host host = new Host(HostName.getLocalhost()); + ClusterMembership membership = ClusterMembership.from( + ClusterSpec + .specification( + ClusterSpec.Type.container, + ClusterSpec.Id.from("id")) + .vespaVersion("") + .group(ClusterSpec.Group.from(0)) + .build(), + 0); + return new HostSpec( + host.hostname(), new NodeResources(4, 0, 0, 0), NodeResources.unspecified(), NodeResources.unspecified(), + membership, Optional.empty(), Optional.empty(), Optional.empty()); + } + + @Override public List<HostSpec> prepare(ClusterSpec cluster, Capacity capacity, ProvisionLogger logger) { return List.of(); } +} diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerDocumentApiBuilderTest.java b/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerDocumentApiBuilderTest.java index def5da3a9c2..9f061dcbd0a 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerDocumentApiBuilderTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerDocumentApiBuilderTest.java @@ -1,20 +1,12 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.model.container.xml; -import com.yahoo.config.model.api.HostProvisioner; import com.yahoo.config.model.builder.xml.test.DomBuilderTest; -import com.yahoo.config.model.provision.Host; import com.yahoo.config.model.test.MockApplicationPackage; import com.yahoo.config.model.test.MockRoot; -import com.yahoo.config.provision.Capacity; -import com.yahoo.config.provision.ClusterMembership; -import com.yahoo.config.provision.ClusterSpec; -import com.yahoo.config.provision.HostSpec; -import com.yahoo.config.provision.NodeResources; -import com.yahoo.config.provision.ProvisionLogger; import com.yahoo.container.handler.threadpool.ContainerThreadpoolConfig; -import com.yahoo.net.HostName; import com.yahoo.vespa.model.container.ContainerCluster; +import com.yahoo.vespa.model.container.HostProvisionerWithCustomRealResource; import com.yahoo.vespa.model.container.component.Handler; import com.yahoo.vespa.model.container.component.SystemBindingPattern; import com.yahoo.vespa.model.container.component.UserBindingPattern; @@ -23,9 +15,7 @@ import org.w3c.dom.Element; import java.util.Collection; import java.util.HashMap; -import java.util.List; import java.util.Map; -import java.util.Optional; import java.util.Set; import static org.hamcrest.CoreMatchers.equalTo; @@ -158,26 +148,4 @@ public class ContainerDocumentApiBuilderTest extends ContainerModelBuilderTestBa assertEquals(1000, feedThreadpoolConfig.queueSize()); } - private static class HostProvisionerWithCustomRealResource implements HostProvisioner { - - @Override - public HostSpec allocateHost(String alias) { - Host host = new Host(HostName.getLocalhost()); - ClusterMembership membership = ClusterMembership.from( - ClusterSpec - .specification( - ClusterSpec.Type.container, - ClusterSpec.Id.from("id")) - .vespaVersion("") - .group(ClusterSpec.Group.from(0)) - .build(), - 0); - return new HostSpec( - host.hostname(), new NodeResources(4, 0, 0, 0), NodeResources.unspecified(), NodeResources.unspecified(), - membership, Optional.empty(), Optional.empty(), Optional.empty()); - } - - @Override public List<HostSpec> prepare(ClusterSpec cluster, Capacity capacity, ProvisionLogger logger) { return List.of(); } - } - } |