summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArnstein Ressem <aressem@gmail.com>2018-09-12 02:00:30 +0200
committerGitHub <noreply@github.com>2018-09-12 02:00:30 +0200
commitc5ac946420c209ea2994ee957d2308ec613acc01 (patch)
treeaeef61c162db3fed683927dbec36f57dfaa4e526
parentb3801a78cdda4a4f8a9135ac269c8d8f6b2bbbdc (diff)
parent449e5e0f8ed1ecf9c28b5ffb7bd46d0aac04d4d3 (diff)
Merge pull request #6915 from vespa-engine/revert-6907-bratseth/add-model-evaluation-element
Revert "Add model-evaluation tag"
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV2Builder.java5
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV4Builder.java2
-rwxr-xr-xconfig-model/src/main/java/com/yahoo/vespa/model/container/ContainerCluster.java81
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/ContainerModelEvaluation.java41
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/processing/ProcessingChain.java1
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/processing/ProcessingChains.java6
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/processing/Processor.java1
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/search/ContainerSearch.java5
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/container/xml/ContainerModelBuilder.java66
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/content/Content.java2
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/content/cluster/ContentCluster.java3
-rw-r--r--config-model/src/main/resources/schema/containercluster.rnc5
-rw-r--r--config-model/src/test/cfg/application/ml_serving/services.xml1
-rw-r--r--config-model/src/test/cfg/application/ml_serving_name_collision/services.xml1
-rw-r--r--config-model/src/test/cfg/application/ml_serving_not_activated/models/xgboost.2.2.json19
-rw-r--r--config-model/src/test/cfg/application/ml_serving_not_activated/services.xml13
-rwxr-xr-xconfig-model/src/test/java/com/yahoo/vespa/model/container/ContainerClusterTest.java10
-rw-r--r--config-model/src/test/java/com/yahoo/vespa/model/ml/ModelEvaluationTest.java44
18 files changed, 115 insertions, 191 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV2Builder.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV2Builder.java
index 9deb03495f2..d67cb0c29c3 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV2Builder.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV2Builder.java
@@ -90,10 +90,7 @@ public class DomAdminV2Builder extends DomAdminBuilderBase {
if (standaloneZooKeeper) {
parent = new ClusterControllerCluster(parent, "standalone");
}
- ContainerCluster cluster = new ContainerCluster(parent,
- "cluster-controllers",
- "cluster-controllers",
- new ClusterControllerClusterVerifier());
+ ContainerCluster cluster = new ContainerCluster(parent, "cluster-controllers", "cluster-controllers", new ClusterControllerClusterVerifier(), RankProfileList.empty);
ContainerModelBuilder.addDefaultHandler_legacyBuilder(cluster);
List<Container> containers = new ArrayList<>();
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV4Builder.java b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV4Builder.java
index 25d184d148a..291a2824e46 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV4Builder.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/builder/xml/dom/DomAdminV4Builder.java
@@ -98,7 +98,7 @@ public class DomAdminV4Builder extends DomAdminBuilderBase {
// Creates a container cluster 'logserver-cluster' with 1 container on logserver host
// for setting up a handler for getting logs from logserver
private void createAdditionalContainerOnLogserverHost(Admin admin, HostResource hostResource) {
- ContainerCluster logServerCluster = new ContainerCluster(admin, "logserver-cluster", "logserver-cluster");
+ ContainerCluster logServerCluster = new ContainerCluster(admin, "logserver-cluster", "logserver-cluster", RankProfileList.empty);
ContainerModel logserverClusterModel = new ContainerModel(context.withParent(admin).withId(logServerCluster.getSubId()));
logserverClusterModel.setCluster(logServerCluster);
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 f0724306e9c..fbe86d26b02 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
@@ -1,6 +1,7 @@
// 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.container;
+import ai.vespa.models.evaluation.ModelsEvaluator;
import com.yahoo.cloud.config.ClusterInfoConfig;
import com.yahoo.cloud.config.ConfigserverConfig;
import com.yahoo.cloud.config.RoutingProviderConfig;
@@ -40,6 +41,7 @@ import com.yahoo.search.config.IndexInfoConfig;
import com.yahoo.search.config.QrStartConfig;
import com.yahoo.search.pagetemplates.PageTemplatesConfig;
import com.yahoo.search.query.profile.config.QueryProfilesConfig;
+import com.yahoo.searchdefinition.derived.RankProfileList;
import com.yahoo.vespa.config.search.RankProfilesConfig;
import com.yahoo.vespa.config.search.core.RankingConstantsConfig;
import com.yahoo.vespa.configdefinition.IlscriptsConfig;
@@ -155,7 +157,6 @@ public final class ContainerCluster
private ContainerDocproc containerDocproc;
private ContainerDocumentApi containerDocumentApi;
private SecretStore secretStore;
- private ContainerModelEvaluation modelEvaluation;
private MbusParams mbusParams;
private boolean rpcServerEnabled = true;
@@ -172,6 +173,9 @@ public final class ContainerCluster
private final ContainerClusterVerifier clusterVerifier;
private final boolean isHostedVespa;
+ /** Global rank profiles, aka models */
+ private final RankProfileList rankProfileList;
+
private Map<String, String> concreteDocumentTypes = new LinkedHashMap<>();
private MetricDefaultsConfig.Factory.Enum defaultMetricConsumerFactory;
@@ -196,16 +200,30 @@ public final class ContainerCluster
}
}
- /** Creates a container cluster */
- public ContainerCluster(AbstractConfigProducer<?> parent, String subId, String name) {
- this(parent, subId, name, new AcceptAllVerifier());
+ /**
+ * Creates a container cluster
+ *
+ * @param rankProfileList the list ofd global rank profiles containing models that should be available in
+ * container clusters
+ */
+ public ContainerCluster(AbstractConfigProducer<?> parent,
+ String subId,
+ String name,
+ RankProfileList rankProfileList) {
+ this(parent, subId, name, new AcceptAllVerifier(), rankProfileList);
}
- /** Creates a container cluster */
+ /**
+ * Creates a container cluster
+ *
+ * @param rankProfileList the list ofd global rank profiles containing models that should be available in
+ * container clusters
+ */
public ContainerCluster(AbstractConfigProducer<?> parent,
String subId,
String name,
- ContainerClusterVerifier verifier) {
+ ContainerClusterVerifier verifier,
+ RankProfileList rankProfileList) {
super(parent, subId);
this.clusterVerifier = verifier;
this.name = name;
@@ -215,12 +233,14 @@ public final class ContainerCluster
componentGroup = new ComponentGroup<>(this, "component");
restApiGroup = new ConfigProducerGroup<>(this, "rest-api");
servletGroup = new ConfigProducerGroup<>(this, "servlet");
+ this.rankProfileList = Objects.requireNonNull(rankProfileList, "rankProfileList cannot be null");
addComponent(new StatisticsComponent());
addSimpleComponent(AccessLog.class);
// TODO better modelling
addSimpleComponent(ThreadPoolProvider.class);
addSimpleComponent(com.yahoo.concurrent.classlock.ClassLocking.class);
+ addSimpleComponent(ModelsEvaluator.class.getName(), null, "model-evaluation");
addSimpleComponent("com.yahoo.jdisc.http.filter.SecurityFilterInvoker");
addSimpleComponent(SIMPLE_LINGUISTICS_PROVIDER);
addSimpleComponent("com.yahoo.container.jdisc.SecretStoreProvider");
@@ -340,8 +360,7 @@ public final class ContainerCluster
public void prepare() {
addAndSendApplicationBundles();
- if (modelEvaluation != null)
- modelEvaluation.prepare(containers);
+ rankProfileList.sendConstantsTo(containers);
sendUserConfiguredFiles();
setApplicationMetaData();
for (RestApi restApi : restApiGroup.getComponents())
@@ -438,10 +457,6 @@ public final class ContainerCluster
this.containerSearch = containerSearch;
}
- public void setModelEvaluation(ContainerModelEvaluation modelEvaluation) {
- this.modelEvaluation = modelEvaluation;
- }
-
public void setHttp(Http http) {
this.http = http;
addChild(http);
@@ -536,13 +551,13 @@ public final class ContainerCluster
}
@Override
- public void getConfig(ComponentsConfig.Builder builder) {
+ public final void getConfig(ComponentsConfig.Builder builder) {
builder.components.addAll(ComponentsConfigGenerator.generate(getAllComponents()));
builder.components(new ComponentsConfig.Components.Builder().id("com.yahoo.container.core.config.HandlersConfigurerDi$RegistriesHack"));
}
@Override
- public void getConfig(JdiscBindingsConfig.Builder builder) {
+ public final void getConfig(JdiscBindingsConfig.Builder builder) {
builder.handlers.putAll(DiscBindingsConfigGenerator.generate(getHandlers()));
}
@@ -637,37 +652,47 @@ public final class ContainerCluster
@Override
public void getConfig(DocprocConfig.Builder builder) {
- if (containerDocproc != null) containerDocproc.getConfig(builder);
+ if (containerDocproc != null) {
+ containerDocproc.getConfig(builder);
+ }
}
@Override
public void getConfig(PageTemplatesConfig.Builder builder) {
- if (containerSearch != null) containerSearch.getConfig(builder);
+ if (containerSearch != null) {
+ containerSearch.getConfig(builder);
+ }
}
@Override
public void getConfig(SemanticRulesConfig.Builder builder) {
- if (containerSearch != null) containerSearch.getConfig(builder);
+ if (containerSearch != null) {
+ containerSearch.getConfig(builder);
+ }
}
@Override
public void getConfig(QueryProfilesConfig.Builder builder) {
- if (containerSearch != null) containerSearch.getConfig(builder);
+ if (containerSearch != null) {
+ containerSearch.getConfig(builder);
+ }
}
@Override
public void getConfig(SchemamappingConfig.Builder builder) {
- if (containerDocproc != null) containerDocproc.getConfig(builder);
+ if (containerDocproc!=null) containerDocproc.getConfig(builder);
}
@Override
public void getConfig(IndexInfoConfig.Builder builder) {
- if (containerSearch != null) containerSearch.getConfig(builder);
+ if (containerSearch!=null) containerSearch.getConfig(builder);
}
@Override
public void getConfig(FeederConfig.Builder builder) {
- if (containerDocumentApi != null) containerDocumentApi.getConfig(builder);
+ if (containerDocumentApi != null) {
+ containerDocumentApi.getConfig(builder);
+ }
}
@Override
@@ -686,20 +711,19 @@ public final class ContainerCluster
@Override
public void getConfig(RankProfilesConfig.Builder builder) {
- if (modelEvaluation != null) modelEvaluation.getConfig(builder);
+ rankProfileList.getConfig(builder);
}
@Override
- public void getConfig(RankingConstantsConfig.Builder builder) {
- if (modelEvaluation != null) modelEvaluation.getConfig(builder);
- }
+ public void getConfig(RankingConstantsConfig.Builder builder) { rankProfileList.getConfig(builder); }
public void setMbusParams(MbusParams mbusParams) {
this.mbusParams = mbusParams;
}
public void initialize(Map<String, AbstractSearchCluster> clusterMap) {
- if (containerSearch != null) containerSearch.connectSearchClusters(clusterMap);
+ if (containerSearch != null)
+ containerSearch.connectSearchClusters(clusterMap);
}
public void addDefaultSearchAccessLog() {
@@ -717,7 +741,9 @@ public final class ContainerCluster
@Override
public void getConfig(MetricDefaultsConfig.Builder builder) {
- if (defaultMetricConsumerFactory != null) builder.factory(defaultMetricConsumerFactory);
+ if (defaultMetricConsumerFactory != null) {
+ builder.factory(defaultMetricConsumerFactory);
+ }
}
@Override
@@ -827,5 +853,4 @@ public final class ContainerCluster
this.containerCoreMemory = containerCoreMemory;
}
}
-
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerModelEvaluation.java b/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerModelEvaluation.java
deleted file mode 100644
index 09990c7b9de..00000000000
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/ContainerModelEvaluation.java
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.vespa.model.container;
-
-import ai.vespa.models.evaluation.ModelsEvaluator;
-import com.yahoo.searchdefinition.derived.RankProfileList;
-import com.yahoo.vespa.config.search.RankProfilesConfig;
-import com.yahoo.vespa.config.search.core.RankingConstantsConfig;
-
-import java.util.List;
-import java.util.Objects;
-
-/**
- * Configuration of components for stateless model evaluation
- *
- * @author bratseth
- */
-public class ContainerModelEvaluation implements RankProfilesConfig.Producer, RankingConstantsConfig.Producer {
-
- /** Global rank profiles, aka models */
- private final RankProfileList rankProfileList;
-
- public ContainerModelEvaluation(ContainerCluster cluster, RankProfileList rankProfileList) {
- this.rankProfileList = Objects.requireNonNull(rankProfileList, "rankProfileList cannot be null");
- cluster.addSimpleComponent(ModelsEvaluator.class.getName(), null, "model-evaluation");
- }
-
- public void prepare(List<Container> containers) {
- rankProfileList.sendConstantsTo(containers);
- }
-
- @Override
- public void getConfig(RankProfilesConfig.Builder builder) {
- rankProfileList.getConfig(builder);
- }
-
- @Override
- public void getConfig(RankingConstantsConfig.Builder builder) {
- rankProfileList.getConfig(builder);
- }
-
-}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/processing/ProcessingChain.java b/config-model/src/main/java/com/yahoo/vespa/model/container/processing/ProcessingChain.java
index 9a984ca1917..73430d8e453 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/processing/ProcessingChain.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/processing/ProcessingChain.java
@@ -8,6 +8,7 @@ import com.yahoo.vespa.model.container.component.chain.Chain;
* Represents a processing chain in the config model
*
* @author bratseth
+ * @since 5.1.6
*/
public class ProcessingChain extends Chain<Processor> {
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/processing/ProcessingChains.java b/config-model/src/main/java/com/yahoo/vespa/model/container/processing/ProcessingChains.java
index 32f0f373a92..644316ff652 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/processing/ProcessingChains.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/processing/ProcessingChains.java
@@ -12,14 +12,14 @@ import java.util.List;
* Root config producer for processing
*
* @author bratseth
+ * @since 5.1.6
*/
public class ProcessingChains extends Chains<ProcessingChain> {
-
- public static final String[] defaultBindings = new String[] {"http://*/processing/*", "https://*/processing/*"};
+ public static final String[] defaultBindings = new String[]
+ {"http://*/processing/*", "https://*/processing/*"};
public ProcessingChains(AbstractConfigProducer parent, String subId) {
super(parent, subId);
}
-
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/processing/Processor.java b/config-model/src/main/java/com/yahoo/vespa/model/container/processing/Processor.java
index 3ad6484aaec..e4f46be914b 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/processing/Processor.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/processing/Processor.java
@@ -9,6 +9,7 @@ import com.yahoo.vespa.model.container.component.chain.ChainedComponent;
* Representation of a Processor in the configuration model
*
* @author bratseth
+ * @since 5.1.6
*/
public class Processor extends ChainedComponent<ChainedComponentModel> {
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/container/search/ContainerSearch.java b/config-model/src/main/java/com/yahoo/vespa/model/container/search/ContainerSearch.java
index 36feba34680..c711f268534 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/container/search/ContainerSearch.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/container/search/ContainerSearch.java
@@ -35,10 +35,11 @@ public class ContainerSearch extends ContainerSubsystem<SearchChains>
QrStartConfig.Producer,
QueryProfilesConfig.Producer,
SemanticRulesConfig.Producer,
- PageTemplatesConfig.Producer {
+ PageTemplatesConfig.Producer
+{
private final List<AbstractSearchCluster> systems = new LinkedList<>();
- private final Options options;
+ private Options options = null;
// For legacy qrs clusters only.
private BinaryScaledAmount totalCacheSize = new BinaryScaledAmount();
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 2d3f3036ccc..cb4cf92a223 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
@@ -45,7 +45,6 @@ import com.yahoo.vespa.model.clients.ContainerDocumentApi;
import com.yahoo.vespa.model.container.Container;
import com.yahoo.vespa.model.container.ContainerCluster;
import com.yahoo.vespa.model.container.ContainerModel;
-import com.yahoo.vespa.model.container.ContainerModelEvaluation;
import com.yahoo.vespa.model.container.IdentityProvider;
import com.yahoo.vespa.model.container.SecretStore;
import com.yahoo.vespa.model.container.component.Component;
@@ -149,7 +148,11 @@ 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());
+ return new ContainerCluster(ancestor,
+ modelContext.getProducerId(),
+ modelContext.getProducerId(),
+ modelContext.vespaModel() != null ? modelContext.vespaModel().rankProfileList()
+ : RankProfileList.empty);
}
}.build(modelContext.getParentProducer(), spec);
}
@@ -163,7 +166,6 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> {
addServlets(spec, cluster);
addProcessing(spec, cluster);
addSearch(spec, cluster, context.getDeployState().getQueryProfiles(), context.getDeployState().getSemanticRules());
- addModelEvaluation(spec, cluster, context);
addDocproc(spec, cluster);
addDocumentApi(spec, cluster); // NOTE: Must be done after addSearch
@@ -353,56 +355,50 @@ public class ContainerModelBuilder extends ConfigModelBuilder<ContainerModel> {
}
private void addServlets(Element spec, ContainerCluster cluster) {
- for (Element servletElem : XML.getChildren(spec, "servlet"))
- cluster.addServlet(new ServletBuilder().build(cluster, servletElem));
+ for (Element servletElem : XML.getChildren(spec, "servlet")) {
+ cluster.addServlet(
+ new ServletBuilder().build(cluster, servletElem));
+ }
}
private void addDocumentApi(Element spec, ContainerCluster cluster) {
ContainerDocumentApi containerDocumentApi = buildDocumentApi(cluster, spec);
- if (containerDocumentApi == null) return;
-
- cluster.setDocumentApi(containerDocumentApi);
+ if (containerDocumentApi != null) {
+ cluster.setDocumentApi(containerDocumentApi);
+ }
}
private void addDocproc(Element spec, ContainerCluster cluster) {
ContainerDocproc containerDocproc = buildDocproc(cluster, spec);
- if (containerDocproc == null) return;
- cluster.setDocproc(containerDocproc);
+ if (containerDocproc != null) {
+ cluster.setDocproc(containerDocproc);
- ContainerDocproc.Options docprocOptions = containerDocproc.options;
- cluster.setMbusParams(new ContainerCluster.MbusParams(
- docprocOptions.maxConcurrentFactor, docprocOptions.documentExpansionFactor, docprocOptions.containerCoreMemory));
+ ContainerDocproc.Options docprocOptions = containerDocproc.options;
+ cluster.setMbusParams(new ContainerCluster.MbusParams(
+ docprocOptions.maxConcurrentFactor, docprocOptions.documentExpansionFactor, docprocOptions.containerCoreMemory));
+ }
}
private void addSearch(Element spec, ContainerCluster cluster, QueryProfiles queryProfiles, SemanticRules semanticRules) {
Element searchElement = XML.getChild(spec, "search");
- if (searchElement == null) return;
-
- addIncludes(searchElement);
- cluster.setSearch(buildSearch(cluster, searchElement, queryProfiles, semanticRules));
+ if (searchElement != null) {
+ addIncludes(searchElement);
+ cluster.setSearch(buildSearch(cluster, searchElement, queryProfiles, semanticRules));
- addSearchHandler(cluster, searchElement);
- addGUIHandler(cluster);
- validateAndAddConfiguredComponents(cluster, searchElement, "renderer", ContainerModelBuilder::validateRendererElement);
- }
-
- private void addModelEvaluation(Element spec, ContainerCluster cluster, ConfigModelContext context) {
- Element modelEvaluationElement = XML.getChild(spec, "model-evaluation");
- if (modelEvaluationElement == null) return;
-
- RankProfileList profiles =
- context.vespaModel() != null ? context.vespaModel().rankProfileList() : RankProfileList.empty;
- cluster.setModelEvaluation(new ContainerModelEvaluation(cluster, profiles));
+ addSearchHandler(cluster, searchElement);
+ addGUIHandler(cluster);
+ validateAndAddConfiguredComponents(cluster, searchElement, "renderer", ContainerModelBuilder::validateRendererElement);
+ }
}
private void addProcessing(Element spec, ContainerCluster cluster) {
Element processingElement = XML.getChild(spec, "processing");
- if (processingElement == null) return;
-
- addIncludes(processingElement);
- cluster.setProcessingChains(new DomProcessingBuilder(null).build(cluster, processingElement),
- serverBindings(processingElement, ProcessingChains.defaultBindings));
- validateAndAddConfiguredComponents(cluster, processingElement, "renderer", ContainerModelBuilder::validateRendererElement);
+ if (processingElement != null) {
+ addIncludes(processingElement);
+ cluster.setProcessingChains(new DomProcessingBuilder(null).build(cluster, processingElement),
+ serverBindings(processingElement, ProcessingChains.defaultBindings));
+ validateAndAddConfiguredComponents(cluster, processingElement, "renderer", ContainerModelBuilder::validateRendererElement);
+ }
}
private ContainerSearch buildSearch(ContainerCluster containerCluster, Element producerSpec,
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 ec68243ec9d..d3709e88f29 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
@@ -299,7 +299,7 @@ public class Content extends ConfigModel {
AbstractConfigProducer parent = root.getChildren().get(ContainerModel.DOCPROC_RESERVED_NAME);
if (parent == null)
parent = new SimpleConfigProducer(root, ContainerModel.DOCPROC_RESERVED_NAME);
- ContainerCluster indexingCluster = new ContainerCluster(parent, "cluster." + indexerName, indexerName);
+ ContainerCluster indexingCluster = new ContainerCluster(parent, "cluster." + indexerName, indexerName, RankProfileList.empty);
ContainerModel indexingClusterModel = new ContainerModel(modelContext.withParent(parent).withId(indexingCluster.getSubId()));
indexingClusterModel.setCluster(indexingCluster);
modelContext.getConfigModelRepoAdder().add(indexingClusterModel);
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 f15ba547894..cce367ed611 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
@@ -443,7 +443,8 @@ public class ContentCluster extends AbstractConfigProducer implements
ContainerCluster clusterControllers = new ContainerCluster(parent,
name,
name,
- new ClusterControllerClusterVerifier());
+ new ClusterControllerClusterVerifier(),
+ RankProfileList.empty);
List<Container> containers = new ArrayList<>();
// Add a cluster controller on each config server (there is always at least one).
if (clusterControllers.getContainers().isEmpty()) {
diff --git a/config-model/src/main/resources/schema/containercluster.rnc b/config-model/src/main/resources/schema/containercluster.rnc
index 52d71574f82..a8c763e43b7 100644
--- a/config-model/src/main/resources/schema/containercluster.rnc
+++ b/config-model/src/main/resources/schema/containercluster.rnc
@@ -16,7 +16,6 @@ ContainerServices =
SearchInContainer? &
DocprocInContainer? &
ProcessingInContainer? &
- ModelEvaluation? &
DocumentApi? &
Components* &
Component* &
@@ -86,10 +85,6 @@ SecretStore = element secret-store {
} +
}
-ModelEvaluation = element model-evaluation {
- empty
-}
-
# REST-API:
RestApi = element rest-api {
diff --git a/config-model/src/test/cfg/application/ml_serving/services.xml b/config-model/src/test/cfg/application/ml_serving/services.xml
index 41f44e04c99..42528336bc5 100644
--- a/config-model/src/test/cfg/application/ml_serving/services.xml
+++ b/config-model/src/test/cfg/application/ml_serving/services.xml
@@ -3,7 +3,6 @@
<services version="1.0">
<container version="1.0">
- <model-evaluation/>
<nodes>
<node hostalias="node1" />
</nodes>
diff --git a/config-model/src/test/cfg/application/ml_serving_name_collision/services.xml b/config-model/src/test/cfg/application/ml_serving_name_collision/services.xml
index 41f44e04c99..42528336bc5 100644
--- a/config-model/src/test/cfg/application/ml_serving_name_collision/services.xml
+++ b/config-model/src/test/cfg/application/ml_serving_name_collision/services.xml
@@ -3,7 +3,6 @@
<services version="1.0">
<container version="1.0">
- <model-evaluation/>
<nodes>
<node hostalias="node1" />
</nodes>
diff --git a/config-model/src/test/cfg/application/ml_serving_not_activated/models/xgboost.2.2.json b/config-model/src/test/cfg/application/ml_serving_not_activated/models/xgboost.2.2.json
deleted file mode 100644
index f8949b47e52..00000000000
--- a/config-model/src/test/cfg/application/ml_serving_not_activated/models/xgboost.2.2.json
+++ /dev/null
@@ -1,19 +0,0 @@
-[
- { "nodeid": 0, "depth": 0, "split": "f29", "split_condition": -0.1234567, "yes": 1, "no": 2, "missing": 1, "children": [
- { "nodeid": 1, "depth": 1, "split": "f56", "split_condition": -0.242398, "yes": 3, "no": 4, "missing": 3, "children": [
- { "nodeid": 3, "leaf": 1.71218 },
- { "nodeid": 4, "leaf": -1.70044 }
- ]},
- { "nodeid": 2, "depth": 1, "split": "f109", "split_condition": 0.8723473, "yes": 5, "no": 6, "missing": 5, "children": [
- { "nodeid": 5, "leaf": -1.94071 },
- { "nodeid": 6, "leaf": 1.85965 }
- ]}
- ]},
- { "nodeid": 0, "depth": 0, "split": "f60", "split_condition": -0.482947, "yes": 1, "no": 2, "missing": 1, "children": [
- { "nodeid": 1, "depth": 1, "split": "f29", "split_condition": -4.2387498, "yes": 3, "no": 4, "missing": 3, "children": [
- { "nodeid": 3, "leaf": 0.784718 },
- { "nodeid": 4, "leaf": -0.96853 }
- ]},
- { "nodeid": 2, "leaf": -6.23624 }
- ]}
-] \ No newline at end of file
diff --git a/config-model/src/test/cfg/application/ml_serving_not_activated/services.xml b/config-model/src/test/cfg/application/ml_serving_not_activated/services.xml
deleted file mode 100644
index 9d8b7a81201..00000000000
--- a/config-model/src/test/cfg/application/ml_serving_not_activated/services.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!-- Copyright 2018 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -->
-<services version="1.0">
-
- <container version="1.0">
- <!-- No <model-evaluation/> tag -->
- <nodes>
- <node hostalias="node1" />
- </nodes>
-
- </container>
-
-</services>
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/container/ContainerClusterTest.java b/config-model/src/test/java/com/yahoo/vespa/model/container/ContainerClusterTest.java
index 756a0c53485..850fd91e151 100755
--- a/config-model/src/test/java/com/yahoo/vespa/model/container/ContainerClusterTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/container/ContainerClusterTest.java
@@ -81,7 +81,7 @@ public class ContainerClusterTest {
.zone(new Zone(SystemName.cd, Environment.test, RegionName.from("some-region")))
.build();
MockRoot root = new MockRoot("foo", state);
- ContainerCluster cluster = new ContainerCluster(root, "container0", "container1");
+ ContainerCluster cluster = new ContainerCluster(root, "container0", "container1", RankProfileList.empty);
ConfigserverConfig.Builder builder = new ConfigserverConfig.Builder();
cluster.getConfig(builder);
ConfigserverConfig config = new ConfigserverConfig(builder);
@@ -112,8 +112,8 @@ public class ContainerClusterTest {
MockRoot root = new MockRoot("foo", state);
ContainerCluster cluster = extraComponents.isPresent()
- ? new ContainerCluster(root, "container0", "container1", extraComponents.get())
- : new ContainerCluster(root, "container0", "container1");
+ ? new ContainerCluster(root, "container0", "container1", extraComponents.get(), RankProfileList.empty)
+ : new ContainerCluster(root, "container0", "container1", RankProfileList.empty);
if (isCombinedCluster)
cluster.setHostClusterId("test-content-cluster");
cluster.setMemoryPercentage(memoryPercentage);
@@ -258,7 +258,7 @@ public class ContainerClusterTest {
public void requireThatRoutingProviderIsDisabledForNonHosted() {
DeployState state = new DeployState.Builder().properties(new DeployProperties.Builder().hostedVespa(false).build()).build();
MockRoot root = new MockRoot("foo", state);
- ContainerCluster cluster = new ContainerCluster(root, "container0", "container1");
+ ContainerCluster cluster = new ContainerCluster(root, "container0", "container1", RankProfileList.empty);
RoutingProviderConfig.Builder builder = new RoutingProviderConfig.Builder();
cluster.getConfig(builder);
RoutingProviderConfig config = new RoutingProviderConfig(builder);
@@ -282,7 +282,7 @@ public class ContainerClusterTest {
}
private static ContainerCluster newContainerCluster() {
- ContainerCluster cluster = new ContainerCluster(null, "subId", "name");
+ ContainerCluster cluster = new ContainerCluster(null, "subId", "name", RankProfileList.empty);
addContainer(cluster, "c1", "host-c1");
addContainer(cluster, "c2", "host-c2");
return cluster;
diff --git a/config-model/src/test/java/com/yahoo/vespa/model/ml/ModelEvaluationTest.java b/config-model/src/test/java/com/yahoo/vespa/model/ml/ModelEvaluationTest.java
index b7b3fc99e20..35e6642d7cb 100644
--- a/config-model/src/test/java/com/yahoo/vespa/model/ml/ModelEvaluationTest.java
+++ b/config-model/src/test/java/com/yahoo/vespa/model/ml/ModelEvaluationTest.java
@@ -4,7 +4,6 @@ package com.yahoo.vespa.model.ml;
import ai.vespa.models.evaluation.Model;
import ai.vespa.models.evaluation.ModelsEvaluator;
import ai.vespa.models.evaluation.RankProfilesConfigImporter;
-import com.yahoo.component.ComponentId;
import com.yahoo.config.FileReference;
import com.yahoo.config.application.api.ApplicationPackage;
import com.yahoo.filedistribution.fileacquirer.FileAcquirer;
@@ -17,6 +16,7 @@ import com.yahoo.vespa.config.search.RankProfilesConfig;
import com.yahoo.vespa.config.search.core.RankingConstantsConfig;
import com.yahoo.vespa.model.VespaModel;
import com.yahoo.vespa.model.container.ContainerCluster;
+import org.junit.After;
import org.junit.Test;
import java.io.IOException;
@@ -25,7 +25,6 @@ import java.util.stream.Collectors;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
/**
@@ -33,15 +32,21 @@ import static org.junit.Assert.assertTrue;
*/
public class ModelEvaluationTest {
+ private static final Path appDir = Path.fromString("src/test/cfg/application/ml_serving");
+
+ @After
+ public void removeGeneratedModelFiles() {
+ IOUtils.recursiveDeleteDir(appDir.append(ApplicationPackage.MODELS_GENERATED_DIR).toFile());
+ }
+
@Test
- public void testMl_serving() throws IOException {
- Path appDir = Path.fromString("src/test/cfg/application/ml_serving");
+ public void testMl_ServingApplication() throws IOException {
+ ImportedModelTester tester = new ImportedModelTester("ml_serving", appDir);
+ assertHasMlModels(tester.createVespaModel());
+
+ // At this point the expression is stored - copy application to another location which do not have a models dir
Path storedAppDir = appDir.append("copy");
try {
- ImportedModelTester tester = new ImportedModelTester("ml_serving", appDir);
- assertHasMlModels(tester.createVespaModel());
-
- // At this point the expression is stored - copy application to another location which do not have a models dir
storedAppDir.toFile().mkdirs();
IOUtils.copy(appDir.append("services.xml").toString(), storedAppDir.append("services.xml").toString());
IOUtils.copyDirectory(appDir.append(ApplicationPackage.MODELS_GENERATED_DIR).toFile(),
@@ -50,35 +55,12 @@ public class ModelEvaluationTest {
assertHasMlModels(storedTester.createVespaModel());
}
finally {
- IOUtils.recursiveDeleteDir(appDir.append(ApplicationPackage.MODELS_GENERATED_DIR).toFile());
IOUtils.recursiveDeleteDir(storedAppDir.toFile());
}
}
- /** Tests that we do not load models (which will waste memory) when not requested */
- @Test
- public void testMl_serving_not_activated() throws IOException {
- Path appDir = Path.fromString("src/test/cfg/application/ml_serving_not_activated");
- try {
- ImportedModelTester tester = new ImportedModelTester("ml_serving", appDir);
- VespaModel model = tester.createVespaModel();
- ContainerCluster cluster = model.getContainerClusters().get("container");
- assertNull(cluster.getComponentsMap().get(new ComponentId(ModelsEvaluator.class.getName())));
-
- RankProfilesConfig.Builder b = new RankProfilesConfig.Builder();
- cluster.getConfig(b);
- RankProfilesConfig config = new RankProfilesConfig(b);
-
- assertEquals(0, config.rankprofile().size());
- }
- finally {
- IOUtils.recursiveDeleteDir(appDir.append(ApplicationPackage.MODELS_GENERATED_DIR).toFile());
- }
- }
-
private void assertHasMlModels(VespaModel model) {
ContainerCluster cluster = model.getContainerClusters().get("container");
- assertNotNull(cluster.getComponentsMap().get(new ComponentId(ModelsEvaluator.class.getName())));
RankProfilesConfig.Builder b = new RankProfilesConfig.Builder();
cluster.getConfig(b);