summaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2019-02-13 15:55:14 +0100
committerHenning Baldersheim <balder@yahoo-inc.com>2019-02-13 15:55:14 +0100
commit996392bb40d8b3406b7ec03d54a4e643ccc58e14 (patch)
tree9a2e74606e4338690372a9faa62049d4ec110420 /config-model
parent57693d44c61c6db67bcd67c7d619ec0ca5857777 (diff)
Use number of cores to make a good assumption on number of threads to use for content layer.
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/provision/SingleNodeProvisioner.java11
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/test/MockRoot.java5
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/content/ContentNode.java6
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/content/StorageNode.java14
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/content/StorageClusterTest.java64
5 files changed, 80 insertions, 20 deletions
diff --git a/config-model/src/main/java/com/yahoo/config/model/provision/SingleNodeProvisioner.java b/config-model/src/main/java/com/yahoo/config/model/provision/SingleNodeProvisioner.java
index 0af11fdb941..b7035594c71 100644
--- a/config-model/src/main/java/com/yahoo/config/model/provision/SingleNodeProvisioner.java
+++ b/config-model/src/main/java/com/yahoo/config/model/provision/SingleNodeProvisioner.java
@@ -2,7 +2,12 @@
package com.yahoo.config.model.provision;
import com.yahoo.config.model.api.HostProvisioner;
-import com.yahoo.config.provision.*;
+import com.yahoo.config.provision.Capacity;
+import com.yahoo.config.provision.ClusterMembership;
+import com.yahoo.config.provision.ClusterSpec;
+import com.yahoo.config.provision.Flavor;
+import com.yahoo.config.provision.HostSpec;
+import com.yahoo.config.provision.ProvisionLogger;
import com.yahoo.net.HostName;
import java.util.ArrayList;
@@ -25,6 +30,10 @@ public class SingleNodeProvisioner implements HostProvisioner {
host = new Host(HostName.getLocalhost());
this.hostSpec = new HostSpec(host.hostname(), host.aliases());
}
+ public SingleNodeProvisioner(Flavor flavor) {
+ host = new Host(HostName.getLocalhost());
+ this.hostSpec = new HostSpec(host.hostname(), host.aliases(),flavor);
+ }
@Override
public HostSpec allocateHost(String alias) {
diff --git a/config-model/src/main/java/com/yahoo/config/model/test/MockRoot.java b/config-model/src/main/java/com/yahoo/config/model/test/MockRoot.java
index baf673570e4..13d4064f55f 100644
--- a/config-model/src/main/java/com/yahoo/config/model/test/MockRoot.java
+++ b/config-model/src/main/java/com/yahoo/config/model/test/MockRoot.java
@@ -6,6 +6,7 @@ import com.yahoo.config.application.api.ApplicationPackage;
import com.yahoo.config.application.api.DeployLogger;
import com.yahoo.config.model.ConfigModelContext;
import com.yahoo.config.model.ConfigModelRepo;
+import com.yahoo.config.model.api.HostProvisioner;
import com.yahoo.config.model.application.provider.BaseDeployLogger;
import com.yahoo.config.model.builder.xml.XmlHelper;
import com.yahoo.config.model.deploy.DeployState;
@@ -57,6 +58,10 @@ public class MockRoot extends AbstractConfigProducerRoot {
public MockRoot(String rootConfigId, ApplicationPackage applicationPackage) {
this(rootConfigId, new DeployState.Builder().applicationPackage(applicationPackage).build());
}
+ public MockRoot(String rootConfigId, ApplicationPackage applicationPackage, HostProvisioner provisioner) {
+ this(rootConfigId, new DeployState.Builder().applicationPackage(applicationPackage)
+ .modelHostProvisioner(provisioner).build());
+ }
public MockRoot(String rootConfigId, DeployState deployState) {
super(rootConfigId);
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/content/ContentNode.java b/config-model/src/main/java/com/yahoo/vespa/model/content/ContentNode.java
index 4257e47218e..c75421c9636 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/content/ContentNode.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/content/ContentNode.java
@@ -1,8 +1,10 @@
// 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.content;
+import com.yahoo.config.provision.Flavor;
import com.yahoo.metrics.MetricsmanagerConfig;
import com.yahoo.vespa.config.content.LoadTypeConfig;
+import com.yahoo.vespa.config.content.StorFilestorConfig;
import com.yahoo.vespa.config.content.core.StorCommunicationmanagerConfig;
import com.yahoo.vespa.config.content.core.StorServerConfig;
import com.yahoo.vespa.config.content.core.StorStatusConfig;
@@ -71,8 +73,4 @@ public abstract class ContentNode extends AbstractService
public int getHealthPort() {
return getRelativePort(2);
}
-
- public String getRootDirectory() {
- return rootDirectory;
- }
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/content/StorageNode.java b/config-model/src/main/java/com/yahoo/vespa/model/content/StorageNode.java
index 537eca5d7b8..9ea92048f3b 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/content/StorageNode.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/content/StorageNode.java
@@ -2,6 +2,7 @@
package com.yahoo.vespa.model.content;
import com.yahoo.config.model.deploy.DeployState;
+import com.yahoo.config.provision.Flavor;
import com.yahoo.vespa.config.content.StorFilestorConfig;
import com.yahoo.vespa.config.content.core.StorBucketmoverConfig;
import com.yahoo.vespa.config.content.core.StorServerConfig;
@@ -19,12 +20,13 @@ import org.w3c.dom.Element;
* Class to provide config related to a specific storage node.
*/
@RestartConfigs({StorFilestorConfig.class, StorBucketmoverConfig.class})
-public class StorageNode extends ContentNode implements StorServerConfig.Producer {
+public class StorageNode extends ContentNode implements StorServerConfig.Producer, StorFilestorConfig.Producer {
static final String rootFolder = Defaults.getDefaults().underVespaHome("var/db/vespa/search/");
private final Double capacity;
private final boolean retired;
+ private final StorageCluster cluster;
public static class Builder extends VespaDomBuilder.DomConfigProducerBuilder<StorageNode> {
@Override
@@ -41,6 +43,7 @@ public class StorageNode extends ContentNode implements StorServerConfig.Produce
distributionKey);
this.retired = retired;
this.capacity = capacity;
+ this.cluster = cluster;
}
@Override
@@ -81,4 +84,13 @@ public class StorageNode extends ContentNode implements StorServerConfig.Produce
}
}
+ @Override
+ public void getConfig(StorFilestorConfig.Builder builder) {
+ if (getHostResource() != null && getHostResource().getFlavor().isPresent()) {
+ Flavor nodeFlavor = getHostResource().getFlavor().get();
+ builder.num_threads(Math.max(4, (int)nodeFlavor.getMinCpuCores()));
+ }
+ cluster.getConfig(builder);
+ }
+
}
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/content/StorageClusterTest.java b/config-model/src/test/java/com/yahoo/vespa/model/content/StorageClusterTest.java
index 4f7440e590b..27f5af52b6c 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/content/StorageClusterTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/content/StorageClusterTest.java
@@ -1,6 +1,10 @@
// 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.content;
+import com.yahoo.config.model.provision.SingleNodeProvisioner;
+import com.yahoo.config.model.test.MockApplicationPackage;
+import com.yahoo.config.provision.Flavor;
+import com.yahoo.config.provisioning.FlavorsConfig;
import com.yahoo.vespa.config.content.core.StorIntegritycheckerConfig;
import com.yahoo.vespa.config.content.core.StorVisitorConfig;
import com.yahoo.vespa.config.content.StorFilestorConfig;
@@ -20,8 +24,16 @@ import static org.junit.Assert.fail;
public class StorageClusterTest {
+ StorageCluster parse(String xml, Flavor flavor) throws Exception {
+ MockRoot root = new MockRoot("", new MockApplicationPackage.Builder().build(),
+ new SingleNodeProvisioner(flavor));
+ return parse(xml, root);
+ }
StorageCluster parse(String xml) throws Exception {
MockRoot root = new MockRoot();
+ return parse(xml, root);
+ }
+ StorageCluster parse(String xml, MockRoot root) throws Exception {
root.getDeployState().getDocumentModel().getDocumentManager().add(
new NewDocumentType(new NewDocumentType.Name("music"))
);
@@ -95,8 +107,8 @@ public class StorageClusterTest {
@Test
public void testPersistenceThreads() throws Exception {
- StorFilestorConfig.Builder builder = new StorFilestorConfig.Builder();
- parse(
+
+ StorageCluster stc = parse(
"<cluster id=\"bees\">\n" +
" <documents/>" +
" <tuning>\n" +
@@ -109,19 +121,31 @@ public class StorageClusterTest {
" <group>" +
" <node distribution-key=\"0\" hostalias=\"mockhost\"/>" +
" </group>" +
- "</cluster>"
- ).getConfig(builder);
+ "</cluster>",
+ new Flavor(new FlavorsConfig.Flavor.Builder().name("test-flavor").minCpuCores(9).build())
+ );
- StorFilestorConfig config = new StorFilestorConfig(builder);
+ {
+ StorFilestorConfig.Builder builder = new StorFilestorConfig.Builder();
+ stc.getConfig(builder);
+ StorFilestorConfig config = new StorFilestorConfig(builder);
- assertEquals(4, config.num_threads());
- assertEquals(false, config.enable_multibit_split_optimalization());
+ assertEquals(4, config.num_threads());
+ assertEquals(false, config.enable_multibit_split_optimalization());
+ }
+ {
+ assertEquals(1, stc.getChildren().size());
+ StorageNode sn = stc.getChildren().values().iterator().next();
+ StorFilestorConfig.Builder builder = new StorFilestorConfig.Builder();
+ sn.getConfig(builder);
+ StorFilestorConfig config = new StorFilestorConfig(builder);
+ assertEquals(4, config.num_threads());
+ }
}
@Test
public void testNoPersistenceThreads() throws Exception {
- StorFilestorConfig.Builder builder = new StorFilestorConfig.Builder();
- parse(
+ StorageCluster stc = parse(
"<cluster id=\"bees\">\n" +
" <documents/>" +
" <tuning>\n" +
@@ -129,12 +153,24 @@ public class StorageClusterTest {
" <group>" +
" <node distribution-key=\"0\" hostalias=\"mockhost\"/>" +
" </group>" +
- "</cluster>"
- ).getConfig(builder);
-
- StorFilestorConfig config = new StorFilestorConfig(builder);
+ "</cluster>",
+ new Flavor(new FlavorsConfig.Flavor.Builder().name("test-flavor").minCpuCores(9).build())
+ );
- assertEquals(6, config.num_threads());
+ {
+ StorFilestorConfig.Builder builder = new StorFilestorConfig.Builder();
+ stc.getConfig(builder);
+ StorFilestorConfig config = new StorFilestorConfig(builder);
+ assertEquals(6, config.num_threads());
+ }
+ {
+ assertEquals(1, stc.getChildren().size());
+ StorageNode sn = stc.getChildren().values().iterator().next();
+ StorFilestorConfig.Builder builder = new StorFilestorConfig.Builder();
+ sn.getConfig(builder);
+ StorFilestorConfig config = new StorFilestorConfig(builder);
+ assertEquals(9, config.num_threads());
+ }
}
@Test