diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2021-09-14 11:28:12 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2021-09-14 11:28:12 +0200 |
commit | 3e130869dfb40c01d4bc35b987dc8a93c84fd8b6 (patch) | |
tree | fa8ef512ff5977fbfc406d67b9c426d60a42958b /config-model | |
parent | d9e4e3372fa5b93f8cb1848b28ff9019385405bc (diff) |
Expose ownership of RankingConstants so thread safety is explicit.
Diffstat (limited to 'config-model')
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)); |