summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeir Storli <geirst@yahoo-inc.com>2017-04-27 13:39:18 +0200
committerGeir Storli <geirst@yahoo-inc.com>2017-05-03 09:40:31 +0200
commit17236e7b43d6c1fd4cf3aa443e9c57c78e1ba271 (patch)
treed8c3c253ab00d12524319e6cf96ec79ce8b35a12
parent3cd9c747e62ee82edfb5fedf4415f5daa45b3ab3 (diff)
Tune document store maxfilesize based on available memory.
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/search/NodeFlavorTuning.java23
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/search/NodeFlavorTuningTest.java34
2 files changed, 55 insertions, 2 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
index 4ef42137c53..40c0cb82f81 100644
--- 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
@@ -18,10 +18,33 @@ public class NodeFlavorTuning implements ProtonConfig.Producer {
@Override
public void getConfig(ProtonConfig.Builder builder) {
+ tuneDiskWriteSpeed(builder);
+ tuneDocumentStoreMaxFileSize(builder);
+ }
+
+ private void tuneDiskWriteSpeed(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));
}
+
+ private void tuneDocumentStoreMaxFileSize(ProtonConfig.Builder builder) {
+ ProtonConfig.Summary.Log.Builder logBuilder = new ProtonConfig.Summary.Log.Builder();
+ double memoryGb = nodeFlavor.getMinMainMemoryAvailableGb();
+ if (memoryGb <= 12.0) {
+ logBuilder.maxfilesize(256 * MB);
+ } else if (memoryGb < 24.0) {
+ logBuilder.maxfilesize(512 * MB);
+ } else if (memoryGb <= 64.0) {
+ logBuilder.maxfilesize(1 * GB);
+ } else {
+ logBuilder.maxfilesize(4 * GB);
+ }
+ builder.summary(new ProtonConfig.Summary.Builder().log(logBuilder));
+ }
+
+ static long MB = 1024 * 1024;
+ static long GB = MB * 1024;
}
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
index 40288a9b43c..39a5b399e5e 100644
--- 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
@@ -6,6 +6,8 @@ import com.yahoo.vespa.config.search.core.ProtonConfig;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
+import static com.yahoo.vespa.model.search.NodeFlavorTuning.MB;
+import static com.yahoo.vespa.model.search.NodeFlavorTuning.GB;
/**
* @author geirst
@@ -26,9 +28,37 @@ public class NodeFlavorTuningTest {
assertEquals(100, cfg.hwinfo().disk().slowwritespeedlimit(), 0.001);
}
+ @Test
+ public void require_that_document_store_maxfilesize_is_set_based_on_available_memory() {
+ assertDocumentStoreMaxFileSize(256 * MB, 4);
+ assertDocumentStoreMaxFileSize(256 * MB, 6);
+ assertDocumentStoreMaxFileSize(256 * MB, 8);
+ assertDocumentStoreMaxFileSize(256 * MB, 12);
+ assertDocumentStoreMaxFileSize(512 * MB, 16);
+ assertDocumentStoreMaxFileSize(1 * GB, 24);
+ assertDocumentStoreMaxFileSize(1 * GB, 32);
+ assertDocumentStoreMaxFileSize(1 * GB, 48);
+ assertDocumentStoreMaxFileSize(1 * GB, 64);
+ assertDocumentStoreMaxFileSize(4 * GB, 128);
+ assertDocumentStoreMaxFileSize(4 * GB, 256);
+ assertDocumentStoreMaxFileSize(4 * GB, 512);
+ }
+
+ private static void assertDocumentStoreMaxFileSize(long expSize, int memoryGb) {
+ assertEquals(expSize, configFromMemorySetting(memoryGb).summary().log().maxfilesize());
+ }
+
private static ProtonConfig configFromDiskSetting(boolean fastDisk) {
- FlavorsConfig.Flavor.Builder flavorBuilder = new FlavorsConfig.Flavor.Builder();
- flavorBuilder.fastDisk(fastDisk);
+ return getConfig(new FlavorsConfig.Flavor.Builder().
+ fastDisk(fastDisk));
+ }
+
+ private static ProtonConfig configFromMemorySetting(int memoryGb) {
+ return getConfig(new FlavorsConfig.Flavor.Builder().
+ minMainMemoryAvailableGb(memoryGb));
+ }
+
+ private static ProtonConfig getConfig(FlavorsConfig.Flavor.Builder flavorBuilder) {
flavorBuilder.name("my_flavor");
NodeFlavorTuning tuning = new NodeFlavorTuning(new Flavor(new FlavorsConfig.Flavor(flavorBuilder)));
ProtonConfig.Builder protonBuilder = new ProtonConfig.Builder();