From ce35d16812b84cb91da8a9711ff1df1a79329f6e Mon Sep 17 00:00:00 2001 From: HÃ¥kon Hallingstad Date: Fri, 11 Jan 2019 11:38:12 +0100 Subject: Revert "Revert "Added logserver feature flag (#8065)"" --- config-model/pom.xml | 5 +++++ .../java/com/yahoo/config/model/deploy/DeployState.java | 17 +++++++++++++++-- .../java/com/yahoo/vespa/model/VespaModelFactory.java | 8 +++++++- .../vespa/model/builder/xml/dom/DomAdminV4Builder.java | 12 ++++++++++-- .../com/yahoo/vespa/model/test/VespaModelTester.java | 6 ++++++ flags/src/main/java/com/yahoo/vespa/flags/Flags.java | 9 +++++++-- 6 files changed, 50 insertions(+), 7 deletions(-) diff --git a/config-model/pom.xml b/config-model/pom.xml index 57dbadd94ab..4a99593d505 100644 --- a/config-model/pom.xml +++ b/config-model/pom.xml @@ -298,6 +298,11 @@ mockito-core test + + com.yahoo.vespa + flags + ${project.version} + diff --git a/config-model/src/main/java/com/yahoo/config/model/deploy/DeployState.java b/config-model/src/main/java/com/yahoo/config/model/deploy/DeployState.java index c0d97e43adb..056872f9980 100644 --- a/config-model/src/main/java/com/yahoo/config/model/deploy/DeployState.java +++ b/config-model/src/main/java/com/yahoo/config/model/deploy/DeployState.java @@ -29,6 +29,7 @@ import com.yahoo.vespa.config.ConfigDefinitionBuilder; import com.yahoo.vespa.config.ConfigDefinitionKey; import com.yahoo.vespa.documentmodel.DocumentModel; import com.yahoo.config.application.api.ValidationOverrides; +import com.yahoo.vespa.flags.FlagSource; import com.yahoo.vespa.model.container.search.QueryProfiles; import com.yahoo.vespa.model.container.search.QueryProfilesBuilder; import com.yahoo.vespa.model.container.search.SemanticRuleBuilder; @@ -73,6 +74,7 @@ public class DeployState implements ConfigDefinitionStore { private final Version wantedNodeVespaVersion; private final Instant now; private final HostProvisioner provisioner; + private final FlagSource flagSource; public static DeployState createTestState() { return new Builder().build(); @@ -98,7 +100,8 @@ public class DeployState implements ConfigDefinitionStore { QueryProfiles queryProfiles, SemanticRules semanticRules, Instant now, - Version wantedNodeVespaVersion) { + Version wantedNodeVespaVersion, + FlagSource flagSource) { this.logger = deployLogger; this.fileRegistry = fileRegistry; this.rankProfileRegistry = rankProfileRegistry; @@ -120,6 +123,7 @@ public class DeployState implements ConfigDefinitionStore { this.validationOverrides = applicationPackage.getValidationOverrides().map(ValidationOverrides::fromXml).orElse(ValidationOverrides.empty); this.wantedNodeVespaVersion = wantedNodeVespaVersion; this.now = now; + this.flagSource = flagSource; } public static HostProvisioner getDefaultModelHostProvisioner(ApplicationPackage applicationPackage) { @@ -236,6 +240,8 @@ public class DeployState implements ConfigDefinitionStore { public Instant now() { return now; } + public FlagSource flagSource() { return flagSource; } + public static class Builder { private ApplicationPackage applicationPackage = MockApplicationPackage.createEmpty(); @@ -251,6 +257,7 @@ public class DeployState implements ConfigDefinitionStore { private Zone zone = Zone.defaultZone(); private Instant now = Instant.now(); private Version wantedNodeVespaVersion = Vtag.currentVersion; + private FlagSource flagSource; public Builder applicationPackage(ApplicationPackage applicationPackage) { this.applicationPackage = applicationPackage; @@ -312,6 +319,11 @@ public class DeployState implements ConfigDefinitionStore { return this; } + public Builder flagSource(FlagSource flagSource) { + this.flagSource = flagSource; + return this; + } + public Builder wantedNodeVespaVersion(Version version) { this.wantedNodeVespaVersion = version; return this; @@ -342,7 +354,8 @@ public class DeployState implements ConfigDefinitionStore { queryProfiles, semanticRules, now, - wantedNodeVespaVersion); + wantedNodeVespaVersion, + flagSource); } private SearchDocumentModel createSearchDocumentModel(RankProfileRegistry rankProfileRegistry, diff --git a/config-model/src/main/java/com/yahoo/vespa/model/VespaModelFactory.java b/config-model/src/main/java/com/yahoo/vespa/model/VespaModelFactory.java index d3f4a122b1e..e7bc2daf736 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/VespaModelFactory.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/VespaModelFactory.java @@ -23,6 +23,7 @@ import com.yahoo.config.model.deploy.DeployState; import com.yahoo.component.Version; import com.yahoo.config.provision.Zone; import com.yahoo.vespa.config.VespaVersion; +import com.yahoo.vespa.flags.FlagSource; import com.yahoo.vespa.model.application.validation.Validation; import org.xml.sax.SAXException; @@ -33,6 +34,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.List; +import java.util.Optional; import java.util.logging.Logger; /** @@ -48,12 +50,13 @@ public class VespaModelFactory implements ModelFactory { private final Zone zone; private final Clock clock; private final Version version; + private final FlagSource flagSource; /** Creates a factory for vespa models for this version of the source */ @Inject public VespaModelFactory(ComponentRegistry pluginRegistry, ComponentRegistry modelImporters, - Zone zone) { + Zone zone, FlagSource flagSource) { this.version = new Version(VespaVersion.major, VespaVersion.minor, VespaVersion.micro); List modelBuilders = new ArrayList<>(); for (ConfigModelPlugin plugin : pluginRegistry.allComponents()) { @@ -65,6 +68,7 @@ public class VespaModelFactory implements ModelFactory { this.modelImporters = modelImporters.allComponents(); this.zone = zone; this.clock = Clock.systemUTC(); + this.flagSource = flagSource; } public VespaModelFactory(ConfigModelRegistry configModelRegistry) { @@ -84,6 +88,7 @@ public class VespaModelFactory implements ModelFactory { this.modelImporters = Collections.emptyList(); this.zone = Zone.defaultZone(); this.clock = clock; + this.flagSource = (id, vector) -> Optional.empty(); } /** Returns the version this model is build for */ @@ -143,6 +148,7 @@ public class VespaModelFactory implements ModelFactory { .modelImporters(modelImporters) .zone(zone) .now(clock.instant()) + .flagSource(flagSource) .wantedNodeVespaVersion(modelContext.wantedNodeVespaVersion()); modelContext.previousModel().ifPresent(builder::previousModel); return builder.build(validationParameters); diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV4Builder.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV4Builder.java index 2c23043abea..28cea9843c7 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV4Builder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV4Builder.java @@ -10,6 +10,9 @@ import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.SystemName; import com.yahoo.log.LogLevel; +import com.yahoo.vespa.flags.FetchVector; +import com.yahoo.vespa.flags.FlagSource; +import com.yahoo.vespa.flags.Flags; import com.yahoo.vespa.model.HostResource; import com.yahoo.vespa.model.HostSystem; import com.yahoo.vespa.model.admin.Admin; @@ -100,8 +103,7 @@ public class DomAdminV4Builder extends DomAdminBuilderBase { if (deployState.getProperties().useDedicatedNodeForLogserver() && context.getApplicationType() == ConfigModelContext.ApplicationType.DEFAULT && deployState.isHosted() && - deployState.zone().system() == SystemName.cd && - deployState.zone().environment() == Environment.dev) + logServerFlagValue(deployState)) return NodesSpecification.dedicated(1, context); else return NodesSpecification.nonDedicated(1, context); @@ -223,4 +225,10 @@ public class DomAdminV4Builder extends DomAdminBuilderBase { admin.addSlobroks(slobroks); } + private boolean logServerFlagValue(DeployState deployState) { + return Flags.ENABLE_LOGSERVER.bindTo(deployState.flagSource()) + .with(FetchVector.Dimension.APPLICATION_ID, deployState.getProperties().applicationId().serializedForm()) + .value(); + } + } diff --git a/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java b/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java index 060fe96100d..d3696c6e52f 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/test/VespaModelTester.java @@ -16,6 +16,10 @@ import com.yahoo.config.model.provision.SingleNodeProvisioner; import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.Flavor; import com.yahoo.config.provision.Zone; +import com.yahoo.vespa.flags.FetchVector; +import com.yahoo.vespa.flags.FlagId; +import com.yahoo.vespa.flags.FlagSource; +import com.yahoo.vespa.flags.JsonNodeRawFlag; import com.yahoo.vespa.model.VespaModel; import com.yahoo.vespa.model.test.utils.ApplicationPackageUtils; import com.yahoo.vespa.model.test.utils.VespaModelCreatorWithMockPkg; @@ -140,11 +144,13 @@ public class VespaModelTester { .useDedicatedNodeForLogserver(useDedicatedNodeForLogserver) .build(); + FlagSource flagSource = (FlagId id, FetchVector vector) -> Optional.of(JsonNodeRawFlag.fromJson(String.valueOf(useDedicatedNodeForLogserver))); DeployState deployState = new DeployState.Builder() .applicationPackage(appPkg) .modelHostProvisioner(provisioner) .properties(properties) .zone(zone) + .flagSource(flagSource) .build(); return modelCreatorWithMockPkg.create(false, deployState, configModelRegistry); } 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 545f288af29..e717607c757 100644 --- a/flags/src/main/java/com/yahoo/vespa/flags/Flags.java +++ b/flags/src/main/java/com/yahoo/vespa/flags/Flags.java @@ -8,6 +8,7 @@ import java.util.List; import java.util.Optional; import java.util.TreeMap; +import static com.yahoo.vespa.flags.FetchVector.Dimension.APPLICATION_ID; import static com.yahoo.vespa.flags.FetchVector.Dimension.HOSTNAME; /** @@ -74,8 +75,12 @@ public class Flags { public static final UnboundBooleanFlag ENABLE_CPU_TEMPERATURE_TASK = defineFeatureFlag( "enable-cputemptask", true, "Whether to enable CPU temperature task", "Takes effect on next host admin tick", - HOSTNAME - ); + HOSTNAME); + + public static final UnboundBooleanFlag ENABLE_LOGSERVER = defineFeatureFlag( + "enable-logserver", false, + "Whether to enable logserver.", "Takes effect at redeployment", + APPLICATION_ID); /** WARNING: public for testing: All flags should be defined in {@link Flags}. */ public static UnboundBooleanFlag defineFeatureFlag(String flagId, boolean defaultValue, String description, -- cgit v1.2.3