diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2021-04-27 17:11:52 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2021-04-27 17:11:52 +0200 |
commit | 9b0f395b86a18d8dd363f025a528c97477b01fe5 (patch) | |
tree | 4de77634fa900599549b2cbfbd83da74bb2d7d9c /config-model | |
parent | d9bec5f3fb608b5cd914196c04c041f7ca2ff8fb (diff) |
Disable fsync on remote storage.
Diffstat (limited to 'config-model')
4 files changed, 29 insertions, 23 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java index 675cbb494dd..1dd5074aedb 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java @@ -44,7 +44,7 @@ import static java.util.stream.Collectors.toList; public class ContentSearchCluster extends AbstractConfigProducer<SearchCluster> implements ProtonConfig.Producer, DispatchConfig.Producer { private final boolean flushOnShutdown; - private final boolean syncTransactionLog; + private final Boolean syncTransactionLog; /** If this is set up for streaming search, it is modelled as one search cluster per search definition */ private final Map<String, AbstractSearchCluster> clusters = new TreeMap<>(); @@ -106,7 +106,7 @@ public class ContentSearchCluster extends AbstractConfigProducer<SearchCluster> documentDefinitions, globallyDistributedDocuments, getFlushOnShutdown(flushOnShutdownElem), - getSyncTransactionLog(syncTransactionLog, deployState), + syncTransactionLog, combined); ModelElement tuning = clusterElem.childByPath("engine.proton.tuning"); @@ -126,12 +126,6 @@ public class ContentSearchCluster extends AbstractConfigProducer<SearchCluster> } return true; } - private boolean getSyncTransactionLog(Boolean syncTransactionLogElem, DeployState deployState) { - if (syncTransactionLogElem != null) { - return syncTransactionLogElem; - } - return true; - } private Double getQueryTimeout(ModelElement clusterElem) { return clusterElem.childAsDouble("engine.proton.query-timeout"); @@ -206,7 +200,7 @@ public class ContentSearchCluster extends AbstractConfigProducer<SearchCluster> Map<String, NewDocumentType> documentDefinitions, Set<NewDocumentType> globallyDistributedDocuments, boolean flushOnShutdown, - boolean syncTransactionLog, + Boolean syncTransactionLog, boolean combined) { super(parent, "search"); diff --git a/config-model/src/main/java/com/yahoo/vespa/model/search/SearchNode.java b/config-model/src/main/java/com/yahoo/vespa/model/search/SearchNode.java index 9f129f65281..ab8c36ae99d 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/search/SearchNode.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/search/SearchNode.java @@ -2,9 +2,9 @@ package com.yahoo.vespa.model.search; import com.yahoo.cloud.config.filedistribution.FiledistributorrpcConfig; -import com.yahoo.config.model.api.ModelContext; import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.model.producer.AbstractConfigProducer; +import com.yahoo.config.provision.NodeResources; import com.yahoo.metrics.MetricsmanagerConfig; import com.yahoo.searchlib.TranslogserverConfig; import com.yahoo.vespa.config.content.LoadTypeConfig; @@ -213,6 +213,12 @@ public class SearchNode extends AbstractService implements @Override public void getConfig(TranslogserverConfig.Builder builder) { + Optional<NodeResources> nodeResources = getSpecifiedNodeResources(); + if (nodeResources.isPresent()) { + if (nodeResources.get().storageType() == NodeResources.StorageType.remote) { + builder.usefsync(false); + } + } tls.getConfig(builder); } @@ -272,8 +278,9 @@ public class SearchNode extends AbstractService implements // to make sure the node failer has done its work builder.pruneremoveddocumentsage(4 * 24 * 3600 + 3600 + 60); } - if (getHostResource() != null && ! getHostResource().realResources().isUnspecified()) { - var nodeResourcesTuning = new NodeResourcesTuning(getHostResource().realResources(), + Optional<NodeResources> nodeResources = getSpecifiedNodeResources(); + if (nodeResources.isPresent()) { + var nodeResourcesTuning = new NodeResourcesTuning(nodeResources.get(), tuning.map(Tuning::threadsPerSearch).orElse(1), combined); nodeResourcesTuning.getConfig(builder); @@ -283,6 +290,10 @@ public class SearchNode extends AbstractService implements } } + private Optional<NodeResources> getSpecifiedNodeResources() { + return (getHostResource() != null) ? getHostResource().realResources().asOptional() : Optional.empty(); + } + @Override public HashMap<String, String> getDefaultMetricDimensions() { HashMap<String, String> dimensions = new HashMap<>(); diff --git a/config-model/src/main/java/com/yahoo/vespa/model/search/TransactionLogServer.java b/config-model/src/main/java/com/yahoo/vespa/model/search/TransactionLogServer.java index c24fa6396e7..ed12a161805 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/search/TransactionLogServer.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/search/TransactionLogServer.java @@ -25,8 +25,8 @@ public class TransactionLogServer extends AbstractService { } } - private final boolean useFsync; - public TransactionLogServer(AbstractConfigProducer searchNode, String clusterName, boolean useFsync) { + private final Boolean useFsync; + public TransactionLogServer(AbstractConfigProducer searchNode, String clusterName, Boolean useFsync) { super(searchNode, "transactionlogserver"); portsMeta.on(0).tag("tls"); this.useFsync = useFsync; @@ -37,8 +37,8 @@ public class TransactionLogServer extends AbstractService { public static class Builder extends VespaDomBuilder.DomConfigProducerBuilder<TransactionLogServer> { private final String clusterName; - private final boolean useFsync; - public Builder(String clusterName, boolean useFsync) { + private final Boolean useFsync; + public Builder(String clusterName, Boolean useFsync) { this.clusterName = clusterName; this.useFsync = useFsync; } @@ -79,11 +79,11 @@ public class TransactionLogServer extends AbstractService { } public void getConfig(TranslogserverConfig.Builder builder) { - builder - .listenport(getTlsPort()) - .basedir(getTlsDir()) - .usefsync(useFsync); - + builder.listenport(getTlsPort()) + .basedir(getTlsDir()); + if (useFsync != null) { + builder.usefsync(useFsync); + } } } diff --git a/config-model/src/test/java/com/yahoo/vespa/model/search/test/SearchNodeTest.java b/config-model/src/test/java/com/yahoo/vespa/model/search/test/SearchNodeTest.java index cb98dd3387e..620b5883d29 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/search/test/SearchNodeTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/search/test/SearchNodeTest.java @@ -38,7 +38,7 @@ public class SearchNodeTest { assertEquals(expected, cfg.basedir()); } - private void prepare(MockRoot root, SearchNode node, boolean useFsync) { + private void prepare(MockRoot root, SearchNode node, Boolean useFsync) { Host host = new Host(root, "mockhost"); TransactionLogServer tls = new TransactionLogServer(root, "mycluster", useFsync); tls.setHostResource(new HostResource(host)); @@ -62,6 +62,7 @@ public class SearchNodeTest { @Test public void requireThatSyncIsHonoured() { + assertTrue(getTlsConfig(new TestProperties(), null).usefsync()); assertTrue(getTlsConfig(new TestProperties(), true).usefsync()); assertFalse(getTlsConfig(new TestProperties(), false).usefsync()); } @@ -98,7 +99,7 @@ public class SearchNodeTest { return new MockRoot("", new DeployState.Builder().properties(properties).build()); } - private TranslogserverConfig getTlsConfig(ModelContext.Properties properties, boolean useFsync) { + private TranslogserverConfig getTlsConfig(ModelContext.Properties properties, Boolean useFsync) { MockRoot root = createRoot(properties); SearchNode node = createSearchNode(root); prepare(root, node, useFsync); |