summaryrefslogtreecommitdiffstats
path: root/config-model/src/test
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@verizonmedia.com>2020-10-08 16:15:36 +0200
committerGitHub <noreply@github.com>2020-10-08 16:15:36 +0200
commitf6e624397e546eb6e4ef2d0345267c88b0b6f3e7 (patch)
tree0c81b8730c68ec654144d906199484bf6aa76e26 /config-model/src/test
parent07aec913686ddb759996f11e2d234656f9a7ba4e (diff)
parentbe03cedb06d196714fd3c86de9cb4e00a5a0dfbb (diff)
Merge pull request #14781 from vespa-engine/bjorncs/adaptable-default-threadpool
Bjorncs/adaptable default threadpool
Diffstat (limited to 'config-model/src/test')
-rwxr-xr-xconfig-model/src/test/java/com/yahoo/vespa/model/container/ContainerClusterTest.java65
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/container/HostProvisionerWithCustomRealResource.java40
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/container/xml/ContainerDocumentApiBuilderTest.java34
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(); }
- }
-
}