diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2020-07-03 11:10:12 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-07-03 11:10:12 +0200 |
commit | 4279238c4fa15c1a1bb69830d626798f3a54924e (patch) | |
tree | 29f46a5a5fa0a28b6b52cb349a9bf94db06aa05c | |
parent | 2ddd6ac6f825dfc35a8f2cf592b860282a71ffdc (diff) | |
parent | fa5ca8b43d24bf922ee479e752f8af877bd59959 (diff) |
Merge pull request #13791 from vespa-engine/vekterli/add-feature-flag-for-content-node-btree-db
Add feature flag for content node B-tree bucket DB (and remove distributor B-tree flag)
8 files changed, 41 insertions, 36 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 db160c5f6ae..5ca22b695a7 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 @@ -98,7 +98,10 @@ public interface ModelContext { // Select sequencer type use while feeding. String feedSequencerType(); - boolean useDistributorBtreeDb(); + // TODO Remove when 7.247 is last + default boolean useDistributorBtreeDb() { return true; } + + boolean useContentNodeBtreeDb(); boolean useThreePhaseUpdates(); 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 181c4ec100a..a31574eea10 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 @@ -37,7 +37,7 @@ public class TestProperties implements ModelContext.Properties { private Zone zone; private Set<ContainerEndpoint> endpoints = Collections.emptySet(); private boolean useDedicatedNodeForLogserver = false; - private boolean useDistributorBtreeDb = false; + private boolean useContentNodeBtreeDb = false; private boolean useThreePhaseUpdates = false; private double defaultTermwiseLimit = 1.0; private double threadPoolSizeFactor = 0.0; @@ -70,7 +70,7 @@ public class TestProperties implements ModelContext.Properties { @Override public double queueSizeFactor() { return queueSizeFactor; } - @Override public boolean useDistributorBtreeDb() { return useDistributorBtreeDb; } + @Override public boolean useContentNodeBtreeDb() { return useContentNodeBtreeDb; } @Override public boolean useThreePhaseUpdates() { return useThreePhaseUpdates; } @Override public Optional<AthenzDomain> athenzDomain() { return Optional.ofNullable(athenzDomain); } @Override public Optional<ApplicationRoles> applicationRoles() { return Optional.ofNullable(applicationRoles); } @@ -88,8 +88,8 @@ public class TestProperties implements ModelContext.Properties { return this; } - public TestProperties setUseDistributorBtreeDB(boolean useBtreeDb) { - useDistributorBtreeDb = useBtreeDb; + public TestProperties setUseContentNodeBtreeDB(boolean useBtreeDb) { + useContentNodeBtreeDb = useBtreeDb; return this; } 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 0b6b7154a62..25e3efcb78f 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 @@ -41,7 +41,6 @@ public class DistributorCluster extends AbstractConfigProducer<Distributor> impl private final BucketSplitting bucketSplitting; private final GcOptions gc; private final boolean hasIndexedDocumentType; - private final boolean useBtreeDatabase; private final boolean useThreePhaseUpdates; public static class Builder extends VespaDomBuilder.DomConfigProducerBuilder<DistributorCluster> { @@ -103,25 +102,23 @@ public class DistributorCluster extends AbstractConfigProducer<Distributor> impl final ModelElement documentsNode = clusterElement.child("documents"); final GcOptions gc = parseGcOptions(documentsNode); final boolean hasIndexedDocumentType = clusterContainsIndexedDocumentType(documentsNode); - boolean useBtreeDb = deployState.getProperties().useDistributorBtreeDb(); boolean useThreePhaseUpdates = deployState.getProperties().useThreePhaseUpdates(); return new DistributorCluster(parent, new BucketSplitting.Builder().build(new ModelElement(producerSpec)), gc, - hasIndexedDocumentType, useBtreeDb, useThreePhaseUpdates); + hasIndexedDocumentType, useThreePhaseUpdates); } } private DistributorCluster(ContentCluster parent, BucketSplitting bucketSplitting, GcOptions gc, boolean hasIndexedDocumentType, - boolean useBtreeDatabase, boolean useThreePhaseUpdates) + boolean useThreePhaseUpdates) { super(parent, "distributor"); this.parent = parent; this.bucketSplitting = bucketSplitting; this.gc = gc; this.hasIndexedDocumentType = hasIndexedDocumentType; - this.useBtreeDatabase = useBtreeDatabase; this.useThreePhaseUpdates = useThreePhaseUpdates; } @@ -134,7 +131,6 @@ public class DistributorCluster extends AbstractConfigProducer<Distributor> impl } builder.enable_revert(parent.getPersistence().supportRevert()); builder.disable_bucket_activation(hasIndexedDocumentType == false); - builder.use_btree_database(useBtreeDatabase); builder.enable_metadata_only_fetch_phase_for_inconsistent_updates(useThreePhaseUpdates); bucketSplitting.getConfig(builder); diff --git a/config-model/src/main/java/com/yahoo/vespa/model/content/storagecluster/StorServerProducer.java b/config-model/src/main/java/com/yahoo/vespa/model/content/storagecluster/StorServerProducer.java index 36e4554e610..9e4c9bde1e4 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/content/storagecluster/StorServerProducer.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/content/storagecluster/StorServerProducer.java @@ -10,32 +10,36 @@ import com.yahoo.vespa.model.builder.xml.dom.ModelElement; */ public class StorServerProducer implements StorServerConfig.Producer { public static class Builder { - StorServerProducer build(ModelElement element) { + StorServerProducer build(ModelElement element, boolean useBtreeDatabase) { ModelElement tuning = element.child("tuning"); if (tuning == null) { - return new StorServerProducer(ContentCluster.getClusterId(element), null, null); + return new StorServerProducer(ContentCluster.getClusterId(element), null, null, useBtreeDatabase); } ModelElement merges = tuning.child("merges"); if (merges == null) { - return new StorServerProducer(ContentCluster.getClusterId(element), null, null); + return new StorServerProducer(ContentCluster.getClusterId(element), null, null, useBtreeDatabase); } return new StorServerProducer(ContentCluster.getClusterId(element), merges.integerAttribute("max-per-node"), - merges.integerAttribute("max-queue-size")); + merges.integerAttribute("max-queue-size"), + useBtreeDatabase); } } - private String clusterName; - private Integer maxMergesPerNode; - private Integer queueSize; + private final String clusterName; + private final Integer maxMergesPerNode; + private final Integer queueSize; + private final boolean useBtreeDatabase; - public StorServerProducer(String clusterName, Integer maxMergesPerNode, Integer queueSize) { + public StorServerProducer(String clusterName, Integer maxMergesPerNode, + Integer queueSize, boolean useBtreeDatabase) { this.clusterName = clusterName; this.maxMergesPerNode = maxMergesPerNode; this.queueSize = queueSize; + this.useBtreeDatabase = useBtreeDatabase; } @Override @@ -52,5 +56,6 @@ public class StorServerProducer implements StorServerConfig.Producer { if (queueSize != null) { builder.max_merge_queue_size(queueSize); } + builder.use_content_node_btree_bucket_db(useBtreeDatabase); } } diff --git a/config-model/src/main/java/com/yahoo/vespa/model/content/storagecluster/StorageCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/content/storagecluster/StorageCluster.java index 2e5594a001d..0a8abfbd3ad 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/content/storagecluster/StorageCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/content/storagecluster/StorageCluster.java @@ -33,12 +33,13 @@ public class StorageCluster extends AbstractConfigProducer<StorageNode> protected StorageCluster doBuild(DeployState deployState, AbstractConfigProducer ancestor, Element producerSpec) { final ModelElement clusterElem = new ModelElement(producerSpec); final ContentCluster cluster = (ContentCluster)ancestor; + boolean useContentNodeBtreeDb = deployState.getProperties().useContentNodeBtreeDb(); return new StorageCluster(ancestor, ContentCluster.getClusterId(clusterElem), new FileStorProducer.Builder().build(cluster, clusterElem), new IntegrityCheckerProducer.Builder().build(cluster, clusterElem), - new StorServerProducer.Builder().build(clusterElem), + new StorServerProducer.Builder().build(clusterElem, useContentNodeBtreeDb), new StorVisitorProducer.Builder().build(clusterElem), new PersistenceProducer.Builder().build(clusterElem)); } 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 5b3c42df869..1f0ec0ea910 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 @@ -949,20 +949,20 @@ public class ContentClusterTest extends ContentBaseTest { verifyTopKProbabilityPropertiesControl(); } - private boolean resolveDistributorBtreeDbConfigWithFeatureFlag(boolean flagEnabledBtreeDb) { - VespaModel model = createEnd2EndOneNode(new TestProperties().setUseDistributorBtreeDB(flagEnabledBtreeDb)); + private boolean resolveContentNodeBtreeDbConfigWithFeatureFlag(boolean flagEnabledBtreeDb) { + VespaModel model = createEnd2EndOneNode(new TestProperties().setUseContentNodeBtreeDB(flagEnabledBtreeDb)); ContentCluster cc = model.getContentClusters().get("storage"); - var builder = new StorDistributormanagerConfig.Builder(); - cc.getDistributorNodes().getConfig(builder); + var builder = new StorServerConfig.Builder(); + cc.getStorageNodes().getConfig(builder); - return (new StorDistributormanagerConfig(builder)).use_btree_database(); + return (new StorServerConfig(builder)).use_content_node_btree_bucket_db(); } @Test - public void default_distributor_btree_usage_controlled_by_properties() { - assertFalse(resolveDistributorBtreeDbConfigWithFeatureFlag(false)); - assertTrue(resolveDistributorBtreeDbConfigWithFeatureFlag(true)); + public void default_content_node_btree_usage_controlled_by_properties() { + assertFalse(resolveContentNodeBtreeDbConfigWithFeatureFlag(false)); + assertTrue(resolveContentNodeBtreeDbConfigWithFeatureFlag(true)); } private boolean resolveThreePhaseUpdateConfigWithFeatureFlag(boolean flagEnableThreePhase) { 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 b252ee3ef56..77cc1075854 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 @@ -147,7 +147,7 @@ public class ModelContextImpl implements ModelContext { private final Set<ContainerEndpoint> endpoints; private final boolean isBootstrap; private final boolean isFirstTimeDeployment; - private final boolean useDistributorBtreeDb; + private final boolean useContentNodeBtreeDb; private final boolean useThreePhaseUpdates; private final Optional<EndpointCertificateSecrets> endpointCertificateSecrets; private final double defaultTermwiseLimit; @@ -188,7 +188,7 @@ public class ModelContextImpl implements ModelContext { this.endpointCertificateSecrets = endpointCertificateSecrets; defaultTermwiseLimit = Flags.DEFAULT_TERM_WISE_LIMIT.bindTo(flagSource) .with(FetchVector.Dimension.APPLICATION_ID, applicationId.serializedForm()).value(); - useDistributorBtreeDb = Flags.USE_DISTRIBUTOR_BTREE_DB.bindTo(flagSource) + useContentNodeBtreeDb = Flags.USE_CONTENT_NODE_BTREE_DB.bindTo(flagSource) .with(FetchVector.Dimension.APPLICATION_ID, applicationId.serializedForm()).value(); useThreePhaseUpdates = Flags.USE_THREE_PHASE_UPDATES.bindTo(flagSource) .with(FetchVector.Dimension.APPLICATION_ID, applicationId.serializedForm()).value(); @@ -260,8 +260,8 @@ public class ModelContextImpl implements ModelContext { } @Override - public boolean useDistributorBtreeDb() { - return useDistributorBtreeDb; + public boolean useContentNodeBtreeDb() { + return useContentNodeBtreeDb; } @Override 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 79bf994c6ca..60c02b3fd60 100644 --- a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java +++ b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java @@ -152,10 +152,10 @@ public class Flags { "Takes effect at redeployment", ZONE_ID, APPLICATION_ID); - public static final UnboundBooleanFlag USE_DISTRIBUTOR_BTREE_DB = defineFeatureFlag( - "use-distributor-btree-db", true, - "Whether to use the new B-tree bucket database in the distributors.", - "Takes effect at restart of distributor process", + public static final UnboundBooleanFlag USE_CONTENT_NODE_BTREE_DB = defineFeatureFlag( + "use-content-node-btree-db", false, + "Whether to use the new B-tree bucket database on the content node.", + "Takes effect at restart of content node process", ZONE_ID, APPLICATION_ID); public static final UnboundBooleanFlag USE_THREE_PHASE_UPDATES = defineFeatureFlag( |