diff options
5 files changed, 49 insertions, 45 deletions
diff --git a/config-model/src/main/java/com/yahoo/config/model/builder/xml/ConfigModelBuilder.java b/config-model/src/main/java/com/yahoo/config/model/builder/xml/ConfigModelBuilder.java index 711a3d1e72b..bb0d24f9b26 100644 --- a/config-model/src/main/java/com/yahoo/config/model/builder/xml/ConfigModelBuilder.java +++ b/config-model/src/main/java/com/yahoo/config/model/builder/xml/ConfigModelBuilder.java @@ -14,7 +14,6 @@ import org.w3c.dom.Element; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.util.List; -import java.util.Optional; /** * Builds a config model using DOM parsers diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/Container.java b/config-model/src/main/java/com/yahoo/vespa/model/container/Container.java index 063c295e33c..442d6bbf368 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/container/Container.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/container/Container.java @@ -3,7 +3,6 @@ package com.yahoo.vespa.model.container; import com.yahoo.component.ComponentId; import com.yahoo.component.ComponentSpecification; -import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.model.producer.AbstractConfigProducer; import com.yahoo.container.ComponentsConfig; import com.yahoo.container.QrConfig; @@ -39,8 +38,8 @@ import static com.yahoo.container.QrConfig.Rpc; /** * @author gjoranv - * @author einarmr - * @author tonytv + * @author Einar M R Rosenvinge + * @author Tony Vaagenes */ //qr is restart because it is handled by ConfiguredApplication.start @RestartConfigs({QrStartConfig.class, QrConfig.class}) @@ -59,14 +58,8 @@ public class Container extends AbstractService implements private final boolean isHostedVespa; private String clusterName = null; - private boolean rpcServerEnabled = true; - private Optional<String> hostResponseHeaderKey = Optional.empty(); - // TODO: move these up to cluster - private boolean httpServerEnabled = true; - private boolean messageBusEnabled = true; - /** Whether this node has been marked as retired (e.g, will be removed) */ private final boolean retired; /** The unique index of this node */ @@ -84,10 +77,10 @@ public class Container extends AbstractService implements private static final String defaultHostedJVMArgs = "-XX:+UseOSErrorReporting -XX:+SuppressFatalErrorMessage"; public Container(AbstractConfigProducer parent, String name, int index) { - this(parent, name, Collections.<PortOverride>emptyList(), index); + this(parent, name, Collections.emptyList(), index); } public Container(AbstractConfigProducer parent, String name, boolean retired, int index) { - this(parent, name, retired, Collections.<PortOverride>emptyList(), index); + this(parent, name, retired, Collections.emptyList(), index); } public Container(AbstractConfigProducer parent, String name, List<PortOverride> portOverrides, int index) { this(parent, name, false, portOverrides, index); @@ -159,6 +152,8 @@ public class Container extends AbstractService implements @Override public void initService() { + if (isInitialized()) return; + // XXX: Must be called first, to set the baseport super.initService(); @@ -179,7 +174,7 @@ public class Container extends AbstractService implements for (int i = 1; i < numHttpServerPorts; i++) portsMeta.on(i).tag("http").tag("external"); - if (rpcServerEnabled) { + if (rpcServerEnabled()) { portsMeta.on(numHttpServerPorts + 0).tag("rpc").tag("messaging"); portsMeta.on(numHttpServerPorts + 1).tag("rpc").tag("admin"); } @@ -252,7 +247,7 @@ public class Container extends AbstractService implements */ public int getPortCount() { int httpPorts = (getHttp() != null) ? 0 : numHttpServerPorts + 2; // TODO remove +2, only here to keep irrelevant unit tests from failing. - int rpcPorts = (isRpcServerEnabled()) ? numRpcServerPorts : 0; + int rpcPorts = (rpcServerEnabled()) ? numRpcServerPorts : 0; return httpPorts + rpcPorts; } @@ -268,7 +263,7 @@ public class Container extends AbstractService implements } private int getRpcPort() { - return isRpcServerEnabled() ? getRelativePort(numHttpServerPorts + 1) : 0; + return rpcServerEnabled() ? getRelativePort(numHttpServerPorts + 1) : 0; } private int getMessagingPort() { @@ -286,7 +281,7 @@ public class Container extends AbstractService implements return getRelativePort(0); } } else { - return httpServerEnabled ? getSearchPort() : -1; + return httpServerEnabled() ? getSearchPort() : -1; } } @@ -294,15 +289,11 @@ public class Container extends AbstractService implements return "PRELOAD=" + getPreLoad() + " exec vespa-start-container-daemon " + getJvmArgs() + " "; } - public boolean isRpcServerEnabled() { - return rpcServerEnabled; - } - @Override public void getConfig(QrConfig.Builder builder) { builder. rpc(new Rpc.Builder() - .enabled(isRpcServerEnabled()) + .enabled(rpcServerEnabled()) .port(getRpcPort()) .slobrokId(serviceSlobrokId())). filedistributor(filedistributorConfig()); @@ -352,7 +343,7 @@ public class Container extends AbstractService implements private void addAllEnabledComponents(Collection<Component<?, ?>> allComponents, AbstractConfigProducer<?> current) { for (AbstractConfigProducer<?> child: current.getChildren().values()) { - if ( ! httpServerEnabled && isHttpServer(child)) continue; + if ( ! httpServerEnabled() && isHttpServer(child)) continue; if (child instanceof Component) allComponents.add((Component<?, ?>) child); @@ -378,7 +369,7 @@ public class Container extends AbstractService implements @Override public void getConfig(ContainerMbusConfig.Builder builder) { - builder.enabled(messageBusEnabled).port(getMessagingPort()); + builder.enabled(messageBusEnabled()).port(getMessagingPort()); } @Override @@ -389,14 +380,17 @@ public class Container extends AbstractService implements return dimensions; } - public void setRpcServerEnabled(boolean rpcServerEnabled) { - this.rpcServerEnabled = rpcServerEnabled; + private boolean messageBusEnabled() { + return containerCluster().isPresent() && containerCluster().get().messageBusEnabled(); } - public void setHttpServerEnabled(boolean httpServerEnabled) { - this.httpServerEnabled = httpServerEnabled; + private boolean httpServerEnabled() { + return containerCluster().isPresent() && containerCluster().get().httpServerEnabled(); } + private boolean rpcServerEnabled() { + return containerCluster().isPresent() && containerCluster().get().rpcServerEnabled(); + } public static final class PortOverride { public final ComponentSpecification serverId; @@ -408,4 +402,8 @@ public class Container extends AbstractService implements } } + private Optional<ContainerCluster> containerCluster() { + return (parent instanceof ContainerCluster) ? Optional.of((ContainerCluster) parent) : Optional.empty(); + } + } 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 6ee525c1246..a627525ab77 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 @@ -14,7 +14,6 @@ import com.yahoo.config.docproc.SchemamappingConfig; import com.yahoo.config.model.ApplicationConfigProducerRoot; import com.yahoo.config.model.deploy.DeployState; import com.yahoo.config.model.producer.AbstractConfigProducer; -import com.yahoo.config.model.producer.AbstractConfigProducerRoot; import com.yahoo.config.provision.Zone; import com.yahoo.container.BundlesConfig; import com.yahoo.container.ComponentsConfig; @@ -152,6 +151,8 @@ public final class ContainerCluster public static final String ROOT_HANDLER_BINDING = "*://*/"; + private static final boolean messageBusEnabled = true; + private final String name; private List<Container> containers = new ArrayList<>(); @@ -164,6 +165,8 @@ public final class ContainerCluster private SecretStore secretStore; private MbusParams mbusParams; + private boolean rpcServerEnabled = true; + private boolean httpServerEnabled = true; private final Set<FileReference> applicationBundles = new LinkedHashSet<>(); private final Set<Path> platformBundles = new LinkedHashSet<>(); @@ -805,6 +808,16 @@ public final class ContainerCluster */ public Optional<Integer> getMemoryPercentage() { return memoryPercentage; } + boolean messageBusEnabled() { return messageBusEnabled; } + + public void setRpcServerEnabled(boolean rpcServerEnabled) { this.rpcServerEnabled = rpcServerEnabled; } + + boolean rpcServerEnabled() { return rpcServerEnabled; } + + boolean httpServerEnabled() { return httpServerEnabled; } + + public void setHttpServerEnabled(boolean httpServerEnabled) { this.httpServerEnabled = httpServerEnabled; } + @Override public String toString() { return "container cluster '" + getName() + "'"; 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 39aba9cfdf9..372b3b146a1 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 @@ -71,7 +71,6 @@ import java.util.Map; import java.util.Optional; import java.util.Set; import java.util.function.Consumer; -import java.util.logging.Logger; import java.util.stream.Collectors; /** @@ -87,13 +86,15 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { /** * Path to vip status file for container in Hosted Vespa. Only used if set, else use HOSTED_VESPA_STATUS_FILE */ - static final String HOSTED_VESPA_STATUS_FILE_INSTALL_SETTING = "cloudconfig_server__tenant_vip_status_file"; + private static final String HOSTED_VESPA_STATUS_FILE_INSTALL_SETTING = "cloudconfig_server__tenant_vip_status_file"; public enum Networking { disable, enable } private ApplicationPackage app; private final boolean standaloneBuilder; private final Networking networking; + private final boolean rpcServerEnabled; + private final boolean httpServerEnabled; protected DeployLogger log; public static final List<ConfigModelId> configModelIds = @@ -102,12 +103,13 @@ 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; this.networking = networking; + // Always disable rpc server for standalone container + this.rpcServerEnabled = !standaloneBuilder; + this.httpServerEnabled = networking == Networking.enable; } @Override @@ -124,6 +126,8 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { ContainerCluster cluster = createContainerCluster(spec, modelContext); addClusterContent(cluster, spec, modelContext); addBundlesForPlatformComponents(cluster); + cluster.setRpcServerEnabled(rpcServerEnabled); + cluster.setHttpServerEnabled(httpServerEnabled); model.setCluster(cluster); } @@ -159,7 +163,6 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { addDefaultHandlers(cluster); addStatusHandlers(cluster, context); - addDefaultComponents(cluster); setDefaultMetricConsumerFactory(cluster); addHttp(spec, cluster); @@ -241,9 +244,6 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { addConfiguredComponents(cluster, spec, "component"); } - protected void addDefaultComponents(ContainerCluster cluster) { - } - protected void setDefaultMetricConsumerFactory(ContainerCluster cluster) { cluster.setDefaultMetricConsumerFactory(MetricDefaultsConfig.Factory.Enum.STATE_MONITOR); } @@ -442,8 +442,7 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> { Container node = new Container(cluster, "container.0", 0); HostResource host = allocateSingleNodeHost(cluster, log, containerElement, context); node.setHostResource(host); - if ( ! node.isInitialized() ) // TODO: Fold this into initService - node.initService(); + node.initService(); cluster.addContainers(Collections.singleton(node)); } else { diff --git a/standalone-container/src/main/scala/com/yahoo/container/standalone/StandaloneContainerApplication.scala b/standalone-container/src/main/scala/com/yahoo/container/standalone/StandaloneContainerApplication.scala index 50ad6c73daa..5271cd400d4 100644 --- a/standalone-container/src/main/scala/com/yahoo/container/standalone/StandaloneContainerApplication.scala +++ b/standalone-container/src/main/scala/com/yahoo/container/standalone/StandaloneContainerApplication.scala @@ -172,7 +172,6 @@ object StandaloneContainerApplication { deployState.getDocumentModel, deployState.getProperties.vespaVersion(), deployState.getProperties.applicationId()) - val spec = containerRootElement(applicationPackage) val containerModel = newContainerModelBuilder(networkingOption).build(deployState, configModelRepo, vespaRoot, spec) @@ -180,14 +179,10 @@ object StandaloneContainerApplication { DeprecationSuppressor.initializeContainerModel(containerModel, configModelRepo) val container = first(containerModel.getCluster().getContainers) - // TODO: If we can do the mutations below on the builder, we can separate out model finalization from the - // VespaModel constructor, such that the above and below code to finalize the container can be + // TODO: Separate out model finalization from the VespaModel constructor, + // such that the above and below code to finalize the container can be // replaced by root.finalize(); - // Always disable rpc server for standalone container. This server will soon be removed anyway. - container.setRpcServerEnabled(false) - container.setHttpServerEnabled(networkingOption == Networking.enable) - initializeContainer(container, spec) root.freezeModelTopology() |