diff options
author | olaaun <olaa@oath.com> | 2019-01-10 14:20:41 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-01-10 14:20:41 +0100 |
commit | 7a8c964cbc167b617a6c5feb8c62b7585d7e542a (patch) | |
tree | 8d145d5890c6e3451b932602006d9736763ab62a /config-model/src | |
parent | 63e07515f065894330205483af332f781fd6cd76 (diff) |
Added logserver feature flag (#8065)
* Added logserver feature flag
* Let FlagSource be non-optional
* Get flag value for application
* Set default flagSource value where not injected
Diffstat (limited to 'config-model/src')
4 files changed, 38 insertions, 5 deletions
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<ConfigModelPlugin> pluginRegistry, ComponentRegistry<MlModelImporter> modelImporters, - Zone zone) { + Zone zone, FlagSource flagSource) { this.version = new Version(VespaVersion.major, VespaVersion.minor, VespaVersion.micro); List<ConfigModelBuilder> 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); } |