diff options
author | Geir Storli <geirst@yahoo-inc.com> | 2017-04-27 13:39:18 +0200 |
---|---|---|
committer | Geir Storli <geirst@yahoo-inc.com> | 2017-05-03 09:40:31 +0200 |
commit | 17236e7b43d6c1fd4cf3aa443e9c57c78e1ba271 (patch) | |
tree | d8c3c253ab00d12524319e6cf96ec79ce8b35a12 | |
parent | 3cd9c747e62ee82edfb5fedf4415f5daa45b3ab3 (diff) |
Tune document store maxfilesize based on available memory.
-rw-r--r-- | config-model/src/main/java/com/yahoo/vespa/model/search/NodeFlavorTuning.java | 23 | ||||
-rw-r--r-- | config-model/src/test/java/com/yahoo/vespa/model/search/NodeFlavorTuningTest.java | 34 |
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(); |