summaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2020-09-22 17:48:45 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2020-09-22 17:48:45 +0000
commit08b9abe47a4a2315a91d999d6ce3d4aceacd25ef (patch)
tree4a734ccea749642431e48e715293edb01a2d9c7b /config-model
parent0de94f433227daa0d2158c8b8cf834cf060edcdb (diff)
Add feature flag control over fsync and compression type in the backend TLS.
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java14
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java2
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/search/TransactionLogServer.java19
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/search/test/SearchNodeTest.java40
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());
+ }
+
}