summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-05-27 15:20:02 +0200
committerGitHub <noreply@github.com>2021-05-27 15:20:02 +0200
commitbba2924a61ace954a7d61a4bbb66f21a4cc062af (patch)
treea2f06299946934568664fbac9756d42e4f9ba6a9
parent2cfd9a73adee4d2b6d3d446f19e61167e31bd043 (diff)
parent09f796ee4f1c8d180865ef616542bd545c66affa (diff)
Merge pull request #18010 from vespa-engine/balder/log-instead-of-throw-on-redefinitions
Log instead of throwing on identical redefinition of rank-expressions.
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/RankExpressionFiles.java18
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/RankProfile.java2
2 files changed, 16 insertions, 4 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/RankExpressionFiles.java b/config-model/src/main/java/com/yahoo/searchdefinition/RankExpressionFiles.java
index ebc91e0693f..34ad912dd00 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/RankExpressionFiles.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/RankExpressionFiles.java
@@ -1,20 +1,32 @@
package com.yahoo.searchdefinition;
+import com.yahoo.config.application.api.DeployLogger;
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.logging.Level;
public class RankExpressionFiles {
private final Map<String, RankExpressionFile> expressions = new HashMap<>();
- public void add(RankExpressionFile expression) {
+ //TODO Deploy logger should not be necessary, as redefinition is illegal, but legacy prevents enforcement starting now.
+ public void add(RankExpressionFile expression, DeployLogger deployLogger) {
expression.validate();
String name = expression.getName();
- if (expressions.containsKey(name))
- throw new IllegalArgumentException("Rank expression file '" + name + "' defined twice");
+ if (expressions.containsKey(name)) {
+ if ( expressions.get(name).getFileName().equals(expression.getFileName()) ) {
+ //TODO Throw instead, No later than Vespa 8
+ deployLogger.logApplicationPackage(Level.WARNING, "Rank expression file '" + name +
+ "' defined twice with identical expression (illegal and will be enforced soon) '" + expression.getFileName() + "'.");
+ } else {
+ throw new IllegalArgumentException("Rank expression file '" + name +
+ "' defined twice (illegal but not enforced), but redefinition is not matching (illegal and enforced), " +
+ "previous = '" + expressions.get(name).getFileName() + "', new = '" + expression.getFileName() + "'.");
+ }
+ }
expressions.put(name, expression);
}
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 97b537066ee..eec5d4617d0 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/RankProfile.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/RankProfile.java
@@ -722,7 +722,7 @@ public class RankProfile implements Cloneable {
"' in subdirectory, which is not supported.");
if (search.getDeployProperties().featureFlags().distributeExternalRankExpressions()) {
- rankExpressionFiles().add(new RankExpressionFile(getUniqueExpressionName(expName), fileName));
+ rankExpressionFiles().add(new RankExpressionFile(getUniqueExpressionName(expName), fileName), search.getDeployLogger());
externalFileExpressions.add(expName);
}
return search.getRankingExpression(fileName);