diff options
author | Geir Storli <geirst@verizonmedia.com> | 2021-04-20 13:39:55 +0000 |
---|---|---|
committer | Geir Storli <geirst@verizonmedia.com> | 2021-04-20 13:39:55 +0000 |
commit | aee4a323fd1d02470179d903d133431587ae3971 (patch) | |
tree | 300a329b12ac287bae36835724d1c718ea9845a4 /config-model | |
parent | 901237f0a48223b8971c56c95e0d7b41e3974d33 (diff) |
Add config and feature flag for the number of distributor stripes.
Diffstat (limited to 'config-model')
3 files changed, 38 insertions, 5 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 1402f728c73..3722876a53f 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 @@ -61,6 +61,7 @@ public class TestProperties implements ModelContext.Properties, ModelContext.Fea private int maxActivationInhibitedOutOfSyncGroups = 0; private List<TenantSecretStore> tenantSecretStores = Collections.emptyList(); private String jvmOmitStackTraceInFastThrowOption; + private int numDistributorStripes = 0; @Override public ModelContext.FeatureFlags featureFlags() { return this; } @Override public boolean multitenant() { return multitenant; } @@ -102,6 +103,7 @@ public class TestProperties implements ModelContext.Properties, ModelContext.Fea @Override public int maxActivationInhibitedOutOfSyncGroups() { return maxActivationInhibitedOutOfSyncGroups; } @Override public List<TenantSecretStore> tenantSecretStores() { return tenantSecretStores; } @Override public String jvmOmitStackTraceInFastThrowOption(ClusterSpec.Type type) { return jvmOmitStackTraceInFastThrowOption; } + @Override public int numDistributorStripes() { return numDistributorStripes; } public TestProperties setFeedConcurrency(double feedConcurrency) { this.feedConcurrency = feedConcurrency; @@ -248,6 +250,11 @@ public class TestProperties implements ModelContext.Properties, ModelContext.Fea return this; } + public TestProperties setNumDistributorStripes(int value) { + this.numDistributorStripes = value; + return this; + } + public static class Spec implements ConfigServerSpec { private final String hostName; diff --git a/config-model/src/main/java/com/yahoo/vespa/model/content/DistributorCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/content/DistributorCluster.java index 0e3fee5a749..390c939c4b4 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/content/DistributorCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/content/DistributorCluster.java @@ -43,6 +43,7 @@ public class DistributorCluster extends AbstractConfigProducer<Distributor> impl private final boolean hasIndexedDocumentType; private final boolean useThreePhaseUpdates; private final int maxActivationInhibitedOutOfSyncGroups; + private final int numDistributorStripes; public static class Builder extends VespaDomBuilder.DomConfigProducerBuilder<DistributorCluster> { @@ -105,18 +106,20 @@ public class DistributorCluster extends AbstractConfigProducer<Distributor> impl final boolean hasIndexedDocumentType = clusterContainsIndexedDocumentType(documentsNode); boolean useThreePhaseUpdates = deployState.getProperties().featureFlags().useThreePhaseUpdates(); int maxInhibitedGroups = deployState.getProperties().featureFlags().maxActivationInhibitedOutOfSyncGroups(); + int numDistributorStripes = deployState.getProperties().featureFlags().numDistributorStripes(); return new DistributorCluster(parent, new BucketSplitting.Builder().build(new ModelElement(producerSpec)), gc, hasIndexedDocumentType, useThreePhaseUpdates, - maxInhibitedGroups); + maxInhibitedGroups, numDistributorStripes); } } private DistributorCluster(ContentCluster parent, BucketSplitting bucketSplitting, GcOptions gc, boolean hasIndexedDocumentType, boolean useThreePhaseUpdates, - int maxActivationInhibitedOutOfSyncGroups) + int maxActivationInhibitedOutOfSyncGroups, + int numDistributorStripes) { super(parent, "distributor"); this.parent = parent; @@ -125,6 +128,7 @@ public class DistributorCluster extends AbstractConfigProducer<Distributor> impl this.hasIndexedDocumentType = hasIndexedDocumentType; this.useThreePhaseUpdates = useThreePhaseUpdates; this.maxActivationInhibitedOutOfSyncGroups = maxActivationInhibitedOutOfSyncGroups; + this.numDistributorStripes = numDistributorStripes; } @Override @@ -138,6 +142,7 @@ public class DistributorCluster extends AbstractConfigProducer<Distributor> impl builder.disable_bucket_activation(hasIndexedDocumentType == false); builder.enable_metadata_only_fetch_phase_for_inconsistent_updates(useThreePhaseUpdates); builder.max_activation_inhibited_out_of_sync_groups(maxActivationInhibitedOutOfSyncGroups); + builder.num_distributor_stripes(numDistributorStripes); bucketSplitting.getConfig(builder); } diff --git a/config-model/src/test/java/com/yahoo/vespa/model/content/ContentClusterTest.java b/config-model/src/test/java/com/yahoo/vespa/model/content/ContentClusterTest.java index 811e789752e..677eccfde78 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/content/ContentClusterTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/content/ContentClusterTest.java @@ -1041,14 +1041,19 @@ public class ContentClusterTest extends ContentBaseTest { assertZookeeperServerImplementation("com.yahoo.vespa.zookeeper.VespaZooKeeperAdminImpl"); } - private int resolveMaxInhibitedGroupsConfigWithFeatureFlag(int maxGroups) { - VespaModel model = createEnd2EndOneNode(new TestProperties().maxActivationInhibitedOutOfSyncGroups(maxGroups)); + private StorDistributormanagerConfig resolveStorDistributormanagerConfig(TestProperties props) { + VespaModel model = createEnd2EndOneNode(props); ContentCluster cc = model.getContentClusters().get("storage"); var builder = new StorDistributormanagerConfig.Builder(); cc.getDistributorNodes().getConfig(builder); - return (new StorDistributormanagerConfig(builder)).max_activation_inhibited_out_of_sync_groups(); + return (new StorDistributormanagerConfig(builder)); + } + + private int resolveMaxInhibitedGroupsConfigWithFeatureFlag(int maxGroups) { + var cfg = resolveStorDistributormanagerConfig(new TestProperties().maxActivationInhibitedOutOfSyncGroups(maxGroups)); + return cfg.max_activation_inhibited_out_of_sync_groups(); } @Test @@ -1057,6 +1062,22 @@ public class ContentClusterTest extends ContentBaseTest { assertEquals(2, resolveMaxInhibitedGroupsConfigWithFeatureFlag(2)); } + private int resolveNumDistributorStripesConfigWithFeatureFlag(TestProperties props) { + var cfg = resolveStorDistributormanagerConfig(props); + return cfg.num_distributor_stripes(); + } + + private int resolveNumDistributorStripesConfigWithFeatureFlag(int numStripes) { + return resolveNumDistributorStripesConfigWithFeatureFlag(new TestProperties().setNumDistributorStripes(numStripes)); + } + + @Test + public void num_distributor_stripes_config_controlled_by_properties() { + assertEquals(0, resolveNumDistributorStripesConfigWithFeatureFlag(new TestProperties())); + assertEquals(0, resolveNumDistributorStripesConfigWithFeatureFlag(0)); + assertEquals(1, resolveNumDistributorStripesConfigWithFeatureFlag(1)); + } + @Test public void testDedicatedClusterControllers() { VespaModel noContentModel = createEnd2EndOneNode(new TestProperties().setHostedVespa(true) |