summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/ApplicationConfigProducerRoot.java5
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/ConfigModel.java4
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/ConfigModelRepo.java4
-rw-r--r--config-model/src/main/java/com/yahoo/config/model/admin/AdminModel.java7
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/derived/DerivedConfiguration.java6
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/Host.java4
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java51
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/VespaDomBuilder.java38
-rwxr-xr-xconfig-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java28
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/ContainerModel.java5
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java17
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/content/Content.java18
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java35
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/content/cluster/ContentCluster.java5
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/search/IndexedSearchCluster.java18
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/search/SearchCluster.java8
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/search/StreamingSearchCluster.java18
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/container/jersey/xml/RestApiTest.java2
-rw-r--r--standalone-container/src/main/java/com/yahoo/container/standalone/StandaloneContainerApplication.java2
19 files changed, 125 insertions, 150 deletions
diff --git a/config-model/src/main/java/com/yahoo/config/model/ApplicationConfigProducerRoot.java b/config-model/src/main/java/com/yahoo/config/model/ApplicationConfigProducerRoot.java
index da79e34b3ad..7a5969585e9 100644
--- a/config-model/src/main/java/com/yahoo/config/model/ApplicationConfigProducerRoot.java
+++ b/config-model/src/main/java/com/yahoo/config/model/ApplicationConfigProducerRoot.java
@@ -2,7 +2,6 @@
package com.yahoo.config.model;
import com.yahoo.cloud.config.*;
-import com.yahoo.config.model.deploy.DeployState;
import com.yahoo.config.provision.ApplicationId;
import com.yahoo.config.provision.Version;
import com.yahoo.vespa.config.content.LoadTypeConfig;
@@ -126,11 +125,11 @@ public class ApplicationConfigProducerRoot extends AbstractConfigProducer<Abstra
}
// TODO: Do this as another config model depending on the other models
- public void setupRouting(DeployState deployState, VespaModel vespaModel, ConfigModelRepo configModels) {
+ public void setupRouting(VespaModel vespaModel, ConfigModelRepo configModels) {
if (admin != null) {
Routing routing = configModels.getRouting();
if (routing == null) {
- routing = new Routing(ConfigModelContext.create(deployState, vespaModel, configModels, this, "routing"));
+ routing = new Routing(ConfigModelContext.create(vespaModel, configModels, this, "routing"));
configModels.add(routing);
}
this.routing = routing;
diff --git a/config-model/src/main/java/com/yahoo/config/model/ConfigModel.java b/config-model/src/main/java/com/yahoo/config/model/ConfigModel.java
index b4a5a865b9e..385cd883da4 100644
--- a/config-model/src/main/java/com/yahoo/config/model/ConfigModel.java
+++ b/config-model/src/main/java/com/yahoo/config/model/ConfigModel.java
@@ -1,8 +1,6 @@
// 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;
-import com.yahoo.config.model.deploy.DeployState;
-
/**
* A config model is an abstract representation of a subsystem, which is used
* by the builder of that subsystem to derive a config producer tree for the subsystem, and by other
@@ -54,7 +52,7 @@ public abstract class ConfigModel {
*
* @param configModelRepo The ConfigModelRepo of the system model
*/
- public void prepare(ConfigModelRepo configModelRepo, DeployState deployState) { return; }
+ public void prepare(ConfigModelRepo configModelRepo) { return; }
/**
* <p>Returns whether this model must be maintained in memory for serving config requests.
diff --git a/config-model/src/main/java/com/yahoo/config/model/ConfigModelRepo.java b/config-model/src/main/java/com/yahoo/config/model/ConfigModelRepo.java
index f14a1ea3c2c..60089f04572 100644
--- a/config-model/src/main/java/com/yahoo/config/model/ConfigModelRepo.java
+++ b/config-model/src/main/java/com/yahoo/config/model/ConfigModelRepo.java
@@ -215,9 +215,9 @@ public class ConfigModelRepo implements ConfigModelRepoAdder, Serializable, Iter
* Initialize part 2.:
* Prepare all config models for starting. Must be called after plugins are loaded and frozen.
*/
- public void prepareConfigModels(DeployState deployState) {
+ public void prepareConfigModels() {
for (ConfigModel model : configModels) {
- model.prepare(this, deployState);
+ model.prepare(ConfigModelRepo.this);
}
}
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 113262d0734..8fff69e11a6 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
@@ -9,7 +9,6 @@ import com.yahoo.config.model.ApplicationConfigProducerRoot;
import com.yahoo.config.model.deploy.DeployProperties;
import com.yahoo.config.model.builder.xml.ConfigModelBuilder;
import com.yahoo.config.model.builder.xml.ConfigModelId;
-import com.yahoo.config.model.deploy.DeployState;
import com.yahoo.config.model.producer.AbstractConfigProducer;
import com.yahoo.vespa.model.admin.Admin;
import com.yahoo.vespa.model.builder.xml.dom.DomAdminV2Builder;
@@ -45,12 +44,12 @@ public class AdminModel extends ConfigModel {
private Collection<ContainerModel> getContainerModels() { return containerModels; }
@Override
- public void prepare(ConfigModelRepo configModelRepo, DeployState deployState) {
+ public void prepare(ConfigModelRepo configModelRepo) {
verifyClusterControllersOnlyDefinedForContent(configModelRepo);
if (admin == null) return;
if (admin.getClusterControllers() != null)
- admin.getClusterControllers().prepare(deployState);
- admin.getLogServerContainerCluster().ifPresent((ContainerCluster cc) -> cc.prepare(deployState));
+ admin.getClusterControllers().prepare();
+ admin.getLogServerContainerCluster().ifPresent(ContainerCluster::prepare);
}
private void verifyClusterControllersOnlyDefinedForContent(ConfigModelRepo configModelRepo) {
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/derived/DerivedConfiguration.java b/config-model/src/main/java/com/yahoo/searchdefinition/derived/DerivedConfiguration.java
index 0c5c7733dda..7c2d9a3b0ad 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/derived/DerivedConfiguration.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/derived/DerivedConfiguration.java
@@ -16,6 +16,7 @@ import com.yahoo.searchlib.rankingexpression.integration.ml.ImportedModels;
import java.io.IOException;
import java.io.Writer;
+import java.util.List;
/**
* A set of all derived configuration of a search definition. Use this as a facade to individual configurations when
@@ -50,7 +51,7 @@ public class DerivedConfiguration {
RankProfileRegistry rankProfileRegistry,
QueryProfileRegistry queryProfiles,
ImportedModels importedModels) {
- this(search, new BaseDeployLogger(), rankProfileRegistry, queryProfiles, importedModels);
+ this(search, null, new BaseDeployLogger(), rankProfileRegistry, queryProfiles, importedModels);
}
/**
@@ -59,12 +60,15 @@ public class DerivedConfiguration {
* @param search The search to derive a configuration from. Derived objects will be snapshots, but this
* argument is live. Which means that this object will be inconsistent when the given
* search definition is later modified.
+ * @param abstractSearchList Search definition this one inherits from, only superclass configuration should be
+ * generated. Null or empty list if there is none.
* @param deployLogger a {@link DeployLogger} for logging when
* doing operations on this
* @param rankProfileRegistry a {@link com.yahoo.searchdefinition.RankProfileRegistry}
* @param queryProfiles the query profiles of this application
*/
public DerivedConfiguration(Search search,
+ List<Search> abstractSearchList,
DeployLogger deployLogger,
RankProfileRegistry rankProfileRegistry,
QueryProfileRegistry queryProfiles,
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/Host.java b/config-model/src/main/java/com/yahoo/vespa/model/Host.java
index ac56875270d..624a9fd4da7 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/Host.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/Host.java
@@ -37,10 +37,10 @@ public final class Host extends AbstractConfigProducer<AbstractConfigProducer<?>
this.runsConfigServer = runsConfigServer;
this.hostname = hostname;
if (parent instanceof HostSystem)
- checkName(hostname);
+ checkName((HostSystem) parent, hostname);
}
- private void checkName(String hostname) {
+ private void checkName(HostSystem parent, String hostname) {
// Give a warning if the host does not exist
try {
Object address = java.net.InetAddress.getByName(hostname);
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java b/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java
index dc7efefe24b..67067b37c5d 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java
@@ -99,18 +99,18 @@ public final class VespaModel extends AbstractConfigProducerRoot implements Seri
private static final long serialVersionUID = 1L;
public static final Logger log = Logger.getLogger(VespaModel.class.getPackage().toString());
- private final ConfigModelRepo configModelRepo = new ConfigModelRepo();
+ private ConfigModelRepo configModelRepo = new ConfigModelRepo();
private final AllocatedHosts allocatedHosts;
/** The config id for the root config producer */
public static final String ROOT_CONFIGID = "";
- private final ApplicationConfigProducerRoot root;
+ private ApplicationConfigProducerRoot root;
private final ApplicationPackage applicationPackage;
/** Generic service instances - service clusters which have no specific model */
- private final List<ServiceCluster> serviceClusters = new ArrayList<>();
+ private List<ServiceCluster> serviceClusters = new ArrayList<>();
/** The global rank profiles of this model */
private final RankProfileList rankProfileList;
@@ -119,7 +119,6 @@ public final class VespaModel extends AbstractConfigProducerRoot implements Seri
private final RankingConstants rankingConstants = new RankingConstants();
private DeployState deployState;
- private DeployLogger deployLogger;
/** The validation overrides of this. This is never null. */
private final ValidationOverrides validationOverrides;
@@ -160,15 +159,16 @@ public final class VespaModel extends AbstractConfigProducerRoot implements Seri
private VespaModel(ConfigModelRegistry configModelRegistry, DeployState deployState, boolean complete, FileDistributor fileDistributor) throws IOException, SAXException {
super("vespamodel");
+ this.deployState = deployState;
this.validationOverrides = deployState.validationOverrides();
configModelRegistry = new VespaConfigModelRegistry(configModelRegistry);
VespaModelBuilder builder = new VespaDomBuilder();
this.applicationPackage = deployState.getApplicationPackage();
root = builder.getRoot(VespaModel.ROOT_CONFIGID, deployState, this);
- HostSystem hostSystem = root.getHostSystem();
- createGlobalRankProfiles(deployState.getDeployLogger(), deployState.getImportedModels(),
- deployState.rankProfileRegistry(), deployState.getQueryProfiles());
+ createGlobalRankProfiles(deployState.getImportedModels(),
+ deployState.rankProfileRegistry(),
+ deployState.getQueryProfiles());
this.rankProfileList = new RankProfileList(null, // null search -> global
rankingConstants,
AttributeFields.empty,
@@ -177,26 +177,22 @@ public final class VespaModel extends AbstractConfigProducerRoot implements Seri
deployState.getImportedModels());
if (complete) { // create a a completed, frozen model
- this.deployLogger = deployState.getDeployLogger();
- this.deployState = deployState;
configModelRepo.readConfigModels(deployState, this, builder, root, configModelRegistry);
- this.deployState = null;
addServiceClusters(deployState.getApplicationPackage(), builder);
- this.allocatedHosts = AllocatedHosts.withHosts(hostSystem.getHostSpecs()); // must happen after the two lines above
- setupRouting(deployState);
+ this.allocatedHosts = AllocatedHosts.withHosts(root.getHostSystem().getHostSpecs()); // must happen after the two lines above
+
+ setupRouting();
this.fileDistributor = root.getFileDistributionConfigProducer().getFileDistributor();
- getAdmin().addPerHostServices(hostSystem.getHosts(), deployState);
- this.deployLogger = null;
+ getAdmin().addPerHostServices(getHostSystem().getHosts(), deployState);
freezeModelTopology();
root.prepare(configModelRepo);
- configModelRepo.prepareConfigModels(deployState);
+ configModelRepo.prepareConfigModels();
validateWrapExceptions();
+ this.deployState = null;
}
else { // create a model with no services instantiated and the given file distributor
- this.allocatedHosts = AllocatedHosts.withHosts(hostSystem.getHostSpecs());
+ this.allocatedHosts = AllocatedHosts.withHosts(root.getHostSystem().getHostSpecs());
this.fileDistributor = fileDistributor;
- this.deployState = deployState;
- this.deployLogger = deployState.getDeployLogger();
}
}
@@ -230,7 +226,7 @@ public final class VespaModel extends AbstractConfigProducerRoot implements Seri
* Creates a rank profile not attached to any search definition, for each imported model in the application package,
* and adds it to the given rank profile registry.
*/
- private void createGlobalRankProfiles(DeployLogger deployLogger, ImportedModels importedModels,
+ private void createGlobalRankProfiles(ImportedModels importedModels,
RankProfileRegistry rankProfileRegistry,
QueryProfiles queryProfiles) {
if ( ! importedModels.all().isEmpty()) { // models/ directory is available
@@ -253,14 +249,16 @@ public final class VespaModel extends AbstractConfigProducerRoot implements Seri
convertedModel.expressions().values().forEach(f -> profile.addFunction(f, false));
}
}
- new Processing().processRankProfiles(deployLogger, rankProfileRegistry, queryProfiles, true, false);
+ new Processing().processRankProfiles(deployState.getDeployLogger(),
+ rankProfileRegistry,
+ queryProfiles, true, false);
}
/** Returns the global rank profiles as a rank profile list */
public RankProfileList rankProfileList() { return rankProfileList; }
- private void setupRouting(DeployState deployState) {
- root.setupRouting(deployState, this, configModelRepo);
+ private void setupRouting() {
+ root.setupRouting(this, configModelRepo);
}
/** Returns the one and only HostSystem of this VespaModel */
@@ -271,9 +269,9 @@ public final class VespaModel extends AbstractConfigProducerRoot implements Seri
/** Return a collection of all hostnames used in this application */
@Override
public Set<HostInfo> getHosts() {
- return getHostSystem().getHosts().stream()
- .map(HostResource::getHostInfo)
- .collect(Collectors.toCollection(LinkedHashSet::new));
+ return root.getHostSystem().getHosts().stream()
+ .map(HostResource::getHostInfo)
+ .collect(Collectors.toCollection(LinkedHashSet::new));
}
public FileDistributor getFileDistributor() {
@@ -318,6 +316,7 @@ public final class VespaModel extends AbstractConfigProducerRoot implements Seri
}
}
+
/**
* Populates an instance of configClass with config produced by configProducer.
*/
@@ -617,7 +616,7 @@ public final class VespaModel extends AbstractConfigProducerRoot implements Seri
@Override
public DeployLogger deployLogger() {
- return deployLogger;
+ return getDeployState().getDeployLogger();
}
}
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 0e29c69c53e..1e41fc70104 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
@@ -1,25 +1,18 @@
// 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.builder.xml.dom;
+import com.yahoo.config.model.*;
import com.yahoo.config.application.api.ApplicationPackage;
-import com.yahoo.config.model.ApplicationConfigProducerRoot;
-import com.yahoo.config.model.ConfigModel;
-import com.yahoo.config.model.ConfigModelRepo;
import com.yahoo.config.model.api.HostProvisioner;
import com.yahoo.config.model.deploy.DeployProperties;
import com.yahoo.config.model.deploy.DeployState;
import com.yahoo.config.model.builder.xml.XmlHelper;
import com.yahoo.config.model.producer.AbstractConfigProducer;
-import com.yahoo.config.model.producer.AbstractConfigProducerRoot;
import com.yahoo.config.model.producer.UserConfigRepo;
import com.yahoo.log.LogLevel;
import com.yahoo.text.XML;
import com.yahoo.vespa.documentmodel.DocumentModel;
-import com.yahoo.vespa.model.AbstractService;
-import com.yahoo.vespa.model.Affinity;
-import com.yahoo.vespa.model.Client;
-import com.yahoo.vespa.model.HostSystem;
-import com.yahoo.vespa.model.SimpleConfigProducer;
+import com.yahoo.vespa.model.*;
import com.yahoo.vespa.model.builder.UserConfigBuilder;
import com.yahoo.vespa.model.builder.VespaModelBuilder;
import com.yahoo.vespa.model.container.ContainerCluster;
@@ -95,7 +88,7 @@ public class VespaDomBuilder extends VespaModelBuilder {
public ApplicationConfigProducerRoot getRoot(String name, DeployState deployState, AbstractConfigProducer parent) {
try {
return new DomRootBuilder(name, deployState).
- build(deployState, parent, XmlHelper.getDocument(deployState.getApplicationPackage().getServices()).getDocumentElement());
+ build(parent, XmlHelper.getDocument(deployState.getApplicationPackage().getServices()).getDocumentElement());
} catch (Exception e) {
throw new IllegalArgumentException(e);
}
@@ -120,16 +113,12 @@ public class VespaDomBuilder extends VespaModelBuilder {
// TODO: find good way to provide access to app package
public final T build(AbstractConfigProducer ancestor, Element producerSpec) {
- return build(ancestor.getRoot().getDeployState(), ancestor, producerSpec);
- }
-
- public final T build(DeployState deployState, AbstractConfigProducer ancestor, Element producerSpec) {
T t = doBuild(ancestor, producerSpec);
if (t instanceof AbstractService) {
- initializeService((AbstractService)t, deployState, ancestor.getHostSystem(), producerSpec);
+ initializeService((AbstractService)t, ancestor, producerSpec);
} else {
- initializeProducer(t, deployState, producerSpec);
+ initializeProducer(t, ancestor, producerSpec);
}
return t;
@@ -138,9 +127,9 @@ public class VespaDomBuilder extends VespaModelBuilder {
protected abstract T doBuild(AbstractConfigProducer ancestor, Element producerSpec);
private void initializeProducer(AbstractConfigProducer child,
- DeployState deployState,
+ AbstractConfigProducer ancestor,
Element producerSpec) {
- UserConfigRepo userConfigs = UserConfigBuilder.build(producerSpec, deployState, deployState.getDeployLogger());
+ UserConfigRepo userConfigs = UserConfigBuilder.build(producerSpec, ancestor.getRoot().getDeployState(), ancestor.getRoot().deployLogger());
// TODO: must be made to work:
//userConfigs.applyWarnings(child);
log.log(LogLevel.DEBUG, "Adding user configs " + userConfigs + " for " + producerSpec);
@@ -148,10 +137,9 @@ public class VespaDomBuilder extends VespaModelBuilder {
}
private void initializeService(AbstractService t,
- DeployState deployState,
- HostSystem hostSystem,
+ AbstractConfigProducer ancestor,
Element producerSpec) {
- initializeProducer(t, deployState, producerSpec);
+ initializeProducer(t, ancestor, producerSpec);
if (producerSpec != null) {
if (producerSpec.hasAttribute(JVMARGS_ATTRIB_NAME)) {
t.appendJvmArgs(producerSpec.getAttribute(JVMARGS_ATTRIB_NAME));
@@ -184,7 +172,7 @@ public class VespaDomBuilder extends VespaModelBuilder {
if (port > 0) {
t.setBasePort(port);
}
- allocateHost(t, hostSystem, producerSpec);
+ allocateHost(t, ancestor.getHostSystem(), producerSpec);
}
// This depends on which constructor in AbstractService is used, but the best way
// is to let this method do initialize.
@@ -221,7 +209,8 @@ public class VespaDomBuilder extends VespaModelBuilder {
}
@Override
- protected SimpleConfigProducer doBuild(AbstractConfigProducer parent, Element producerSpec) {
+ protected SimpleConfigProducer doBuild(AbstractConfigProducer parent,
+ Element producerSpec) {
return new SimpleConfigProducer(parent, configId);
}
}
@@ -330,7 +319,8 @@ public class VespaDomBuilder extends VespaModelBuilder {
}
@Override
- public List<ServiceCluster> getClusters(ApplicationPackage pkg, AbstractConfigProducer parent) {
+ public List<ServiceCluster> getClusters(ApplicationPackage pkg,
+ AbstractConfigProducer parent) {
List<ServiceCluster> clusters = new ArrayList<>();
Document services = XmlHelper.getDocument(pkg.getServices());
for (Element clusterSpec : XML.getChildren(services.getDocumentElement(), "cluster")) {
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 18c5bfdcd60..f0724306e9c 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
@@ -200,20 +200,16 @@ public final class ContainerCluster
public ContainerCluster(AbstractConfigProducer<?> parent, String subId, String name) {
this(parent, subId, name, new AcceptAllVerifier());
}
- public ContainerCluster(AbstractConfigProducer<?> parent, String subId, String name, DeployState deployState) {
- this(parent, subId, name, new AcceptAllVerifier(), deployState);
- }
-
- public ContainerCluster(AbstractConfigProducer<?> parent, String subId, String name, ContainerClusterVerifier verifier) {
- this(parent, subId, name, verifier, deployStateFrom(parent));
- }
/** Creates a container cluster */
- public ContainerCluster(AbstractConfigProducer<?> parent, String subId, String name,
- ContainerClusterVerifier verifier, DeployState deployState) {
+ public ContainerCluster(AbstractConfigProducer<?> parent,
+ String subId,
+ String name,
+ ContainerClusterVerifier verifier) {
super(parent, subId);
this.clusterVerifier = verifier;
this.name = name;
+ DeployState deployState = deployStateFrom(parent);
this.isHostedVespa = stateIsHosted(deployState);
this.zone = (deployState != null) ? deployState.zone() : Zone.defaultZone();
componentGroup = new ComponentGroup<>(this, "component");
@@ -342,18 +338,18 @@ public final class ContainerCluster
addComponent(new SimpleComponent(className));
}
- public void prepare(DeployState deployState) {
- addAndSendApplicationBundles(deployState);
+ public void prepare() {
+ addAndSendApplicationBundles();
if (modelEvaluation != null)
modelEvaluation.prepare(containers);
sendUserConfiguredFiles();
- setApplicationMetaData(deployState);
+ setApplicationMetaData();
for (RestApi restApi : restApiGroup.getComponents())
restApi.prepare();
}
- private void setApplicationMetaData(DeployState deployState) {
- applicationMetaData = deployState.getApplicationPackage().getMetaData();
+ private void setApplicationMetaData() {
+ applicationMetaData = getRoot().getDeployState().getApplicationPackage().getMetaData();
}
public void addMbusServer(ComponentId chainId) {
@@ -366,8 +362,8 @@ public final class ContainerCluster
null))));
}
- private void addAndSendApplicationBundles(DeployState deployState) {
- for (ComponentInfo component : deployState.getApplicationPackage().getComponentsInfo(deployState.getProperties().vespaVersion())) {
+ private void addAndSendApplicationBundles() {
+ for (ComponentInfo component : getRoot().getDeployState().getApplicationPackage().getComponentsInfo(getRoot().getDeployState().getProperties().vespaVersion())) {
FileReference reference = FileSender.sendFileToServices(component.getPathRelativeToAppDir(), containers);
applicationBundles.add(reference);
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerModel.java b/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerModel.java
index cefccca5ec8..83d749067b4 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerModel.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerModel.java
@@ -4,7 +4,6 @@ package com.yahoo.vespa.model.container;
import com.yahoo.config.model.ConfigModel;
import com.yahoo.config.model.ConfigModelContext;
import com.yahoo.config.model.ConfigModelRepo;
-import com.yahoo.config.model.deploy.DeployState;
import com.yahoo.vespa.model.content.Content;
import com.yahoo.vespa.model.search.AbstractSearchCluster;
@@ -36,9 +35,9 @@ public class ContainerModel extends ConfigModel {
public ContainerCluster getCluster() { return containerCluster; }
@Override
- public void prepare(ConfigModelRepo plugins, DeployState deployState) {
+ public void prepare(ConfigModelRepo plugins) {
assert (getCluster() != null) : "Null container cluster!";
- getCluster().prepare(deployState);
+ getCluster().prepare();
}
@Override
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 7802bd1eb65..2d3f3036ccc 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
@@ -12,7 +12,6 @@ import com.yahoo.config.model.api.ConfigServerSpec;
import com.yahoo.config.model.application.provider.IncludeDirs;
import com.yahoo.config.model.builder.xml.ConfigModelBuilder;
import com.yahoo.config.model.builder.xml.ConfigModelId;
-import com.yahoo.config.model.deploy.DeployState;
import com.yahoo.config.model.producer.AbstractConfigProducer;
import com.yahoo.config.provision.AthenzService;
import com.yahoo.config.provision.Capacity;
@@ -24,6 +23,7 @@ import com.yahoo.config.provision.NodeType;
import com.yahoo.config.provision.Rotation;
import com.yahoo.config.provision.Zone;
import com.yahoo.container.jdisc.config.MetricDefaultsConfig;
+import com.yahoo.osgi.provider.model.ComponentModel;
import com.yahoo.search.rendering.RendererRegistry;
import com.yahoo.searchdefinition.derived.RankProfileList;
import com.yahoo.text.XML;
@@ -149,10 +149,9 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> {
return new VespaDomBuilder.DomConfigProducerBuilder<ContainerCluster>() {
@Override
protected ContainerCluster doBuild(AbstractConfigProducer ancestor, Element producerSpec) {
- return new ContainerCluster(ancestor, modelContext.getProducerId(),
- modelContext.getProducerId(), modelContext.getDeployState());
+ return new ContainerCluster(ancestor, modelContext.getProducerId(), modelContext.getProducerId());
}
- }.build(modelContext.getDeployState(), modelContext.getParentProducer(), spec);
+ }.build(modelContext.getParentProducer(), spec);
}
private void addClusterContent(ContainerCluster cluster, Element spec, ConfigModelContext context) {
@@ -172,7 +171,7 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> {
addStatusHandlers(cluster, context);
setDefaultMetricConsumerFactory(cluster);
- addHttp(context.getDeployState(), spec, cluster);
+ addHttp(spec, cluster);
addAccessLogs(cluster, spec);
addRoutingAliases(cluster, spec, context.getDeployState().zone().environment());
@@ -330,15 +329,15 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> {
}
- protected final void addHttp(DeployState deployState, Element spec, ContainerCluster cluster) {
+ protected void addHttp(Element spec, ContainerCluster cluster) {
Element httpElement = XML.getChild(spec, "http");
if (httpElement != null) {
- cluster.setHttp(buildHttp(deployState, cluster, httpElement));
+ cluster.setHttp(buildHttp(cluster, httpElement));
}
}
- private Http buildHttp(DeployState deployState, ContainerCluster cluster, Element httpElement) {
- Http http = new HttpBuilder().build(deployState, cluster, httpElement);
+ private Http buildHttp(ContainerCluster cluster, Element httpElement) {
+ Http http = new HttpBuilder().build(cluster, httpElement);
if (networking == Networking.disable)
http.removeAllServers();
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/content/Content.java b/config-model/src/main/java/com/yahoo/vespa/model/content/Content.java
index d268089e9c4..ec68243ec9d 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/content/Content.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/content/Content.java
@@ -12,12 +12,10 @@ import com.yahoo.config.model.ConfigModelRepo;
import com.yahoo.config.model.admin.AdminModel;
import com.yahoo.config.model.builder.xml.ConfigModelBuilder;
import com.yahoo.config.model.builder.xml.ConfigModelId;
-import com.yahoo.config.model.deploy.DeployState;
import com.yahoo.config.model.producer.AbstractConfigProducer;
import com.yahoo.log.LogLevel;
-import com.yahoo.vespa.model.AbstractService;
-import com.yahoo.vespa.model.HostResource;
-import com.yahoo.vespa.model.SimpleConfigProducer;
+import com.yahoo.searchdefinition.derived.RankProfileList;
+import com.yahoo.vespa.model.*;
import com.yahoo.vespa.model.admin.Admin;
import com.yahoo.vespa.model.container.Container;
import com.yahoo.vespa.model.container.ContainerCluster;
@@ -33,13 +31,7 @@ import com.yahoo.vespa.model.search.IndexingDocprocChain;
import com.yahoo.vespa.model.search.SearchNode;
import org.w3c.dom.Element;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Optional;
-import java.util.Set;
+import java.util.*;
import java.util.logging.Logger;
/**
@@ -166,7 +158,7 @@ public class Content extends ConfigModel {
}
@Override
- public void prepare(ConfigModelRepo models, DeployState deployState) {
+ public void prepare(ConfigModelRepo models) {
if (cluster.getRootGroup().useCpuSocketAffinity()) {
setCpuSocketAffinity();
}
@@ -200,7 +192,7 @@ public class Content extends ConfigModel {
s.setVespaMallocDebugStackTrace(cluster.getRootGroup().getVespaMallocDebugStackTrace().get());
}
}
- cluster.prepare(deployState);
+ cluster.prepare();
}
private void setCpuSocketAffinity() {
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java
index 708c4930de1..c611cdc3dc1 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java
@@ -67,10 +67,9 @@ public class ContentSearchCluster extends AbstractConfigProducer implements Prot
ModelElement clusterElem = new ModelElement(producerSpec);
String clusterName = ContentCluster.getClusterName(clusterElem);
Boolean flushOnShutdownElem = clusterElem.childAsBoolean("engine.proton.flush-on-shutdown");
- DeployState deployState = AbstractConfigProducer.deployStateFrom(ancestor);
ContentSearchCluster search = new ContentSearchCluster(ancestor, clusterName, documentDefinitions, globallyDistributedDocuments,
- getFlushOnShutdown(flushOnShutdownElem, deployState));
+ getFlushOnShutdown(flushOnShutdownElem, AbstractConfigProducer.deployStateFrom(ancestor)));
ModelElement tuning = clusterElem.getChildByPath("engine.proton.tuning");
if (tuning != null) {
@@ -81,8 +80,8 @@ public class ContentSearchCluster extends AbstractConfigProducer implements Prot
search.setResourceLimits(DomResourceLimitsBuilder.build(protonElem));
}
- buildAllStreamingSearchClusters(deployState, clusterElem, clusterName, search);
- buildIndexedSearchCluster(deployState, clusterElem, clusterName, search);
+ buildAllStreamingSearchClusters(clusterElem, clusterName, search);
+ buildIndexedSearchCluster(clusterElem, clusterName, search);
return search;
}
@@ -97,7 +96,7 @@ public class ContentSearchCluster extends AbstractConfigProducer implements Prot
return clusterElem.childAsDouble("engine.proton.query-timeout");
}
- private void buildAllStreamingSearchClusters(DeployState deployState, ModelElement clusterElem, String clusterName, ContentSearchCluster search) {
+ private void buildAllStreamingSearchClusters(ModelElement clusterElem, String clusterName, ContentSearchCluster search) {
ModelElement docElem = clusterElem.getChild("documents");
if (docElem == null) {
@@ -107,20 +106,20 @@ public class ContentSearchCluster extends AbstractConfigProducer implements Prot
for (ModelElement docType : docElem.subElements("document")) {
String mode = docType.getStringAttribute("mode");
if ("streaming".equals(mode)) {
- buildStreamingSearchCluster(deployState, clusterElem, clusterName, search, docType);
+ buildStreamingSearchCluster(clusterElem, clusterName, search, docType);
}
}
}
- private void buildStreamingSearchCluster(DeployState deployState, ModelElement clusterElem, String clusterName,
- ContentSearchCluster search, ModelElement docType) {
+ private void buildStreamingSearchCluster(ModelElement clusterElem, String clusterName, ContentSearchCluster search, ModelElement docType) {
String docTypeName = docType.getStringAttribute("type");
StreamingSearchCluster cluster = new StreamingSearchCluster(search, clusterName + "." + docTypeName, 0, docTypeName, clusterName);
- search.addSearchCluster(deployState, cluster, getQueryTimeout(clusterElem), Arrays.asList(docType));
+ search.addSearchCluster(cluster, getQueryTimeout(clusterElem), Arrays.asList(docType));
}
- private void buildIndexedSearchCluster(DeployState deployState, ModelElement clusterElem,
- String clusterName, ContentSearchCluster search) {
+ private void buildIndexedSearchCluster(ModelElement clusterElem,
+ String clusterName,
+ ContentSearchCluster search) {
List<ModelElement> indexedDefs = getIndexedSearchDefinitions(clusterElem);
if (!indexedDefs.isEmpty()) {
IndexedSearchCluster isc = new IndexedSearchCluster(search, clusterName, 0);
@@ -131,7 +130,7 @@ public class ContentSearchCluster extends AbstractConfigProducer implements Prot
isc.setVisibilityDelay(visibilityDelay);
}
- search.addSearchCluster(deployState, isc, getQueryTimeout(clusterElem), indexedDefs);
+ search.addSearchCluster(isc, getQueryTimeout(clusterElem), indexedDefs);
}
}
@@ -165,29 +164,29 @@ public class ContentSearchCluster extends AbstractConfigProducer implements Prot
this.flushOnShutdown = flushOnShutdown;
}
- void addSearchCluster(DeployState deployState, SearchCluster cluster, Double queryTimeout, List<ModelElement> documentDefs) {
- addSearchDefinitions(deployState, documentDefs, cluster);
+ void addSearchCluster(SearchCluster cluster, Double queryTimeout, List<ModelElement> documentDefs) {
+ addSearchDefinitions(documentDefs, cluster);
if (queryTimeout != null) {
cluster.setQueryTimeout(queryTimeout);
}
cluster.defaultDocumentsConfig();
- cluster.deriveSearchDefinitions(deployState);
+ cluster.deriveSearchDefinitions(new ArrayList<>());
addCluster(cluster);
}
- private void addSearchDefinitions(DeployState deployState, List<ModelElement> searchDefs, AbstractSearchCluster sc) {
+ private void addSearchDefinitions(List<ModelElement> searchDefs, AbstractSearchCluster sc) {
for (ModelElement e : searchDefs) {
SearchDefinitionXMLHandler searchDefinitionXMLHandler = new SearchDefinitionXMLHandler(e);
SearchDefinition searchDefinition =
- searchDefinitionXMLHandler.getResponsibleSearchDefinition(deployState.getSearchDefinitions());
+ searchDefinitionXMLHandler.getResponsibleSearchDefinition(sc.getRoot().getDeployState().getSearchDefinitions());
if (searchDefinition == null)
throw new RuntimeException("Search definition parsing error or file does not exist: '" +
searchDefinitionXMLHandler.getName() + "'");
// TODO: remove explicit building of user configs when the complete content model is built using builders.
sc.getLocalSDS().add(new AbstractSearchCluster.SearchDefinitionSpec(searchDefinition,
- UserConfigBuilder.build(e.getXml(), deployState, sc.getRoot().deployLogger())));
+ UserConfigBuilder.build(e.getXml(), sc.getRoot().getDeployState(), sc.getRoot().deployLogger())));
//need to get the document names from this sdfile
sc.addDocumentNames(searchDefinition);
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/content/cluster/ContentCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/content/cluster/ContentCluster.java
index 699da07f159..f15ba547894 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/content/cluster/ContentCluster.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/content/cluster/ContentCluster.java
@@ -4,7 +4,6 @@ package com.yahoo.vespa.model.content.cluster;
import com.google.common.base.Preconditions;
import com.google.common.collect.Sets;
import com.yahoo.config.model.ConfigModelContext;
-import com.yahoo.config.model.deploy.DeployState;
import com.yahoo.config.model.producer.AbstractConfigProducerRoot;
import com.yahoo.config.provision.ClusterSpec;
import com.yahoo.config.provision.Environment;
@@ -500,11 +499,11 @@ public class ContentCluster extends AbstractConfigProducer implements
this.zone = zone;
}
- public void prepare(DeployState deployState) {
+ public void prepare() {
search.prepare();
if (clusterControllers != null) {
- clusterControllers.prepare(deployState);
+ clusterControllers.prepare();
}
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/search/IndexedSearchCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/search/IndexedSearchCluster.java
index e0dffcbc537..c46a662b682 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/search/IndexedSearchCluster.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/search/IndexedSearchCluster.java
@@ -1,7 +1,6 @@
// 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.search;
-import com.yahoo.config.model.deploy.DeployState;
import com.yahoo.log.LogLevel;
import com.yahoo.vespa.config.search.AttributesConfig;
import com.yahoo.vespa.config.search.DispatchConfig;
@@ -283,16 +282,19 @@ public class IndexedSearchCluster extends SearchCluster
}
}
}
- @Override
- protected void deriveAllSearchDefinitions(List<SearchDefinitionSpec> localSearches, DeployState deployState) {
+ protected void deriveAllSearchDefinitions(List<SearchDefinitionSpec> localSearches,
+ List<com.yahoo.searchdefinition.Search> globalSearches) {
for (SearchDefinitionSpec spec : localSearches) {
com.yahoo.searchdefinition.Search search = spec.getSearchDefinition().getSearch();
if ( ! (search instanceof DocumentOnlySearch)) {
- DocumentDatabase db = new DocumentDatabase(this, search.getName(),
- new DerivedConfiguration(search, deployLogger(),
- deployState.rankProfileRegistry(),
- deployState.getQueryProfiles().getRegistry(),
- deployState.getImportedModels()));
+ DocumentDatabase db = new DocumentDatabase(this,
+ search.getName(),
+ new DerivedConfiguration(search,
+ globalSearches,
+ deployLogger(),
+ getRoot().getDeployState().rankProfileRegistry(),
+ getRoot().getDeployState().getQueryProfiles().getRegistry(),
+ getRoot().getDeployState().getImportedModels()));
// TODO: remove explicit adding of user configs when the complete content model is built using builders.
db.mergeUserConfigs(spec.getUserConfigs());
documentDbs.add(db);
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/search/SearchCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/search/SearchCluster.java
index 34a2fc7ab0e..379c4c84e16 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/search/SearchCluster.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/search/SearchCluster.java
@@ -1,7 +1,6 @@
// 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.search;
-import com.yahoo.config.model.deploy.DeployState;
import com.yahoo.searchdefinition.derived.RawRankProfile;
import com.yahoo.searchdefinition.derived.SummaryMap;
import com.yahoo.vespa.config.search.RankProfilesConfig;
@@ -49,8 +48,8 @@ public abstract class SearchCluster extends AbstractSearchCluster
* Also stores the document names contained in the search
* definitions.
*/
- public void deriveSearchDefinitions(DeployState deployState) {
- deriveAllSearchDefinitions(getLocalSDS(), deployState);
+ public void deriveSearchDefinitions(List<com.yahoo.searchdefinition.Search> global) {
+ deriveAllSearchDefinitions(getLocalSDS(), global);
}
@Override
@@ -140,7 +139,8 @@ public abstract class SearchCluster extends AbstractSearchCluster
return false;
}
- protected abstract void deriveAllSearchDefinitions(List<SearchDefinitionSpec> localSearches, DeployState deployState);
+ protected abstract void deriveAllSearchDefinitions(List<SearchDefinitionSpec> localSearches,
+ List<com.yahoo.searchdefinition.Search> globalSearches);
public abstract void defaultDocumentsConfig();
public abstract DerivedConfiguration getSdConfig();
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/search/StreamingSearchCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/search/StreamingSearchCluster.java
index 7f177babf26..66553ebadf6 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/search/StreamingSearchCluster.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/search/StreamingSearchCluster.java
@@ -1,7 +1,6 @@
// 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.search;
-import com.yahoo.config.model.deploy.DeployState;
import com.yahoo.config.model.producer.AbstractConfigProducer;
import com.yahoo.prelude.fastsearch.DocumentdbInfoConfig;
import com.yahoo.searchdefinition.derived.AttributeFields;
@@ -90,22 +89,23 @@ public class StreamingSearchCluster extends SearchCluster implements
}
}
- @Override
- protected void deriveAllSearchDefinitions(List<SearchDefinitionSpec> local, DeployState deployState) {
+ protected void deriveAllSearchDefinitions(List<SearchDefinitionSpec> local,
+ List<com.yahoo.searchdefinition.Search> global) {
if (local.size() == 1) {
- deriveSingleSearchDefinition(local.get(0).getSearchDefinition().getSearch(), deployState);
+ deriveSingleSearchDefinition(local.get(0).getSearchDefinition().getSearch(), global);
} else if (local.size() > 1){
throw new IllegalStateException("Logical indexes are not supported: Got " + local.size() + " search definitions, expected 1");
}
}
- private void deriveSingleSearchDefinition(com.yahoo.searchdefinition.Search localSearch, DeployState deployState) {
+ private void deriveSingleSearchDefinition(com.yahoo.searchdefinition.Search localSearch,
+ List<com.yahoo.searchdefinition.Search> globalSearches) {
if (!localSearch.getName().equals(docTypeName)) {
throw new IllegalStateException("Mismatch between document type name (" + docTypeName + ") and name of search definition (" + localSearch.getName() + ")");
}
- this.sdConfig = new DerivedConfiguration(localSearch, deployLogger(),
- deployState.rankProfileRegistry(),
- deployState.getQueryProfiles().getRegistry(),
- deployState.getImportedModels());
+ this.sdConfig = new DerivedConfiguration(localSearch, globalSearches, deployLogger(),
+ getRoot().getDeployState().rankProfileRegistry(),
+ getRoot().getDeployState().getQueryProfiles().getRegistry(),
+ getRoot().getDeployState().getImportedModels());
}
@Override
public DerivedConfiguration getSdConfig() {
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/jersey/xml/RestApiTest.java b/config-model/src/test/java/com/yahoo/vespa/model/container/jersey/xml/RestApiTest.java
index e954e6343de..503b38b79b4 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/container/jersey/xml/RestApiTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/container/jersey/xml/RestApiTest.java
@@ -55,7 +55,7 @@ public class RestApiTest extends ContainerModelBuilderTestBase {
public void setup() throws Exception {
createModel(root, restApiXml);
root.validate();
- getContainerCluster(CLUSTER_ID).prepare(root.getDeployState());
+ getContainerCluster(CLUSTER_ID).prepare();
restApi = getContainerCluster(CLUSTER_ID).getRestApiMap().values().iterator().next();
servlet = restApi.getJersey2Servlet();
context = restApi.getContext();
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 ae7b8356682..8d2cd429517 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
@@ -243,7 +243,7 @@ public class StandaloneContainerApplication implements Application {
Element spec = containerRootElement(applicationPackage);
ContainerModel containerModel = newContainerModelBuilder(networkingOption).build(deployState, root, configModelRepo, vespaRoot, spec);
- containerModel.getCluster().prepare(deployState);
+ containerModel.getCluster().prepare();
initializeContainerModel(containerModel, configModelRepo);
Container container = first(containerModel.getCluster().getContainers());