diff options
Diffstat (limited to 'config-model/src/main/java/com')
9 files changed, 113 insertions, 211 deletions
diff --git a/config-model/src/main/java/com/yahoo/config/model/ConfigModelContext.java b/config-model/src/main/java/com/yahoo/config/model/ConfigModelContext.java index c39eb15b027..f7167147a61 100644 --- a/config-model/src/main/java/com/yahoo/config/model/ConfigModelContext.java +++ b/config-model/src/main/java/com/yahoo/config/model/ConfigModelContext.java @@ -3,6 +3,7 @@ package com.yahoo.config.model; import com.yahoo.config.application.api.ApplicationPackage; import com.yahoo.config.application.api.DeployLogger; +import com.yahoo.config.model.api.ModelContext; import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.model.producer.AbstractConfigProducer; import com.yahoo.vespa.model.VespaModel; @@ -26,7 +27,8 @@ public final class ConfigModelContext { private ConfigModelContext(ApplicationType applicationType, DeployState deployState, - VespaModel vespaModel, ConfigModelRepoAdder configModelRepoAdder, + VespaModel vespaModel, + ConfigModelRepoAdder configModelRepoAdder, AbstractConfigProducer parent, String producerId) { this.applicationType = applicationType; @@ -44,6 +46,7 @@ public final class ConfigModelContext { public DeployState getDeployState() { return deployState; } public ApplicationType getApplicationType() { return applicationType; } public VespaModel vespaModel() { return vespaModel; } + public ModelContext.Properties properties() { return deployState.getProperties(); } /** Returns write access to the config model repo, or null (only) if this is improperly initialized during testing */ public ConfigModelRepoAdder getConfigModelRepoAdder() { return configModelRepoAdder; } diff --git a/config-model/src/main/java/com/yahoo/config/model/admin/AdminModel.java b/config-model/src/main/java/com/yahoo/config/model/admin/AdminModel.java index ff89cd8e41a..b5cadedd454 100644 --- a/config-model/src/main/java/com/yahoo/config/model/admin/AdminModel.java +++ b/config-model/src/main/java/com/yahoo/config/model/admin/AdminModel.java @@ -2,11 +2,11 @@ package com.yahoo.config.model.admin; import com.google.common.collect.ImmutableList; +import com.yahoo.config.model.ApplicationConfigProducerRoot; import com.yahoo.config.model.ConfigModel; import com.yahoo.config.model.ConfigModelContext; import com.yahoo.config.model.ConfigModelRepo; -import com.yahoo.config.model.ApplicationConfigProducerRoot; -import com.yahoo.config.model.deploy.DeployProperties; +import com.yahoo.config.model.api.ModelContext; import com.yahoo.config.model.builder.xml.ConfigModelBuilder; import com.yahoo.config.model.builder.xml.ConfigModelId; import com.yahoo.config.model.deploy.DeployState; @@ -18,7 +18,8 @@ import com.yahoo.vespa.model.container.ContainerCluster; import com.yahoo.vespa.model.container.ContainerModel; import org.w3c.dom.Element; -import java.util.*; +import java.util.Collection; +import java.util.List; /** * Config model adaptor of the Admin class. @@ -77,7 +78,7 @@ public class AdminModel extends ConfigModel { @Override public void doBuild(AdminModel model, Element adminElement, ConfigModelContext modelContext) { AbstractConfigProducer parent = modelContext.getParentProducer(); - DeployProperties properties = modelContext.getDeployState().getProperties(); + ModelContext.Properties properties = modelContext.getDeployState().getProperties(); DomAdminV2Builder domBuilder = new DomAdminV2Builder(modelContext.getApplicationType(), modelContext.getDeployState().getFileRegistry(), properties.multitenant(), @@ -106,7 +107,7 @@ public class AdminModel extends ConfigModel { @Override public void doBuild(AdminModel model, Element adminElement, ConfigModelContext modelContext) { AbstractConfigProducer parent = modelContext.getParentProducer(); - DeployProperties properties = modelContext.getDeployState().getProperties(); + ModelContext.Properties properties = modelContext.getDeployState().getProperties(); DomAdminV4Builder domBuilder = new DomAdminV4Builder(modelContext, properties.multitenant(), properties.configServerSpecs(), diff --git a/config-model/src/main/java/com/yahoo/config/model/deploy/DeployProperties.java b/config-model/src/main/java/com/yahoo/config/model/deploy/DeployProperties.java deleted file mode 100644 index 626b5bfbf5c..00000000000 --- a/config-model/src/main/java/com/yahoo/config/model/deploy/DeployProperties.java +++ /dev/null @@ -1,174 +0,0 @@ -// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -package com.yahoo.config.model.deploy; - -import com.yahoo.config.model.api.ConfigServerSpec; -import com.yahoo.config.provision.ApplicationId; -import com.yahoo.config.provision.HostName; -import com.yahoo.component.Version; - -import java.net.URI; -import java.util.ArrayList; -import java.util.List; - -/** - * Collection of properties for a deployment. - * - * @author Ulf Lilleengen - */ -public class DeployProperties { - - private final boolean multitenant; - private final ApplicationId applicationId; - private final List<ConfigServerSpec> serverSpecs = new ArrayList<>(); - private final HostName loadBalancerName; - private final URI ztsUrl; - private final String athenzDnsSuffix; - private final boolean hostedVespa; - private final Version vespaVersion; - private final boolean isBootstrap; - private final boolean isFirstTimeDeployment; - private final boolean useDedicatedNodeForLogserver; - - - private DeployProperties(boolean multitenant, - ApplicationId applicationId, - List<ConfigServerSpec> configServerSpecs, - HostName loadBalancerName, - boolean hostedVespa, - URI ztsUrl, - String athenzDnsSuffix, - Version vespaVersion, - boolean isBootstrap, - boolean isFirstTimeDeployment, - boolean useDedicatedNodeForLogserver) { - this.loadBalancerName = loadBalancerName; - this.ztsUrl = ztsUrl; - this.athenzDnsSuffix = athenzDnsSuffix; - this.vespaVersion = vespaVersion; - this.multitenant = multitenant || hostedVespa || Boolean.getBoolean("multitenant"); - this.applicationId = applicationId; - this.serverSpecs.addAll(configServerSpecs); - this.hostedVespa = hostedVespa; - this.isBootstrap = isBootstrap; - this.isFirstTimeDeployment = isFirstTimeDeployment; - this.useDedicatedNodeForLogserver = useDedicatedNodeForLogserver; - } - - public boolean multitenant() { - return multitenant; - } - - public ApplicationId applicationId() { - return applicationId; - } - - public List<ConfigServerSpec> configServerSpecs() { - return serverSpecs; - } - - public HostName loadBalancerName() { - return loadBalancerName; - } - - public URI ztsUrl() { - return ztsUrl; - } - - public String athenzDnsSuffix() { - return athenzDnsSuffix; - } - - public boolean hostedVespa() { - return hostedVespa; - } - - /** Returns the config model version this is building */ - public Version vespaVersion() { - return vespaVersion; - } - - /** Returns whether this deployment happens during bootstrap *prepare* (not set on activate) */ - public boolean isBootstrap() { return isBootstrap; } - - /** Returns whether this is the first deployment for this application (used during *prepare*, not set on activate) */ - public boolean isFirstTimeDeployment() { return isFirstTimeDeployment; } - - public boolean useDedicatedNodeForLogserver() { return useDedicatedNodeForLogserver; } - - public static class Builder { - - private ApplicationId applicationId = ApplicationId.defaultId(); - private boolean multitenant = false; - private List<ConfigServerSpec> configServerSpecs = new ArrayList<>(); - private HostName loadBalancerName; - private URI ztsUrl; - private String athenzDnsSuffix; - private boolean hostedVespa = false; - private Version vespaVersion = new Version(1, 0, 0); - private boolean isBootstrap = false; - private boolean isFirstTimeDeployment = false; - private boolean useDedicatedNodeForLogserver = false; - - public Builder applicationId(ApplicationId applicationId) { - this.applicationId = applicationId; - return this; - } - - public Builder multitenant(boolean multitenant) { - this.multitenant = multitenant; - return this; - } - - public Builder configServerSpecs(List<ConfigServerSpec> configServerSpecs) { - this.configServerSpecs = configServerSpecs; - return this; - } - - public Builder loadBalancerName(HostName loadBalancerName) { - this.loadBalancerName = loadBalancerName; - return this; - } - - public Builder athenzDnsSuffix(String athenzDnsSuffix) { - this.athenzDnsSuffix = athenzDnsSuffix; - return this; - } - - public Builder ztsUrl(URI ztsUrl) { - this.ztsUrl = ztsUrl; - return this; - } - - public Builder vespaVersion(Version version) { - this.vespaVersion = version; - return this; - } - - public Builder hostedVespa(boolean hostedVespa) { - this.hostedVespa = hostedVespa; - return this; - } - - public Builder isBootstrap(boolean isBootstrap) { - this.isBootstrap = isBootstrap; - return this; - } - - public Builder isFirstTimeDeployment(boolean isFirstTimeDeployment) { - this.isFirstTimeDeployment = isFirstTimeDeployment; - return this; - } - - public Builder useDedicatedNodeForLogserver(boolean useDedicatedNodeForLogserver) { - this.useDedicatedNodeForLogserver = useDedicatedNodeForLogserver; - return this; - } - - public DeployProperties build() { - return new DeployProperties(multitenant, applicationId, configServerSpecs, loadBalancerName, hostedVespa, - ztsUrl, athenzDnsSuffix, vespaVersion, isBootstrap, isFirstTimeDeployment, - useDedicatedNodeForLogserver); - } - } - -} 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..910eff065d1 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 @@ -2,16 +2,18 @@ package com.yahoo.config.model.deploy; import ai.vespa.rankingexpression.importer.configmodelview.ImportedMlModels; +import ai.vespa.rankingexpression.importer.configmodelview.MlModelImporter; import com.yahoo.component.Version; import com.yahoo.component.Vtag; import com.yahoo.config.application.api.ApplicationPackage; import com.yahoo.config.application.api.DeployLogger; import com.yahoo.config.application.api.FileRegistry; import com.yahoo.config.application.api.UnparsedConfigDefinition; +import com.yahoo.config.application.api.ValidationOverrides; import com.yahoo.config.model.api.ConfigDefinitionRepo; import com.yahoo.config.model.api.HostProvisioner; -import ai.vespa.rankingexpression.importer.configmodelview.MlModelImporter; import com.yahoo.config.model.api.Model; +import com.yahoo.config.model.api.ModelContext; import com.yahoo.config.model.api.ValidationParameters; import com.yahoo.config.model.application.provider.BaseDeployLogger; import com.yahoo.config.model.application.provider.MockFileRegistry; @@ -28,7 +30,6 @@ import com.yahoo.vespa.config.ConfigDefinition; 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.model.container.search.QueryProfiles; import com.yahoo.vespa.model.container.search.QueryProfilesBuilder; import com.yahoo.vespa.model.container.search.SemanticRuleBuilder; @@ -63,7 +64,8 @@ public class DeployState implements ConfigDefinitionStore { private final Optional<ConfigDefinitionRepo> configDefinitionRepo; private final Optional<ApplicationPackage> permanentApplicationPackage; private final Optional<Model> previousModel; - private final DeployProperties properties; + private final ModelContext.Properties properties; + private final Version vespaVersion; private final Set<Rotation> rotations; private final Zone zone; private final QueryProfiles queryProfiles; @@ -88,7 +90,8 @@ public class DeployState implements ConfigDefinitionStore { FileRegistry fileRegistry, DeployLogger deployLogger, Optional<HostProvisioner> hostProvisioner, - DeployProperties properties, + ModelContext.Properties properties, + Version vespaVersion, Optional<ApplicationPackage> permanentApplicationPackage, Optional<ConfigDefinitionRepo> configDefinitionRepo, java.util.Optional<Model> previousModel, @@ -104,6 +107,7 @@ public class DeployState implements ConfigDefinitionStore { this.rankProfileRegistry = rankProfileRegistry; this.applicationPackage = applicationPackage; this.properties = properties; + this.vespaVersion = vespaVersion; this.previousModel = previousModel; this.provisioner = hostProvisioner.orElse(getDefaultModelHostProvisioner(applicationPackage)); this.searchDefinitions = searchDocumentModel.getSearchDefinitions(); @@ -210,7 +214,9 @@ public class DeployState implements ConfigDefinitionStore { return permanentApplicationPackage; } - public DeployProperties getProperties() { return properties; } + public ModelContext.Properties getProperties() { return properties; } + + public Version getVespaVersion() { return vespaVersion; } public Optional<Model> getPreviousModel() { return previousModel; } @@ -243,7 +249,8 @@ public class DeployState implements ConfigDefinitionStore { private DeployLogger logger = new BaseDeployLogger(); private Optional<HostProvisioner> hostProvisioner = Optional.empty(); private Optional<ApplicationPackage> permanentApplicationPackage = Optional.empty(); - private DeployProperties properties = new DeployProperties.Builder().build(); + private ModelContext.Properties properties = new TestProperties(); + private Version version = new Version(1, 0, 0); private Optional<ConfigDefinitionRepo> configDefinitionRepo = Optional.empty(); private Optional<Model> previousModel = Optional.empty(); private Set<Rotation> rotations = new HashSet<>(); @@ -277,11 +284,16 @@ public class DeployState implements ConfigDefinitionStore { return this; } - public Builder properties(DeployProperties properties) { + public Builder properties(ModelContext.Properties properties) { this.properties = properties; return this; } + public Builder vespaVersion(Version version) { + this.version = version; + return this; + } + public Builder configDefinitionRepo(ConfigDefinitionRepo configDefinitionRepo) { this.configDefinitionRepo = Optional.of(configDefinitionRepo); return this; @@ -333,6 +345,7 @@ public class DeployState implements ConfigDefinitionStore { logger, hostProvisioner, properties, + version, permanentApplicationPackage, configDefinitionRepo, previousModel, 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 new file mode 100644 index 00000000000..83e595e1513 --- /dev/null +++ b/config-model/src/main/java/com/yahoo/config/model/deploy/TestProperties.java @@ -0,0 +1,76 @@ +// Copyright 2019 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. +package com.yahoo.config.model.deploy; + +import com.google.common.collect.ImmutableList; +import com.yahoo.config.model.api.ConfigServerSpec; +import com.yahoo.config.model.api.ModelContext; +import com.yahoo.config.provision.ApplicationId; +import com.yahoo.config.provision.HostName; +import com.yahoo.config.provision.Rotation; +import com.yahoo.config.provision.Zone; +import com.yahoo.vespa.model.admin.Configserver; + +import java.net.URI; +import java.util.Collections; +import java.util.List; +import java.util.Set; + +/** + * A test-only Properties class + * + * <p>Unfortunately this has to be placed in non-test source tree since lots of code already have test code (fix later) + * + * @author hakonhall + */ +public class TestProperties implements ModelContext.Properties { + private boolean multitenant = false; + private ApplicationId applicationId = ApplicationId.defaultId(); + private List<ConfigServerSpec> configServerSpecs = Collections.emptyList(); + private HostName loadBalancerName = null; + private URI ztsUrl = null; + private String athenzDnsSuffix = null; + private boolean hostedVespa = false; + private Zone zone; + private Set<Rotation> rotations; + private boolean isBootstrap = false; + private boolean isFirstTimeDeployment = false; + private boolean useDedicatedNodeForLogserver = false; + + @Override public boolean multitenant() { return multitenant; } + @Override public ApplicationId applicationId() { return applicationId; } + @Override public List<ConfigServerSpec> configServerSpecs() { return configServerSpecs; } + @Override public HostName loadBalancerName() { return loadBalancerName; } + @Override public URI ztsUrl() { return ztsUrl; } + @Override public String athenzDnsSuffix() { return athenzDnsSuffix; } + @Override public boolean hostedVespa() { return hostedVespa; } + @Override public Zone zone() { return zone; } + @Override public Set<Rotation> rotations() { return rotations; } + @Override public boolean isBootstrap() { return isBootstrap; } + @Override public boolean isFirstTimeDeployment() { return isFirstTimeDeployment; } + @Override public boolean useDedicatedNodeForLogserver() { return useDedicatedNodeForLogserver; } + + public TestProperties setApplicationId(ApplicationId applicationId) { + this.applicationId = applicationId; + return this; + } + + public TestProperties setHostedVespa(boolean hostedVespa) { + this.hostedVespa = hostedVespa; + return this; + } + + public TestProperties setMultitenant(boolean multitenant) { + this.multitenant = multitenant; + return this; + } + + public TestProperties setConfigServerSpecs(List<Configserver.Spec> configServerSpecs) { + this.configServerSpecs = ImmutableList.copyOf(configServerSpecs); + return this; + } + + public TestProperties setUseDedicatedNodeForLogserver(boolean useDedicatedNodeForLogserver) { + this.useDedicatedNodeForLogserver = useDedicatedNodeForLogserver; + return this; + } +} 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..af6400023cc 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 @@ -1,7 +1,9 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.model; +import ai.vespa.rankingexpression.importer.configmodelview.MlModelImporter; import com.google.inject.Inject; +import com.yahoo.component.Version; import com.yahoo.component.provider.ComponentRegistry; import com.yahoo.config.application.api.ApplicationPackage; import com.yahoo.config.model.ConfigModelRegistry; @@ -10,7 +12,6 @@ import com.yahoo.config.model.NullConfigModelRegistry; import com.yahoo.config.model.api.ConfigChangeAction; import com.yahoo.config.model.api.ConfigModelPlugin; import com.yahoo.config.model.api.HostProvisioner; -import ai.vespa.rankingexpression.importer.configmodelview.MlModelImporter; import com.yahoo.config.model.api.Model; import com.yahoo.config.model.api.ModelContext; import com.yahoo.config.model.api.ModelCreateResult; @@ -18,13 +19,10 @@ import com.yahoo.config.model.api.ModelFactory; import com.yahoo.config.model.api.ValidationParameters; import com.yahoo.config.model.application.provider.ApplicationPackageXmlFilesValidator; import com.yahoo.config.model.builder.xml.ConfigModelBuilder; -import com.yahoo.config.model.deploy.DeployProperties; 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.model.application.validation.Validation; - import org.xml.sax.SAXException; import java.io.IOException; @@ -137,7 +135,8 @@ public class VespaModelFactory implements ModelFactory { .configDefinitionRepo(modelContext.configDefinitionRepo()) .fileRegistry(modelContext.getFileRegistry()) .permanentApplicationPackage(modelContext.permanentApplicationPackage()) - .properties(createDeployProperties(modelContext.properties())) + .properties(modelContext.properties()) + .vespaVersion(version()) .modelHostProvisioner(createHostProvisioner(modelContext)) .rotations(modelContext.properties().rotations()) .modelImporters(modelImporters) @@ -148,22 +147,6 @@ public class VespaModelFactory implements ModelFactory { return builder.build(validationParameters); } - private DeployProperties createDeployProperties(ModelContext.Properties properties) { - return new DeployProperties.Builder() - .applicationId(properties.applicationId()) - .configServerSpecs(properties.configServerSpecs()) - .loadBalancerName(properties.loadBalancerName()) - .ztsUrl(properties.ztsUrl()) - .athenzDnsSuffix(properties.athenzDnsSuffix()) - .multitenant(properties.multitenant()) - .hostedVespa(properties.hostedVespa()) - .vespaVersion(version()) - .isBootstrap(properties.isBootstrap()) - .isFirstTimeDeployment(properties.isFirstTimeDeployment()) - .useDedicatedNodeForLogserver(properties.useDedicatedNodeForLogserver()) - .build(); - } - private static HostProvisioner createHostProvisioner(ModelContext modelContext) { return modelContext.hostProvisioner().orElse( DeployState.getDefaultModelHostProvisioner(modelContext.applicationPackage())); diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/ComponentValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/ComponentValidator.java index 2bedead6b9a..7485bedf788 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/ComponentValidator.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/ComponentValidator.java @@ -37,7 +37,7 @@ public class ComponentValidator extends Validator { @Override public void validate(VespaModel model, DeployState deployState) { ApplicationPackage app = deployState.getApplicationPackage(); - for (ComponentInfo info : app.getComponentsInfo(deployState.getProperties().vespaVersion())) { + for (ComponentInfo info : app.getComponentsInfo(deployState.getVespaVersion())) { try { this.jarFile = new JarFile(app.getFileReference(Path.fromString(info.getPathRelativeToAppDir()))); } catch (ZipException e) { diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/VespaDomBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/VespaDomBuilder.java index 7e98804370f..62b76374af9 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/VespaDomBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/VespaDomBuilder.java @@ -238,7 +238,7 @@ public class VespaDomBuilder extends VespaModelBuilder { ApplicationConfigProducerRoot root = new ApplicationConfigProducerRoot(parent, name, deployState.getDocumentModel(), - deployState.getProperties().vespaVersion(), + deployState.getVespaVersion(), deployState.getProperties().applicationId()); root.setHostSystem(new HostSystem(root, "hosts", deployState.getProvisioner(), deployState.getDeployLogger())); new Client(root); diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java index 7a10a97f4da..b133ea1de4c 100755 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java @@ -350,7 +350,7 @@ public final class ContainerCluster } private void addAndSendApplicationBundles(DeployState deployState) { - for (ComponentInfo component : deployState.getApplicationPackage().getComponentsInfo(deployState.getProperties().vespaVersion())) { + for (ComponentInfo component : deployState.getApplicationPackage().getComponentsInfo(deployState.getVespaVersion())) { FileReference reference = FileSender.sendFileToServices(component.getPathRelativeToAppDir(), containers); applicationBundles.add(reference); } |