summaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorGeir Storli <geirst@yahoo-inc.com>2017-04-26 09:40:33 +0200
committerGeir Storli <geirst@yahoo-inc.com>2017-04-26 09:40:33 +0200
commit1902441cbbb1391c9e4c75c5ddf252ed45b9d3a9 (patch)
tree96dde43b814a016e23c3a8a6ad1f96e8aed4656a /config-model
parent22dedb34f193bf14e224103aedb59d86845cf715 (diff)
Add class for tuning proton config based on node flavor of a search node.
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/search/NodeFlavorTuning.java27
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/search/NodeFlavorTuningTest.java39
2 files changed, 66 insertions, 0 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/search/NodeFlavorTuning.java b/config-model/src/main/java/com/yahoo/vespa/model/search/NodeFlavorTuning.java
new file mode 100644
index 00000000000..4ef42137c53
--- /dev/null
+++ b/config-model/src/main/java/com/yahoo/vespa/model/search/NodeFlavorTuning.java
@@ -0,0 +1,27 @@
+package com.yahoo.vespa.model.search;
+
+import com.yahoo.config.provision.Flavor;
+import com.yahoo.vespa.config.search.core.ProtonConfig;
+
+/**
+ * Tuning of proton config for a search node based on the node flavor of that node.
+ *
+ * @author geirst
+ */
+public class NodeFlavorTuning implements ProtonConfig.Producer {
+
+ private final Flavor nodeFlavor;
+
+ public NodeFlavorTuning(Flavor nodeFlavor) {
+ this.nodeFlavor = nodeFlavor;
+ }
+
+ @Override
+ public void getConfig(ProtonConfig.Builder builder) {
+ ProtonConfig.Hwinfo.Disk.Builder diskInfo = new ProtonConfig.Hwinfo.Disk.Builder();
+ if (!nodeFlavor.hasFastDisk()) {
+ diskInfo.writespeed(40);
+ }
+ builder.hwinfo(new ProtonConfig.Hwinfo.Builder().disk(diskInfo));
+ }
+}
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/search/NodeFlavorTuningTest.java b/config-model/src/test/java/com/yahoo/vespa/model/search/NodeFlavorTuningTest.java
new file mode 100644
index 00000000000..40288a9b43c
--- /dev/null
+++ b/config-model/src/test/java/com/yahoo/vespa/model/search/NodeFlavorTuningTest.java
@@ -0,0 +1,39 @@
+package com.yahoo.vespa.model.search;
+
+import com.yahoo.config.provision.Flavor;
+import com.yahoo.config.provisioning.FlavorsConfig;
+import com.yahoo.vespa.config.search.core.ProtonConfig;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * @author geirst
+ */
+public class NodeFlavorTuningTest {
+
+ @Test
+ public void require_that_fast_disk_is_reflected_in_proton_config() {
+ ProtonConfig cfg = configFromDiskSetting(true);
+ assertEquals(200, cfg.hwinfo().disk().writespeed(), 0.001);
+ assertEquals(100, cfg.hwinfo().disk().slowwritespeedlimit(), 0.001);
+ }
+
+ @Test
+ public void require_that_slow_disk_is_reflected_in_proton_config() {
+ ProtonConfig cfg = configFromDiskSetting(false);
+ assertEquals(40, cfg.hwinfo().disk().writespeed(), 0.001);
+ assertEquals(100, cfg.hwinfo().disk().slowwritespeedlimit(), 0.001);
+ }
+
+ private static ProtonConfig configFromDiskSetting(boolean fastDisk) {
+ FlavorsConfig.Flavor.Builder flavorBuilder = new FlavorsConfig.Flavor.Builder();
+ flavorBuilder.fastDisk(fastDisk);
+ flavorBuilder.name("my_flavor");
+ NodeFlavorTuning tuning = new NodeFlavorTuning(new Flavor(new FlavorsConfig.Flavor(flavorBuilder)));
+ ProtonConfig.Builder protonBuilder = new ProtonConfig.Builder();
+ tuning.getConfig(protonBuilder);
+ return new ProtonConfig(protonBuilder);
+ }
+
+}