diff options
6 files changed, 43 insertions, 2 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 6da336ae20c..c2fed838541 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 @@ -99,6 +99,7 @@ public interface ModelContext { @ModelFeatureFlag(owners = {"arnej"}) default boolean newLocationBrokerLogic() { return true; } @ModelFeatureFlag(owners = {"bjorncs"}) default int maxConnectionLifeInHosted() { return 45; } @ModelFeatureFlag(owners = {"geirst", "vekterli"}) default int distributorMergeBusyWait() { return 10; } + @ModelFeatureFlag(owners = {"vekterli", "geirst"}) default boolean distributorEnhancedMaintenanceScheduling() { return false; } } /** Warning: As elsewhere in this package, do not make backwards incompatible changes that will break old config models! */ 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 ce4e5f0c01f..a728dfe71b9 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 @@ -67,6 +67,7 @@ public class TestProperties implements ModelContext.Properties, ModelContext.Fea private int distributorMergeBusyWait = 10; private int docstoreCompressionLevel = 9; private double diskBloatFactor = 0.2; + private boolean distributorEnhancedMaintenanceScheduling = false; @Override public ModelContext.FeatureFlags featureFlags() { return this; } @Override public boolean multitenant() { return multitenant; } @@ -114,6 +115,7 @@ public class TestProperties implements ModelContext.Properties, ModelContext.Fea @Override public int distributorMergeBusyWait() { return distributorMergeBusyWait; } @Override public double diskBloatFactor() { return diskBloatFactor; } @Override public int docstoreCompressionLevel() { return docstoreCompressionLevel; } + @Override public boolean distributorEnhancedMaintenanceScheduling() { return distributorEnhancedMaintenanceScheduling; } public TestProperties docstoreCompressionLevel(int docstoreCompressionLevel) { this.docstoreCompressionLevel = docstoreCompressionLevel; @@ -287,6 +289,11 @@ public class TestProperties implements ModelContext.Properties, ModelContext.Fea return this; } + public TestProperties distributorEnhancedMaintenanceScheduling(boolean enhancedScheduling) { + distributorEnhancedMaintenanceScheduling = enhancedScheduling; + 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 94cf33eae51..fa91dbc2e42 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 @@ -44,6 +44,7 @@ public class DistributorCluster extends AbstractConfigProducer<Distributor> impl private final boolean useThreePhaseUpdates; private final int maxActivationInhibitedOutOfSyncGroups; private final int mergeBusyWait; + private final boolean enhancedMaintenanceScheduling; public static class Builder extends VespaDomBuilder.DomConfigProducerBuilder<DistributorCluster> { @@ -107,11 +108,13 @@ public class DistributorCluster extends AbstractConfigProducer<Distributor> impl boolean useThreePhaseUpdates = deployState.getProperties().featureFlags().useThreePhaseUpdates(); int maxInhibitedGroups = deployState.getProperties().featureFlags().maxActivationInhibitedOutOfSyncGroups(); int mergeBusyWait = deployState.getProperties().featureFlags().distributorMergeBusyWait(); + boolean useEnhancedMaintenanceScheduling = deployState.getProperties().featureFlags().distributorEnhancedMaintenanceScheduling(); return new DistributorCluster(parent, new BucketSplitting.Builder().build(new ModelElement(producerSpec)), gc, hasIndexedDocumentType, useThreePhaseUpdates, - maxInhibitedGroups, mergeBusyWait); + maxInhibitedGroups, mergeBusyWait, + useEnhancedMaintenanceScheduling); } } @@ -119,7 +122,8 @@ public class DistributorCluster extends AbstractConfigProducer<Distributor> impl GcOptions gc, boolean hasIndexedDocumentType, boolean useThreePhaseUpdates, int maxActivationInhibitedOutOfSyncGroups, - int mergeBusyWait) + int mergeBusyWait, + boolean enhancedMaintenanceScheduling) { super(parent, "distributor"); this.parent = parent; @@ -129,6 +133,7 @@ public class DistributorCluster extends AbstractConfigProducer<Distributor> impl this.useThreePhaseUpdates = useThreePhaseUpdates; this.maxActivationInhibitedOutOfSyncGroups = maxActivationInhibitedOutOfSyncGroups; this.mergeBusyWait = mergeBusyWait; + this.enhancedMaintenanceScheduling = enhancedMaintenanceScheduling; } @Override @@ -143,6 +148,7 @@ public class DistributorCluster extends AbstractConfigProducer<Distributor> impl builder.enable_metadata_only_fetch_phase_for_inconsistent_updates(useThreePhaseUpdates); builder.max_activation_inhibited_out_of_sync_groups(maxActivationInhibitedOutOfSyncGroups); builder.inhibit_merge_sending_on_busy_node_duration_sec(mergeBusyWait); + builder.implicitly_clear_bucket_priority_on_schedule(enhancedMaintenanceScheduling); 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 759aad81e5f..0fb7e82c095 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 @@ -1102,6 +1102,23 @@ public class ContentClusterTest extends ContentBaseTest { } @Test + public void distributor_enhanced_maintenance_scheduling_controlled_by_properties() throws Exception { + assertFalse(resolveDistributorEnhancedSchedulingConfig(false)); + assertTrue(resolveDistributorEnhancedSchedulingConfig(true)); + } + + private boolean resolveDistributorEnhancedSchedulingConfig(boolean enhancedScheduling) throws Exception { + var props = new TestProperties(); + if (enhancedScheduling) { + props.distributorEnhancedMaintenanceScheduling(enhancedScheduling); + } + var cluster = createOneNodeCluster(props); + var builder = new StorDistributormanagerConfig.Builder(); + cluster.getDistributorNodes().getConfig(builder); + return (new StorDistributormanagerConfig(builder)).implicitly_clear_bucket_priority_on_schedule(); + } + + @Test public void testDedicatedClusterControllers() { VespaModel noContentModel = createEnd2EndOneNode(new TestProperties().setHostedVespa(true) .setMultitenant(true), 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 b25bbf1a5bb..c994a25602a 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 @@ -194,6 +194,7 @@ public class ModelContextImpl implements ModelContext { private final int distributorMergeBusyWait; private final int docstoreCompressionLevel; private final double diskBloatFactor; + private final boolean distributorEnhancedMaintenanceScheduling; public FeatureFlags(FlagSource source, ApplicationId appId) { this.defaultTermwiseLimit = flagValue(source, appId, Flags.DEFAULT_TERM_WISE_LIMIT); @@ -226,6 +227,7 @@ public class ModelContextImpl implements ModelContext { this.distributorMergeBusyWait = flagValue(source, appId, Flags.DISTRIBUTOR_MERGE_BUSY_WAIT); this.docstoreCompressionLevel = flagValue(source, appId, Flags.DOCSTORE_COMPRESSION_LEVEL); this.diskBloatFactor = flagValue(source, appId, Flags.DISK_BLOAT_FACTOR); + this.distributorEnhancedMaintenanceScheduling = flagValue(source, appId, Flags.DISTRIBUTOR_ENHANCED_MAINTENANCE_SCHEDULING); } @Override public double defaultTermwiseLimit() { return defaultTermwiseLimit; } @@ -260,6 +262,7 @@ public class ModelContextImpl implements ModelContext { @Override public int distributorMergeBusyWait() { return distributorMergeBusyWait; } @Override public double diskBloatFactor() { return diskBloatFactor; } @Override public int docstoreCompressionLevel() { return docstoreCompressionLevel; } + @Override public boolean distributorEnhancedMaintenanceScheduling() { return distributorEnhancedMaintenanceScheduling; } private static <V> V flagValue(FlagSource source, ApplicationId appId, UnboundFlag<? extends V, ?, ?> flag) { return flag.bindTo(source) 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 c8c55faa2c7..043e9007021 100644 --- a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java +++ b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java @@ -335,6 +335,13 @@ public class Flags { "Takes effect at redeploy", ZONE_ID, APPLICATION_ID); + public static final UnboundBooleanFlag DISTRIBUTOR_ENHANCED_MAINTENANCE_SCHEDULING = defineFeatureFlag( + "distributor-enhanced-maintenance-scheduling", false, + List.of("vekterli", "geirst"), "2021-10-14", "2022-01-31", + "Enable enhanced maintenance operation scheduling semantics on the distributor", + "Takes effect at redeploy", + ZONE_ID, APPLICATION_ID); + /** WARNING: public for testing: All flags should be defined in {@link Flags}. */ public static UnboundBooleanFlag defineFeatureFlag(String flagId, boolean defaultValue, List<String> owners, String createdAt, String expiresAt, String description, |