aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2020-09-22 13:53:41 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2020-09-22 13:53:41 +0000
commit28f7c0ced6e771fe9fd44d1716d71f3788bf1d5c (patch)
tree2cd97e07a04f53492660e4c8133ecb6ba0bb3c7c
parentfc4520c2727345ff8d67616c4d3bb50b3b765307 (diff)
Control visibility-delay with feature flag.
-rw-r--r--config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java1
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java7
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java1
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/builder/xml/dom/ContentBuilderTest.java35
-rw-r--r--configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java4
-rw-r--r--flags/src/main/java/com/yahoo/vespa/flags/Flags.java6
6 files changed, 48 insertions, 6 deletions
diff --git a/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java b/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java
index 756961933db..e4c203fda6b 100644
--- a/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java
+++ b/config-model-api/src/main/java/com/yahoo/config/model/api/ModelContext.java
@@ -84,6 +84,7 @@ public interface ModelContext {
boolean skipCommunicationManagerThread();
boolean skipMbusRequestThread();
boolean skipMbusReplyThread();
+ double visibilityDelay();
boolean useContentNodeBtreeDb();
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 22bdf31350a..d9cebd2b1d2 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
@@ -41,6 +41,7 @@ public class TestProperties implements ModelContext.Properties {
private double defaultTermwiseLimit = 1.0;
private double threadPoolSizeFactor = 0.0;
private double queueSizeFactor = 0.0;
+ private double visibilityDelay = 0.0;
private String jvmGCOptions = null;
private String sequencerType = "LATENCY";
private String responseSequencerType = "ADAPTIVE";
@@ -83,6 +84,7 @@ public class TestProperties implements ModelContext.Properties {
@Override public boolean skipMbusRequestThread() { return false; }
@Override public boolean skipMbusReplyThread() { return false; }
@Override public Quota quota() { return quota; }
+ @Override public double visibilityDelay() { return visibilityDelay; }
public TestProperties setJvmGCOptions(String gcOptions) {
jvmGCOptions = gcOptions;
@@ -139,6 +141,11 @@ public class TestProperties implements ModelContext.Properties {
return this;
}
+ public TestProperties setVisibilityDelay(double visibilityDelay) {
+ this.visibilityDelay = visibilityDelay;
+ return this;
+ }
+
public TestProperties setMultitenant(boolean multitenant) {
this.multitenant = multitenant;
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 f329f62ee7b..50a6054d1b9 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
@@ -200,6 +200,7 @@ public class ContentSearchCluster extends AbstractConfigProducer implements Prot
this.flushOnShutdown = flushOnShutdown;
this.combined = combined;
feedSequencerType = convertFeedSequencerType(featureFlags.feedSequencerType());
+ visibilityDelay = featureFlags.visibilityDelay();
}
public void setVisibilityDelay(double delay) {
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/builder/xml/dom/ContentBuilderTest.java b/config-model/src/test/java/com/yahoo/vespa/model/builder/xml/dom/ContentBuilderTest.java
index 99f8b8cbb5e..443bd2433c1 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/builder/xml/dom/ContentBuilderTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/builder/xml/dom/ContentBuilderTest.java
@@ -760,15 +760,12 @@ public class ContentBuilderTest extends DomBuilderTest {
}
}
- private void verifyFeedSequencer(String input, String expected) {
- verifyFeedSequencer(input, expected, 0);
- }
- private void verifyFeedSequencer(String input, String expected, double visibilityDelay) {
- String hostedXml = "<services>" +
+ private String xmlWithVisibilityDelay(Double visibilityDelay) {
+ return "<services>" +
"<content version='1.0' id='search'>" +
" <redundancy>1</redundancy>" +
" <search>" +
- " <visibility-delay>" + visibilityDelay + "</visibility-delay>" +
+ ((visibilityDelay != null) ? " <visibility-delay>" + visibilityDelay + "</visibility-delay>" : "") +
" </search>" +
" <documents>" +
" <document type='music' mode='index'/>" +
@@ -776,6 +773,13 @@ public class ContentBuilderTest extends DomBuilderTest {
" <nodes count='1'/>" +
"</content>" +
"</services>";
+ }
+
+ private void verifyFeedSequencer(String input, String expected) {
+ verifyFeedSequencer(input, expected, 0);
+ }
+ private void verifyFeedSequencer(String input, String expected, double visibilityDelay) {
+ String hostedXml = xmlWithVisibilityDelay(visibilityDelay);
DeployState.Builder deployStateBuilder = new DeployState.Builder().properties(new TestProperties().setFeedSequencerType(input));
VespaModel model = new VespaModelCreatorWithMockPkg(new MockApplicationPackage.Builder()
@@ -800,6 +804,25 @@ public class ContentBuilderTest extends DomBuilderTest {
}
+ private void verifyThatFeatureFlagControlsVisibilityDelayDefault(double defaultVisibiliDelay, Double xmlOverride, double expected) {
+ String hostedXml = xmlWithVisibilityDelay(xmlOverride);
+ DeployState.Builder deployStateBuilder = new DeployState.Builder().properties(new TestProperties().setVisibilityDelay(defaultVisibiliDelay));
+ VespaModel model = new VespaModelCreatorWithMockPkg(new MockApplicationPackage.Builder()
+ .withServices(hostedXml)
+ .withSearchDefinition(MockApplicationPackage.MUSIC_SEARCHDEFINITION)
+ .build())
+ .create(deployStateBuilder);
+ ProtonConfig config = getProtonConfig(model.getContentClusters().values().iterator().next());
+ assertEquals(expected, config.documentdb(0).visibilitydelay(), 0.0);
+ }
+ @Test
+ public void verifyThatFeatureFlagControlsVisibilityDelayDefault() {
+ verifyThatFeatureFlagControlsVisibilityDelayDefault(0.0, null, 0.0);
+ verifyThatFeatureFlagControlsVisibilityDelayDefault(0.3, null, 0.3);
+ verifyThatFeatureFlagControlsVisibilityDelayDefault(0.0, 0.5, 0.5);
+ verifyThatFeatureFlagControlsVisibilityDelayDefault(0.3, 0.6, 0.6);
+ }
+
@Test
public void failWhenNoDocumentsElementSpecified() {
expectedException.expect(IllegalArgumentException.class);
diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java b/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java
index 87b0ed965d3..4ac20f6220f 100644
--- a/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java
+++ b/configserver/src/main/java/com/yahoo/vespa/config/server/deploy/ModelContextImpl.java
@@ -164,6 +164,7 @@ public class ModelContextImpl implements ModelContext {
private final Optional<AthenzDomain> athenzDomain;
private final Optional<ApplicationRoles> applicationRoles;
private final double feedCoreThreadPoolSizeFactor;
+ private final double visibilityDelay;
private final Quota quota;
public Properties(ApplicationId applicationId,
@@ -204,6 +205,8 @@ public class ModelContextImpl implements ModelContext {
.with(FetchVector.Dimension.APPLICATION_ID, applicationId.serializedForm()).value();
threadPoolSizeFactor = Flags.DEFAULT_THREADPOOL_SIZE_FACTOR.bindTo(flagSource)
.with(FetchVector.Dimension.APPLICATION_ID, applicationId.serializedForm()).value();
+ visibilityDelay = Flags.VISIBILITY_DELAY.bindTo(flagSource)
+ .with(FetchVector.Dimension.APPLICATION_ID, applicationId.serializedForm()).value();
queueSizefactor = Flags.DEFAULT_QUEUE_SIZE_FACTOR.bindTo(flagSource)
.with(FetchVector.Dimension.APPLICATION_ID, applicationId.serializedForm()).value();
jvmGCOPtions = Flags.JVM_GC_OPTIONS.bindTo(flagSource)
@@ -313,6 +316,7 @@ public class ModelContextImpl implements ModelContext {
@Override public boolean skipMbusRequestThread() { return skipMbusRequestThread; }
@Override public boolean skipMbusReplyThread() { return skipMbusReplyThread; }
@Override public double feedCoreThreadPoolSizeFactor() { return feedCoreThreadPoolSizeFactor; }
+ @Override public double visibilityDelay() { return visibilityDelay; }
@Override public Quota quota() { return quota; }
}
diff --git a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java
index 35b2f05f30b..a6748667b7e 100644
--- a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java
+++ b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java
@@ -196,6 +196,12 @@ public class Flags {
"Takes effect at redeployment",
ZONE_ID, APPLICATION_ID);
+ public static final UnboundDoubleFlag VISIBILITY_DELAY = defineDoubleFlag(
+ "visibility-delay", 0.0,
+ "Default visibility-delay",
+ "Takes effect at redeployment",
+ ZONE_ID, APPLICATION_ID);
+
public static final UnboundBooleanFlag USE_DIRECT_STORAGE_API_RPC = defineFeatureFlag(
"use-direct-storage-api-rpc", false,
"Whether to use direct RPC for Storage API communication between content cluster nodes.",