summaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-09-14 11:28:12 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2021-09-14 11:28:12 +0200
commit3e130869dfb40c01d4bc35b987dc8a93c84fd8b6 (patch)
treefa8ef512ff5977fbfc406d67b9c426d60a42958b /config-model
parentd9e4e3372fa5b93f8cb1848b28ff9019385405bc (diff)
Expose ownership of RankingConstants so thread safety is explicit.
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/DefaultRankProfile.java4
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/DocumentsOnlyRankProfile.java5
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/RankProfile.java21
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/RankProfileRegistry.java4
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/UnrankedRankProfile.java5
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/OnnxModelTransformer.java2
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/VespaModel.java8
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/ml/ConvertedModel.java26
-rw-r--r--config-model/src/main/javacc/SDParser.jj11
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/RankProfileRegistryTest.java4
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/RankProfileTestCase.java2
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/derived/LiteralBoostTestCase.java4
12 files changed, 47 insertions, 49 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/DefaultRankProfile.java b/config-model/src/main/java/com/yahoo/searchdefinition/DefaultRankProfile.java
index 16a0454cb4b..0e5540d4430 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/DefaultRankProfile.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/DefaultRankProfile.java
@@ -19,8 +19,8 @@ public class DefaultRankProfile extends RankProfile {
*
* @param rankProfileRegistry The {@link com.yahoo.searchdefinition.RankProfileRegistry} to use for storing and looking up rank profiles.
*/
- public DefaultRankProfile(Search search, RankProfileRegistry rankProfileRegistry) {
- super("default", search, rankProfileRegistry);
+ public DefaultRankProfile(Search search, RankProfileRegistry rankProfileRegistry, RankingConstants rankingConstants) {
+ super("default", search, rankProfileRegistry, rankingConstants);
}
/**
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/DocumentsOnlyRankProfile.java b/config-model/src/main/java/com/yahoo/searchdefinition/DocumentsOnlyRankProfile.java
index 85048480512..dbe5c062569 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/DocumentsOnlyRankProfile.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/DocumentsOnlyRankProfile.java
@@ -14,8 +14,9 @@ import java.util.List;
*/
public class DocumentsOnlyRankProfile extends RankProfile {
- public DocumentsOnlyRankProfile(String name, Search search, RankProfileRegistry rankProfileRegistry) {
- super(name, search, rankProfileRegistry);
+ public DocumentsOnlyRankProfile(String name, Search search, RankProfileRegistry rankProfileRegistry,
+ RankingConstants rankingConstants) {
+ super(name, search, rankProfileRegistry, rankingConstants);
}
@Override
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/RankProfile.java b/config-model/src/main/java/com/yahoo/searchdefinition/RankProfile.java
index 2a85b0b85eb..64e3e794429 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/RankProfile.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/RankProfile.java
@@ -63,9 +63,6 @@ public class RankProfile implements Cloneable {
/** The search definition owning this profile, or null if global (owned by a model) */
private final ImmutableSearch search;
- /** The model owning this profile if it is global, or null if it is owned by a search definition */
- private final VespaModel model;
-
/** The name of the rank profile inherited by this */
private String inheritedName = null;
private RankProfile inherited = null;
@@ -128,7 +125,8 @@ public class RankProfile implements Cloneable {
/** Global onnx models not tied to a search definition */
private final OnnxModels onnxModels;
-
+ private final RankingConstants rankingConstants;
+ private final ApplicationPackage applicationPackage;
private final DeployLogger deployLogger;
/**
@@ -139,12 +137,13 @@ public class RankProfile implements Cloneable {
* @param rankProfileRegistry the {@link com.yahoo.searchdefinition.RankProfileRegistry} to use for storing
* and looking up rank profiles.
*/
- public RankProfile(String name, Search search, RankProfileRegistry rankProfileRegistry) {
+ public RankProfile(String name, Search search, RankProfileRegistry rankProfileRegistry, RankingConstants rankingConstants) {
this.name = Objects.requireNonNull(name, "name cannot be null");
this.search = Objects.requireNonNull(search, "search cannot be null");
- this.model = null;
this.onnxModels = null;
+ this.rankingConstants = rankingConstants;
this.rankProfileRegistry = rankProfileRegistry;
+ this.applicationPackage = search.applicationPackage();
this.deployLogger = search.getDeployLogger();
}
@@ -152,14 +151,14 @@ public class RankProfile implements Cloneable {
* Creates a global rank profile
*
* @param name the name of the new profile
- * @param model the model owning this profile
*/
- public RankProfile(String name, VespaModel model, DeployLogger deployLogger, RankProfileRegistry rankProfileRegistry, OnnxModels onnxModels) {
+ public RankProfile(String name, ApplicationPackage applicationPackage, DeployLogger deployLogger, RankProfileRegistry rankProfileRegistry, RankingConstants rankingConstants, OnnxModels onnxModels) {
this.name = Objects.requireNonNull(name, "name cannot be null");
this.search = null;
- this.model = Objects.requireNonNull(model, "model cannot be null");
this.rankProfileRegistry = rankProfileRegistry;
+ this.rankingConstants = rankingConstants;
this.onnxModels = onnxModels;
+ this.applicationPackage = applicationPackage;
this.deployLogger = deployLogger;
}
@@ -170,12 +169,12 @@ public class RankProfile implements Cloneable {
/** Returns the application this is part of */
public ApplicationPackage applicationPackage() {
- return search != null ? search.applicationPackage() : model.applicationPackage();
+ return applicationPackage;
}
/** Returns the ranking constants of the owner of this */
public RankingConstants rankingConstants() {
- return search != null ? search.rankingConstants() : model.rankingConstants();
+ return rankingConstants;
}
public Map<String, OnnxModel> onnxModels() {
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/RankProfileRegistry.java b/config-model/src/main/java/com/yahoo/searchdefinition/RankProfileRegistry.java
index d8fca37c6b7..ff04bdc8a4b 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/RankProfileRegistry.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/RankProfileRegistry.java
@@ -32,8 +32,8 @@ public class RankProfileRegistry {
public static RankProfileRegistry createRankProfileRegistryWithBuiltinRankProfiles(Search search) {
RankProfileRegistry rankProfileRegistry = new RankProfileRegistry();
- rankProfileRegistry.add(new DefaultRankProfile(search, rankProfileRegistry));
- rankProfileRegistry.add(new UnrankedRankProfile(search, rankProfileRegistry));
+ rankProfileRegistry.add(new DefaultRankProfile(search, rankProfileRegistry, search.rankingConstants()));
+ rankProfileRegistry.add(new UnrankedRankProfile(search, rankProfileRegistry, search.rankingConstants()));
return rankProfileRegistry;
}
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/UnrankedRankProfile.java b/config-model/src/main/java/com/yahoo/searchdefinition/UnrankedRankProfile.java
index b58f696cbdf..bea0e70124d 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/UnrankedRankProfile.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/UnrankedRankProfile.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.searchdefinition;
-
import com.yahoo.searchlib.rankingexpression.RankingExpression;
import com.yahoo.searchlib.rankingexpression.parser.ParseException;
@@ -12,8 +11,8 @@ import com.yahoo.searchlib.rankingexpression.parser.ParseException;
*/
public class UnrankedRankProfile extends RankProfile {
- public UnrankedRankProfile(Search search, RankProfileRegistry rankProfileRegistry) {
- super("unranked", search, rankProfileRegistry);
+ public UnrankedRankProfile(Search search, RankProfileRegistry rankProfileRegistry, RankingConstants rankingConstants) {
+ super("unranked", search, rankProfileRegistry, rankingConstants);
try {
RankingExpression exp = new RankingExpression("value(0)");
this.setFirstPhaseRanking(exp);
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/OnnxModelTransformer.java b/config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/OnnxModelTransformer.java
index a3acc64bd4a..706457b7711 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/OnnxModelTransformer.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/OnnxModelTransformer.java
@@ -75,7 +75,7 @@ public class OnnxModelTransformer extends ExpressionTransformer<RankProfileTrans
if (onnxModel == null) {
String path = asString(arguments.expressions().get(0));
ModelName modelName = new ModelName(null, Path.fromString(path), true);
- ConvertedModel convertedModel = ConvertedModel.fromStore(modelName, path, rankProfile);
+ ConvertedModel convertedModel = ConvertedModel.fromStore(search.applicationPackage(), modelName, path, rankProfile);
FeatureArguments featureArguments = new FeatureArguments(arguments);
return convertedModel.expression(featureArguments, null);
}
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 64e606dd7d3..937537e5f99 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
@@ -299,10 +299,10 @@ public final class VespaModel extends AbstractConfigProducerRoot implements Seri
for (ImportedMlModel model : importedModels) {
// Due to automatic naming not guaranteeing unique names, there must be a 1-1 between OnnxModels and global RankProfiles.
OnnxModels onnxModels = onnxModelInfoFromSource(model);
- RankProfile profile = new RankProfile(model.name(), this, deployLogger, rankProfileRegistry, onnxModels);
+ RankProfile profile = new RankProfile(model.name(), applicationPackage, deployLogger, rankProfileRegistry, rankingConstants, onnxModels);
rankProfileRegistry.add(profile);
futureModels.add(deployState.getExecutor().submit(() -> {
- ConvertedModel convertedModel = ConvertedModel.fromSource(new ModelName(model.name()),
+ ConvertedModel convertedModel = ConvertedModel.fromSource(applicationPackage, new ModelName(model.name()),
model.name(), profile, queryProfiles.getRegistry(), model);
convertedModel.expressions().values().forEach(f -> profile.addFunction(f, false));
return convertedModel;
@@ -316,10 +316,10 @@ public final class VespaModel extends AbstractConfigProducerRoot implements Seri
if (modelName.contains(".")) continue; // Name space: Not a global profile
// Due to automatic naming not guaranteeing unique names, there must be a 1-1 between OnnxModels and global RankProfiles.
OnnxModels onnxModels = onnxModelInfoFromStore(modelName);
- RankProfile profile = new RankProfile(modelName, this, deployLogger, rankProfileRegistry, onnxModels);
+ RankProfile profile = new RankProfile(modelName, applicationPackage, deployLogger, rankProfileRegistry, rankingConstants, onnxModels);
rankProfileRegistry.add(profile);
futureModels.add(deployState.getExecutor().submit(() -> {
- ConvertedModel convertedModel = ConvertedModel.fromStore(new ModelName(modelName), modelName, profile);
+ ConvertedModel convertedModel = ConvertedModel.fromStore(applicationPackage, new ModelName(modelName), modelName, profile);
convertedModel.expressions().values().forEach(f -> profile.addFunction(f, false));
return convertedModel;
}));
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/ml/ConvertedModel.java b/config-model/src/main/java/com/yahoo/vespa/model/ml/ConvertedModel.java
index 9a217c8e2c7..7fe99a87e65 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/ml/ConvertedModel.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/ml/ConvertedModel.java
@@ -84,11 +84,12 @@ public class ConvertedModel {
public static ConvertedModel fromSourceOrStore(Path modelPath,
boolean pathIsFile,
RankProfileTransformContext context) {
+ ApplicationPackage applicationPackage = context.rankProfile().applicationPackage();
ImportedMlModel sourceModel = // TODO: Convert to name here, make sure its done just one way
- context.importedModels().get(sourceModelFile(context.rankProfile().applicationPackage(), modelPath));
+ context.importedModels().get(sourceModelFile(applicationPackage, modelPath));
ModelName modelName = new ModelName(context.rankProfile().getName(), modelPath, pathIsFile);
- if (sourceModel == null && ! new ModelStore(context.rankProfile().applicationPackage(), modelName).exists())
+ if (sourceModel == null && ! new ModelStore(applicationPackage, modelName).exists())
throw new IllegalArgumentException("No model '" + modelPath + "' is available. Available models: " +
context.importedModels().all().stream().map(ImportedMlModel::source).collect(Collectors.joining(", ")));
@@ -96,26 +97,22 @@ public class ConvertedModel {
if ( ! sourceModel.isNative()) {
sourceModel = sourceModel.asNative();
}
- return fromSource(modelName,
- modelPath.toString(),
- context.rankProfile(),
- context.queryProfiles(),
- sourceModel);
+ return fromSource(applicationPackage, modelName, modelPath.toString(), context.rankProfile(),
+ context.queryProfiles(), sourceModel);
}
else {
- return fromStore(modelName,
- modelPath.toString(),
- context.rankProfile());
+ return fromStore(applicationPackage, modelName, modelPath.toString(), context.rankProfile());
}
}
- public static ConvertedModel fromSource(ModelName modelName,
+ public static ConvertedModel fromSource(ApplicationPackage applicationPackage,
+ ModelName modelName,
String modelDescription,
RankProfile rankProfile,
QueryProfileRegistry queryProfileRegistry,
ImportedMlModel importedModel) {
try {
- ModelStore modelStore = new ModelStore(rankProfile.applicationPackage(), modelName);
+ ModelStore modelStore = new ModelStore(applicationPackage, modelName);
return new ConvertedModel(modelName,
modelDescription,
convertAndStore(importedModel, rankProfile, queryProfileRegistry, modelStore),
@@ -127,11 +124,12 @@ public class ConvertedModel {
}
}
- public static ConvertedModel fromStore(ModelName modelName,
+ public static ConvertedModel fromStore(ApplicationPackage applicationPackage,
+ ModelName modelName,
String modelDescription,
RankProfile rankProfile) {
try {
- ModelStore modelStore = new ModelStore(rankProfile.applicationPackage(), modelName);
+ ModelStore modelStore = new ModelStore(applicationPackage, modelName);
return new ConvertedModel(modelName,
modelDescription,
convertStored(modelStore, rankProfile),
diff --git a/config-model/src/main/javacc/SDParser.jj b/config-model/src/main/javacc/SDParser.jj
index f51c441cdd4..4d7b31e6e50 100644
--- a/config-model/src/main/javacc/SDParser.jj
+++ b/config-model/src/main/javacc/SDParser.jj
@@ -434,9 +434,10 @@ Search rootSchema(String dir) :
Search search;
}
{
- ( ( <SCHEMA> | <SEARCH> ) name = identifier() { search = new Search(name, app, fileRegistry,deployLogger, properties);
- rankProfileRegistry.add(new DefaultRankProfile(search, rankProfileRegistry));
- rankProfileRegistry.add(new UnrankedRankProfile(search, rankProfileRegistry));}
+ ( ( <SCHEMA> | <SEARCH> ) name = identifier() {
+ search = new Search(name, app, fileRegistry,deployLogger, properties);
+ rankProfileRegistry.add(new DefaultRankProfile(search, rankProfileRegistry, search.rankingConstants()));
+ rankProfileRegistry.add(new UnrankedRankProfile(search, rankProfileRegistry, search.rankingConstants()));}
lbrace() (rootSchemaItem(search) (<NL>)*)* <RBRACE> (<NL>)* <EOF>)
{ return search; }
}
@@ -2026,12 +2027,12 @@ void rankProfile(Search search) :
( ( <MODEL> | <RANKPROFILE> ) name = identifierWithDash()
{
if (documentsOnly) {
- profile = new DocumentsOnlyRankProfile(name, search, rankProfileRegistry);
+ profile = new DocumentsOnlyRankProfile(name, search, rankProfileRegistry, search.rankingConstants());
}
else if ("default".equals(name)) {
profile = rankProfileRegistry.get(search, "default");
} else {
- profile = new RankProfile(name, search, rankProfileRegistry);
+ profile = new RankProfile(name, search, rankProfileRegistry, search.rankingConstants());
}
}
[inheritsRankProfile(profile)]
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/RankProfileRegistryTest.java b/config-model/src/test/java/com/yahoo/searchdefinition/RankProfileRegistryTest.java
index 84819439048..7c679c8b3ad 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/RankProfileRegistryTest.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/RankProfileRegistryTest.java
@@ -35,7 +35,7 @@ public class RankProfileRegistryTest {
public void testRankProfileDuplicateNameIsIllegal() {
Search search = new Search("foo");
RankProfileRegistry rankProfileRegistry = RankProfileRegistry.createRankProfileRegistryWithBuiltinRankProfiles(search);
- RankProfile barRankProfile = new RankProfile("bar", search, rankProfileRegistry);
+ RankProfile barRankProfile = new RankProfile("bar", search, rankProfileRegistry, search.rankingConstants());
rankProfileRegistry.add(barRankProfile);
rankProfileRegistry.add(barRankProfile);
}
@@ -47,7 +47,7 @@ public class RankProfileRegistryTest {
for (String rankProfileName : RankProfileRegistry.overridableRankProfileNames) {
assertNull(rankProfileRegistry.get(search, rankProfileName).getFunctions().get("foo"));
- RankProfile rankProfileWithAddedFunction = new RankProfile(rankProfileName, search, rankProfileRegistry);
+ RankProfile rankProfileWithAddedFunction = new RankProfile(rankProfileName, search, rankProfileRegistry, search.rankingConstants());
rankProfileWithAddedFunction.addFunction(new ExpressionFunction("foo", RankingExpression.from("1+2")), true);
rankProfileRegistry.add(rankProfileWithAddedFunction);
assertNotNull(rankProfileRegistry.get(search, rankProfileName).getFunctions().get("foo"));
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/RankProfileTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/RankProfileTestCase.java
index 69789d09dc2..2c1f68e5ecc 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/RankProfileTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/RankProfileTestCase.java
@@ -50,7 +50,7 @@ public class RankProfileTestCase extends SchemaTestCase {
a.setRankType(RankType.IDENTITY);
document.addField("b", DataType.STRING);
search.addDocument(document);
- RankProfile child = new RankProfile("child", search, rankProfileRegistry);
+ RankProfile child = new RankProfile("child", search, rankProfileRegistry, search.rankingConstants());
child.setInherited("default");
rankProfileRegistry.add(child);
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/derived/LiteralBoostTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/derived/LiteralBoostTestCase.java
index e9e618cb333..2b58d736ce4 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/derived/LiteralBoostTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/derived/LiteralBoostTestCase.java
@@ -36,7 +36,7 @@ public class LiteralBoostTestCase extends AbstractExportingTestCase {
SDField field1= document.addField("a", DataType.STRING);
field1.parseIndexingScript("{ index }");
field1.setLiteralBoost(20);
- RankProfile other=new RankProfile("other", search, rankProfileRegistry);
+ RankProfile other=new RankProfile("other", search, rankProfileRegistry, search.rankingConstants());
rankProfileRegistry.add(other);
other.addRankSetting(new RankProfile.RankSetting("a", RankProfile.RankSetting.Type.LITERALBOOST, 333));
@@ -67,7 +67,7 @@ public class LiteralBoostTestCase extends AbstractExportingTestCase {
search.addDocument(document);
SDField field1= document.addField("a", DataType.STRING);
field1.parseIndexingScript("{ index }");
- RankProfile other=new RankProfile("other", search, rankProfileRegistry);
+ RankProfile other=new RankProfile("other", search, rankProfileRegistry, search.rankingConstants());
rankProfileRegistry.add(other);
other.addRankSetting(new RankProfile.RankSetting("a", RankProfile.RankSetting.Type.LITERALBOOST, 333));