diff options
10 files changed, 76 insertions, 14 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 5b79415c132..eef90975035 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 @@ -10,6 +10,7 @@ import com.yahoo.config.provision.Rotation; import com.yahoo.config.provision.Zone; import java.io.File; +import java.net.URI; import java.util.List; import java.util.Optional; import java.util.Set; @@ -41,6 +42,7 @@ public interface ModelContext { boolean multitenant(); ApplicationId applicationId(); List<ConfigServerSpec> configServerSpecs(); + URI loadBalancerAddress(); boolean hostedVespa(); Zone zone(); Set<Rotation> rotations(); 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 index aec4c5b3ec6..942320ecd40 100644 --- 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 @@ -2,8 +2,11 @@ package com.yahoo.config.model.deploy; import com.yahoo.config.model.api.ConfigServerSpec; -import com.yahoo.config.provision.*; +import com.yahoo.config.provision.ApplicationId; +import com.yahoo.config.provision.Version; +import com.yahoo.config.provision.Zone; +import java.net.URI; import java.util.ArrayList; import java.util.List; @@ -18,6 +21,7 @@ public class DeployProperties { private final boolean multitenant; private final ApplicationId applicationId; private final List<ConfigServerSpec> serverSpecs = new ArrayList<>(); + private final URI loadBalancerAddress; private final boolean hostedVespa; private final Version vespaVersion; private final Zone zone; @@ -25,7 +29,11 @@ public class DeployProperties { private DeployProperties(boolean multitenant, ApplicationId applicationId, List<ConfigServerSpec> configServerSpecs, - boolean hostedVespa, Version vespaVersion, Zone zone) { + URI loadBalancerAddress, + boolean hostedVespa, + Version vespaVersion, + Zone zone) { + this.loadBalancerAddress = loadBalancerAddress; this.vespaVersion = vespaVersion; this.zone = zone; this.multitenant = multitenant || hostedVespa || Boolean.getBoolean("multitenant"); @@ -47,6 +55,10 @@ public class DeployProperties { return serverSpecs; } + public URI loadBalancerAddress() { + return loadBalancerAddress; + } + public boolean hostedVespa() { return hostedVespa; } @@ -63,6 +75,7 @@ public class DeployProperties { private ApplicationId applicationId = ApplicationId.defaultId(); private boolean multitenant = false; private List<ConfigServerSpec> configServerSpecs = new ArrayList<>(); + private URI loadBalancerAddress; private boolean hostedVespa = false; private Version vespaVersion = Version.fromIntValues(1, 0, 0); private Zone zone = Zone.defaultZone(); @@ -82,6 +95,11 @@ public class DeployProperties { return this; } + public Builder loadBalancerAddress(URI loadBalancerAddress) { + this.loadBalancerAddress = loadBalancerAddress; + return this; + } + public Builder vespaVersion(Version version) { this.vespaVersion = version; return this; @@ -98,7 +116,7 @@ public class DeployProperties { } public DeployProperties build() { - return new DeployProperties(multitenant, applicationId, configServerSpecs, hostedVespa, vespaVersion, zone); + return new DeployProperties(multitenant, applicationId, configServerSpecs, loadBalancerAddress, hostedVespa, vespaVersion, zone); } } 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 fc27f9e8dc7..56db1542de8 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 @@ -147,6 +147,7 @@ public class VespaModelFactory implements ModelFactory { return new DeployProperties.Builder() .applicationId(properties.applicationId()) .configServerSpecs(properties.configServerSpecs()) + .loadBalancerAddress(properties.loadBalancerAddress()) .multitenant(properties.multitenant()) .hostedVespa(properties.hostedVespa()) .vespaVersion(getVersion()) diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java index ce9d0ed27f1..32f2a59a881 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java @@ -18,6 +18,7 @@ import com.yahoo.config.provision.ClusterSpec; import com.yahoo.config.provision.Environment; import com.yahoo.config.provision.NodeType; import com.yahoo.container.jdisc.config.MetricDefaultsConfig; +import com.yahoo.log.LogLevel; import com.yahoo.search.rendering.RendererRegistry; import com.yahoo.text.XML; import com.yahoo.vespa.defaults.Defaults; @@ -58,12 +59,14 @@ import com.yahoo.vespa.model.content.StorageGroup; import org.w3c.dom.Element; import org.w3c.dom.Node; +import java.net.URI; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.function.Consumer; +import java.util.logging.Logger; import java.util.stream.Collectors; /** @@ -93,6 +96,8 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { private static final String xmlRendererId = RendererRegistry.xmlRendererId.getName(); private static final String jsonRendererId = RendererRegistry.jsonRendererId.getName(); + private static final Logger logger = Logger.getLogger(ContainerModelBuilder.class.getName()); + public ContainerModelBuilder(boolean standaloneBuilder, Networking networking) { super(ContainerModel.class); this.standaloneBuilder = standaloneBuilder; @@ -163,7 +168,8 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { // Athenz copper argos // NOTE: Must be done after addNodes() - addIdentity(spec, cluster, context.getDeployState().getProperties().configServerSpecs()); + addIdentity(spec, cluster, context.getDeployState().getProperties().configServerSpecs(), + context.getDeployState().getProperties().loadBalancerAddress()); //TODO: overview handler, see DomQrserverClusterBuilder } @@ -691,13 +697,19 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { } } - private void addIdentity(Element element, ContainerCluster cluster, List<ConfigServerSpec> configServerSpecs) { + private void addIdentity(Element element, ContainerCluster cluster, List<ConfigServerSpec> configServerSpecs, URI loadBalancerAddress) { Element identityElement = XML.getChild(element, "identity"); if(identityElement != null) { String domain = XML.getValue(XML.getChild(identityElement, "domain")); String service = XML.getValue(XML.getChild(identityElement, "service")); + // TODO: Remove after verifying that this is propagated correctly + logger.log(LogLevel.INFO, String.format("loadBalancerAddress: %s", loadBalancerAddress)); + // TODO: Inject the load balancer address. For now only add first configserver + // TODO: The loadBalancerAddress is a URI, not specific host. + // TODO: Either rename loadBalancerAddress -> loadBalancerName (or similar) or + // TODO: make consumers of it use URI. String cfgHostName = configServerSpecs.stream().findFirst().map(ConfigServerSpec::getHostName) .orElse(""); // How to test this? diff --git a/config-model/src/test/java/com/yahoo/config/model/MockModelContext.java b/config-model/src/test/java/com/yahoo/config/model/MockModelContext.java index 83b5003579e..ff37fb1fad3 100644 --- a/config-model/src/test/java/com/yahoo/config/model/MockModelContext.java +++ b/config-model/src/test/java/com/yahoo/config/model/MockModelContext.java @@ -14,6 +14,7 @@ import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.Rotation; import com.yahoo.config.provision.Zone; +import java.net.URI; import java.util.Collections; import java.util.HashSet; import java.util.List; @@ -95,6 +96,11 @@ public class MockModelContext implements ModelContext { } @Override + public URI loadBalancerAddress() { + return null; + } + + @Override public boolean hostedVespa() {return false; } @Override diff --git a/config-model/src/test/java/com/yahoo/vespa/model/VespaModelFactoryTest.java b/config-model/src/test/java/com/yahoo/vespa/model/VespaModelFactoryTest.java index cef94c97a2c..873883716e4 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/VespaModelFactoryTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/VespaModelFactoryTest.java @@ -27,6 +27,7 @@ import com.yahoo.config.provision.Zone; import org.junit.Before; import org.junit.Test; +import java.net.URI; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; @@ -193,6 +194,11 @@ public class VespaModelFactoryTest { public List<ConfigServerSpec> configServerSpecs() { return Collections.emptyList(); } + + @Override + public URI loadBalancerAddress() { + return null; + } }; } }; 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 70b677b4057..1b96ba46907 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 @@ -11,6 +11,7 @@ import com.yahoo.config.provision.Rotation; import com.yahoo.config.provision.Zone; import java.io.File; +import java.net.URI; import java.util.List; import java.util.Optional; import java.util.Set; @@ -132,6 +133,7 @@ public class ModelContextImpl implements ModelContext { private final ApplicationId applicationId; private final boolean multitenant; private final List<ConfigServerSpec> configServerSpecs; + private final URI loadBalancerAddress; private final boolean hostedVespa; private final Zone zone; private final Set<Rotation> rotations; @@ -139,12 +141,14 @@ public class ModelContextImpl implements ModelContext { public Properties(ApplicationId applicationId, boolean multitenant, List<ConfigServerSpec> configServerSpecs, + URI loadBalancerAddress, boolean hostedVespa, Zone zone, Set<Rotation> rotations) { this.applicationId = applicationId; this.multitenant = multitenant; this.configServerSpecs = configServerSpecs; + this.loadBalancerAddress = loadBalancerAddress; this.hostedVespa = hostedVespa; this.zone = zone; this.rotations = rotations; @@ -166,6 +170,11 @@ public class ModelContextImpl implements ModelContext { } @Override + public URI loadBalancerAddress() { + return loadBalancerAddress; + } + + @Override public boolean hostedVespa() { return hostedVespa; } diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ModelsBuilder.java b/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ModelsBuilder.java index af4d998c347..fac73dcac77 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ModelsBuilder.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/modelfactory/ModelsBuilder.java @@ -19,6 +19,7 @@ import com.yahoo.vespa.config.server.deploy.ModelContextImpl; import com.yahoo.vespa.config.server.http.UnknownVespaVersionException; import com.yahoo.vespa.config.server.provision.StaticProvisioner; +import java.net.URI; import java.time.Instant; import java.util.ArrayList; import java.util.Collections; @@ -170,9 +171,10 @@ public abstract class ModelsBuilder<MODELRESULT extends ModelResult> { ConfigserverConfig configserverConfig, Zone zone, Set<Rotation> rotations) { - return new ModelContextImpl.Properties(applicationId, + return new ModelContextImpl.Properties(applicationId, configserverConfig.multitenant(), ConfigServerSpec.fromConfig(configserverConfig), + URI.create(configserverConfig.loadBalancerAddress()), configserverConfig.hostedVespa(), zone, rotations); diff --git a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java index 31be18d9b22..6154be52bcc 100644 --- a/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java +++ b/configserver/src/main/java/com/yahoo/vespa/config/server/session/SessionPreparer.java @@ -9,26 +9,33 @@ import com.yahoo.config.application.api.DeployLogger; import com.yahoo.config.application.api.FileRegistry; import com.yahoo.config.model.api.ConfigDefinitionRepo; import com.yahoo.config.model.api.ModelContext; -import com.yahoo.config.provision.*; +import com.yahoo.config.provision.AllocatedHosts; +import com.yahoo.config.provision.ApplicationId; +import com.yahoo.config.provision.OutOfCapacityException; +import com.yahoo.config.provision.Rotation; +import com.yahoo.config.provision.Version; +import com.yahoo.config.provision.Zone; import com.yahoo.lang.SettableOptional; import com.yahoo.log.LogLevel; import com.yahoo.path.Path; -import com.yahoo.vespa.config.server.application.ApplicationSet; import com.yahoo.vespa.config.server.ConfigServerSpec; +import com.yahoo.vespa.config.server.application.ApplicationSet; import com.yahoo.vespa.config.server.application.PermanentApplicationPackage; -import com.yahoo.vespa.config.server.modelfactory.ModelFactoryRegistry; -import com.yahoo.vespa.config.server.tenant.Rotations; import com.yahoo.vespa.config.server.configchange.ConfigChangeActions; import com.yahoo.vespa.config.server.deploy.ModelContextImpl; import com.yahoo.vespa.config.server.deploy.ZooKeeperDeployer; import com.yahoo.vespa.config.server.http.InvalidApplicationException; +import com.yahoo.vespa.config.server.modelfactory.ModelFactoryRegistry; import com.yahoo.vespa.config.server.modelfactory.PreparedModelsBuilder; import com.yahoo.vespa.config.server.provision.HostProvisionerProvider; - +import com.yahoo.vespa.config.server.tenant.Rotations; import com.yahoo.vespa.curator.Curator; import org.xml.sax.SAXException; +import javax.xml.parsers.ParserConfigurationException; +import javax.xml.transform.TransformerException; import java.io.IOException; +import java.net.URI; import java.time.Instant; import java.util.List; import java.util.Map; @@ -37,9 +44,6 @@ import java.util.Set; import java.util.logging.Logger; import java.util.stream.Collectors; -import javax.xml.parsers.ParserConfigurationException; -import javax.xml.transform.TransformerException; - /** * A SessionPreparer is responsible for preparing a session given an application package. * @@ -148,6 +152,7 @@ public class SessionPreparer { this.properties = new ModelContextImpl.Properties(params.getApplicationId(), configserverConfig.multitenant(), ConfigServerSpec.fromConfig(configserverConfig), + URI.create(configserverConfig.loadBalancerAddress()), configserverConfig.hostedVespa(), zone, rotationsSet); diff --git a/configserver/src/test/java/com/yahoo/vespa/config/server/ModelContextImplTest.java b/configserver/src/test/java/com/yahoo/vespa/config/server/ModelContextImplTest.java index b53f82b25f3..aed0a6a9750 100644 --- a/configserver/src/test/java/com/yahoo/vespa/config/server/ModelContextImplTest.java +++ b/configserver/src/test/java/com/yahoo/vespa/config/server/ModelContextImplTest.java @@ -45,6 +45,7 @@ public class ModelContextImplTest { ApplicationId.defaultId(), true, Collections.emptyList(), + null, false, Zone.defaultZone(), rotations), |