aboutsummaryrefslogtreecommitdiffstats
path: root/config-model/src/main/java/com/yahoo/searchdefinition/RankingConstants.java
diff options
context:
space:
mode:
Diffstat (limited to 'config-model/src/main/java/com/yahoo/searchdefinition/RankingConstants.java')
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/RankingConstants.java23
1 files changed, 19 insertions, 4 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/RankingConstants.java b/config-model/src/main/java/com/yahoo/searchdefinition/RankingConstants.java
index 8ccc0ef429e..3d19cba78b6 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/RankingConstants.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/RankingConstants.java
@@ -6,8 +6,9 @@ import com.yahoo.vespa.model.AbstractService;
import java.util.Collection;
import java.util.Collections;
-import java.util.HashMap;
import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.function.Function;
/**
* Constant values for ranking/model execution tied to a search definition, or globally to an application
@@ -17,7 +18,7 @@ import java.util.Map;
*/
public class RankingConstants {
- private final Map<String, RankingConstant> constants = new HashMap<>();
+ private final Map<String, RankingConstant> constants = new ConcurrentHashMap<>();
private final FileRegistry fileRegistry;
public RankingConstants(FileRegistry fileRegistry) {
@@ -28,9 +29,23 @@ public class RankingConstants {
constant.validate();
constant.register(fileRegistry);
String name = constant.getName();
- if (constants.containsKey(name))
+ RankingConstant prev = constants.putIfAbsent(name, constant);
+ if ( prev != null )
throw new IllegalArgumentException("Ranking constant '" + name + "' defined twice");
- constants.put(name, constant);
+ }
+ public void putIfAbsent(RankingConstant constant) {
+ constant.validate();
+ constant.register(fileRegistry);
+ String name = constant.getName();
+ constants.putIfAbsent(name, constant);
+ }
+ public void computeIfAbsent(String name, Function<? super String, ? extends RankingConstant> createConstant) {
+ constants.computeIfAbsent(name, key -> {
+ RankingConstant constant = createConstant.apply(key);
+ constant.validate();
+ constant.register(fileRegistry);
+ return constant;
+ });
}
/** Returns the ranking constant with the given name, or null if not present */