diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2020-09-22 17:48:45 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2020-09-22 17:48:45 +0000 |
commit | 08b9abe47a4a2315a91d999d6ce3d4aceacd25ef (patch) | |
tree | 4a734ccea749642431e48e715293edb01a2d9c7b /config-model | |
parent | 0de94f433227daa0d2158c8b8cf834cf060edcdb (diff) |
Add feature flag control over fsync and compression type in the backend TLS.
Diffstat (limited to 'config-model')
4 files changed, 71 insertions, 4 deletions
diff --git a/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java b/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java index d9cebd2b1d2..31c72e1be69 100644 --- a/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java +++ b/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java @@ -38,6 +38,8 @@ public class TestProperties implements ModelContext.Properties { private boolean useContentNodeBtreeDb = false; private boolean useThreePhaseUpdates = false; private boolean useDirectStorageApiRpc = false; + private boolean tlsUseFSync = false; + private String tlsCompressionType = "NONE"; private double defaultTermwiseLimit = 1.0; private double threadPoolSizeFactor = 0.0; private double queueSizeFactor = 0.0; @@ -85,6 +87,8 @@ public class TestProperties implements ModelContext.Properties { @Override public boolean skipMbusReplyThread() { return false; } @Override public Quota quota() { return quota; } @Override public double visibilityDelay() { return visibilityDelay; } + @Override public boolean tlsUseFSync() { return tlsUseFSync; } + @Override public String tlsCompressionType() { return tlsCompressionType; } public TestProperties setJvmGCOptions(String gcOptions) { jvmGCOptions = gcOptions; @@ -141,6 +145,16 @@ public class TestProperties implements ModelContext.Properties { return this; } + public TestProperties setTlsUseFSync(boolean useFSync) { + this.tlsUseFSync = useFSync; + return this; + } + + public TestProperties setTlsCompressionType(String type) { + this.tlsCompressionType = type; + return this; + } + public TestProperties setVisibilityDelay(double visibilityDelay) { this.visibilityDelay = visibilityDelay; return this; 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 50a6054d1b9..2198b6e278b 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 @@ -268,7 +268,7 @@ public class ContentSearchCluster extends AbstractConfigProducer implements Prot searchNode.setHostResource(node.getHostResource()); searchNode.initService(deployState.getDeployLogger()); - tls = new TransactionLogServer(searchNode, clusterName); + tls = new TransactionLogServer(searchNode, clusterName, deployState.getProperties()); tls.setHostResource(searchNode.getHostResource()); tls.initService(deployState.getDeployLogger()); } else { 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 2c457940f24..347250176e5 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 @@ -1,6 +1,7 @@ // 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.search; +import com.yahoo.config.model.api.ModelContext; import com.yahoo.config.model.deploy.DeployState; import com.yahoo.searchlib.TranslogserverConfig; import com.yahoo.config.model.producer.AbstractConfigProducer; @@ -15,12 +16,24 @@ import org.w3c.dom.Element; public class TransactionLogServer extends AbstractService { private static final long serialVersionUID = 1L; + private final boolean useFSync; + private final TranslogserverConfig.Compression.Type.Enum compressionType; - public TransactionLogServer(AbstractConfigProducer searchNode, String clusterName) { + private static TranslogserverConfig.Compression.Type.Enum convertCompressionType(String type) { + try { + return TranslogserverConfig.Compression.Type.Enum.valueOf(type); + } catch (Throwable t) { + return TranslogserverConfig.Compression.Type.NONE; + } + } + + public TransactionLogServer(AbstractConfigProducer searchNode, String clusterName, ModelContext.Properties featureFlags) { super(searchNode, "transactionlogserver"); portsMeta.on(0).tag("tls"); setProp("clustername", clusterName); setProp("clustertype", "search"); + useFSync = featureFlags.tlsUseFSync(); + compressionType = convertCompressionType(featureFlags.tlsCompressionType()); } public static class Builder extends VespaDomBuilder.DomConfigProducerBuilder<TransactionLogServer> { @@ -31,7 +44,7 @@ public class TransactionLogServer extends AbstractService { @Override protected TransactionLogServer doBuild(DeployState deployState, AbstractConfigProducer ancestor, Element producerSpec) { - return new TransactionLogServer(ancestor, clusterName); + return new TransactionLogServer(ancestor, clusterName, deployState.getProperties()); } } @@ -65,6 +78,8 @@ public class TransactionLogServer extends AbstractService { public void getConfig(TranslogserverConfig.Builder builder) { builder.listenport(getTlsPort()).basedir(getTlsDir()); + builder.usefsync(useFSync); + builder.compression.type(compressionType); } } 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 9c69ba8f212..a04a4f196cf 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 @@ -1,8 +1,12 @@ // 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.search.test; +import com.yahoo.config.model.api.ModelContext; +import com.yahoo.config.model.deploy.DeployState; +import com.yahoo.config.model.deploy.TestProperties; import com.yahoo.config.model.producer.AbstractConfigProducer; import com.yahoo.config.model.test.MockRoot; +import com.yahoo.searchlib.TranslogserverConfig; import com.yahoo.vespa.config.search.core.ProtonConfig; import com.yahoo.vespa.defaults.Defaults; import com.yahoo.vespa.model.Host; @@ -36,7 +40,7 @@ public class SearchNodeTest { private void prepare(MockRoot root, SearchNode node) { Host host = new Host(root, "mockhost"); - TransactionLogServer tls = new TransactionLogServer(root, "mycluster"); + TransactionLogServer tls = new TransactionLogServer(root, "mycluster", root.getDeployState().getProperties()); tls.setHostResource(new HostResource(host)); tls.setBasePort(100); tls.initService(root.deployLogger()); @@ -52,6 +56,10 @@ public class SearchNodeTest { return SearchNode.create(parent, name, distributionKey, nodeSpec, "mycluster", null, flushOnShutDown, Optional.empty(), Optional.empty(), isHosted, combined); } + private static SearchNode createSearchNode(MockRoot root) { + return createSearchNode(root, "mynode", 3, new NodeSpec(7, 5), true, true, false); + } + @Test public void requireThatBasedirIsCorrectForElasticMode() { MockRoot root = new MockRoot(""); @@ -80,4 +88,34 @@ public class SearchNodeTest { CoreMatchers.containsString("vespa-proton-cmd " + node.getRpcPort() + " prepareRestart")); } + private MockRoot createRoot(ModelContext.Properties properties) { + return new MockRoot("", new DeployState.Builder().properties(properties).build()); + } + + private TranslogserverConfig getTlsConfig(ModelContext.Properties properties) { + MockRoot root = createRoot(properties); + SearchNode node = createSearchNode(root); + prepare(root, node); + TranslogserverConfig.Builder tlsBuilder = new TranslogserverConfig.Builder(); + node.getConfig(tlsBuilder); + return tlsBuilder.build(); + } + + @Test + public void requireThaFeatureFlagCanControlTlsUseFSync() { + assertFalse(getTlsConfig(new TestProperties()).usefsync()); + assertFalse(getTlsConfig(new TestProperties().setTlsUseFSync(false)).usefsync()); + assertTrue(getTlsConfig(new TestProperties().setTlsUseFSync(true)).usefsync()); + } + + @Test + public void requireThaFeatureFlagCanControlCompressionType() { + assertEquals(TranslogserverConfig.Compression.Type.NONE, getTlsConfig(new TestProperties()).compression().type()); + assertEquals(TranslogserverConfig.Compression.Type.NONE, getTlsConfig(new TestProperties().setTlsCompressionType("NONE")).compression().type()); + assertEquals(TranslogserverConfig.Compression.Type.NONE_MULTI, getTlsConfig(new TestProperties().setTlsCompressionType("NONE_MULTI")).compression().type()); + assertEquals(TranslogserverConfig.Compression.Type.ZSTD, getTlsConfig(new TestProperties().setTlsCompressionType("ZSTD")).compression().type()); + assertEquals(TranslogserverConfig.Compression.Type.LZ4, getTlsConfig(new TestProperties().setTlsCompressionType("LZ4")).compression().type()); + assertEquals(TranslogserverConfig.Compression.Type.NONE, getTlsConfig(new TestProperties().setTlsCompressionType("zstd")).compression().type()); + } + } |