From 771b37e1fc85081633ee0870868f83ee4db1b3c0 Mon Sep 17 00:00:00 2001 From: Harald Musum Date: Wed, 13 Feb 2019 09:06:34 +0100 Subject: Use VIP status file for config server (and controller) in hosted The code for setting up VIP status is already in place in config model, but depends on value of hostedVespa() in ModelContext.Properties, so have to make sure that is set for standalone container as well. Removing config override for vip status, as setting VIP in or out of rotation when not using a VIP status file is handled when bootstrapping now. --- .../standalone/StandaloneContainerApplication.java | 109 ++++++++++++++++++--- 1 file changed, 96 insertions(+), 13 deletions(-) (limited to 'standalone-container/src/main/java/com/yahoo/container/standalone') diff --git a/standalone-container/src/main/java/com/yahoo/container/standalone/StandaloneContainerApplication.java b/standalone-container/src/main/java/com/yahoo/container/standalone/StandaloneContainerApplication.java index a2e1e36e48f..0c671071ac5 100644 --- a/standalone-container/src/main/java/com/yahoo/container/standalone/StandaloneContainerApplication.java +++ b/standalone-container/src/main/java/com/yahoo/container/standalone/StandaloneContainerApplication.java @@ -15,14 +15,19 @@ import com.yahoo.config.application.api.DeployLogger; import com.yahoo.config.application.api.FileRegistry; import com.yahoo.config.model.ApplicationConfigProducerRoot; import com.yahoo.config.model.ConfigModelRepo; +import com.yahoo.config.model.api.ConfigServerSpec; +import com.yahoo.config.model.api.ModelContext; import com.yahoo.config.model.application.provider.BaseDeployLogger; import com.yahoo.config.model.application.provider.FilesApplicationPackage; import com.yahoo.config.model.application.provider.StaticConfigDefinitionRepo; import com.yahoo.config.model.builder.xml.ConfigModelId; import com.yahoo.config.model.builder.xml.XmlHelper; import com.yahoo.config.model.deploy.DeployState; +import com.yahoo.config.provision.ApplicationId; import com.yahoo.config.provision.Environment; +import com.yahoo.config.provision.HostName; import com.yahoo.config.provision.RegionName; +import com.yahoo.config.provision.Rotation; import com.yahoo.config.provision.SystemName; import com.yahoo.config.provision.Zone; import com.yahoo.container.di.config.SubscriberFactory; @@ -43,12 +48,14 @@ import org.w3c.dom.Element; import java.io.File; import java.io.IOException; +import java.net.URI; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; import java.util.Optional; +import java.util.Set; import java.util.stream.Collectors; import static com.yahoo.collections.CollectionUtil.first; @@ -81,6 +88,7 @@ public class StandaloneContainerApplication implements Application { private final Application configuredApplication; private final Container container; + @SuppressWarnings("WeakerAccess") @Inject public StandaloneContainerApplication(Injector injector) { this.injector = injector; @@ -212,9 +220,9 @@ public class StandaloneContainerApplication implements Application { } } - private static ContainerModelBuilder newContainerModelBuilder(Networking networkingOption) { + private static ContainerModelBuilder newContainerModelBuilder(Networking networkingOption, CloudConfigInstallVariables cloudConfigInstallVariables) { return isConfigServer() ? - new ConfigServerContainerModelBuilder(new CloudConfigInstallVariables()) : + new ConfigServerContainerModelBuilder(cloudConfigInstallVariables) : new ContainerModelBuilder(true, networkingOption); } @@ -238,14 +246,16 @@ public class StandaloneContainerApplication implements Application { .includeSourceFiles(true).preprocessedDir(preprocessedApplicationDir).build(); ApplicationPackage applicationPackage = rawApplicationPackage.preprocess(getZone(), logger); validateApplication(applicationPackage); - DeployState deployState = createDeployState(applicationPackage, fileRegistry, logger); + CloudConfigInstallVariables cloudConfigInstallVariables = new CloudConfigInstallVariables(); + DeployState deployState = createDeployState(applicationPackage, fileRegistry, logger, cloudConfigInstallVariables); VespaModel root = VespaModel.createIncomplete(deployState); ApplicationConfigProducerRoot vespaRoot = new ApplicationConfigProducerRoot(root, "vespa", deployState.getDocumentModel(), deployState.getVespaVersion(), deployState.getProperties().applicationId()); Element spec = containerRootElement(applicationPackage); - ContainerModel containerModel = newContainerModelBuilder(networkingOption).build(deployState, root, configModelRepo, vespaRoot, spec); + ContainerModel containerModel = newContainerModelBuilder(networkingOption, cloudConfigInstallVariables) + .build(deployState, root, configModelRepo, vespaRoot, spec); containerModel.getCluster().prepare(deployState); initializeContainerModel(containerModel, configModelRepo); Container container = first(containerModel.getCluster().getContainers()); @@ -274,19 +284,14 @@ public class StandaloneContainerApplication implements Application { return new Zone(system, environment, region); } - private static DeployState createDeployState(ApplicationPackage applicationPackage, FileRegistry fileRegistry, DeployLogger logger) { + private static DeployState createDeployState(ApplicationPackage applicationPackage, FileRegistry fileRegistry, + DeployLogger logger, CloudConfigInstallVariables cloudConfigInstallVariables) { DeployState.Builder builder = new DeployState.Builder() .applicationPackage(applicationPackage) .fileRegistry(fileRegistry) .deployLogger(logger) - .configDefinitionRepo(configDefinitionRepo); - - /* Temporarily disable until we know how status.html is updated for config servers/controllers - if (isConfigServer()) - builder.properties(new DeployProperties.Builder() - .hostedVespa(new CloudConfigInstallVariables().hostedVespa().orElse(Boolean.FALSE)) - .build()); - */ + .configDefinitionRepo(configDefinitionRepo) + .properties(new StandaloneContainerModelContextProperties(cloudConfigInstallVariables)); return builder.build(); } @@ -340,4 +345,82 @@ public class StandaloneContainerApplication implements Application { return Optional.ofNullable(System.getProperty(name)); // for unit testing } + private static class StandaloneContainerModelContextProperties implements ModelContext.Properties { + private final CloudConfigInstallVariables cloudConfigInstallVariables; + + StandaloneContainerModelContextProperties(CloudConfigInstallVariables cloudConfigInstallVariables) { + this.cloudConfigInstallVariables = cloudConfigInstallVariables; + } + + @Override + public boolean multitenant() { + return cloudConfigInstallVariables.multiTenant().orElse(Boolean.FALSE); + } + + @Override + public ApplicationId applicationId() { + return ApplicationId.defaultId(); + } + + @Override + public List configServerSpecs() { + return null; + } + + @Override + public HostName loadBalancerName() { + return null; + } + + @Override + public URI ztsUrl() { + return null; + } + + @Override + public String athenzDnsSuffix() { + return null; + } + + @Override + public boolean hostedVespa() { + return cloudConfigInstallVariables.hostedVespa().orElse(Boolean.FALSE); + } + + @Override + public Zone zone() { + return null; + } + + @Override + public Set rotations() { + return null; + } + + @Override + public boolean isBootstrap() { + return false; + } + + @Override + public boolean isFirstTimeDeployment() { + return false; + } + + @Override + public boolean useDedicatedNodeForLogserver() { + return false; + } + + @Override + public boolean useFdispatchByDefault() { + return false; + } + + @Override + public boolean useAdaptiveDispatch() { + return false; + } + } + } -- cgit v1.2.3