summaryrefslogtreecommitdiffstats
path: root/config-model/src/main/java
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@oath.com>2021-09-09 14:36:10 +0200
committerGitHub <noreply@github.com>2021-09-09 14:36:10 +0200
commit2aebdbee87ccc18ae8e1e21492351ca0db42d32c (patch)
tree6f3087de3609be91bc59e9e81607fe64258e003a /config-model/src/main/java
parent19d5b8e117f61eca773b10173edcd6a4a236ea76 (diff)
parenta885b6f99c21593dd7a6bb79da5ce779de207b36 (diff)
Merge pull request #19047 from vespa-engine/lesters/avoid-stack-overflow-inline-functions
Avoid stack overflow for function inlining case
Diffstat (limited to 'config-model/src/main/java')
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/RankProfile.java4
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/FunctionInliner.java1
2 files changed, 5 insertions, 0 deletions
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 6ba9efdf492..2a85b0b85eb 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/RankProfile.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/RankProfile.java
@@ -644,6 +644,10 @@ public class RankProfile implements Cloneable {
/** Adds a function and returns it */
public RankingExpressionFunction addFunction(ExpressionFunction function, boolean inline) {
RankingExpressionFunction rankingExpressionFunction = new RankingExpressionFunction(function, inline);
+ if (functions.containsKey(function.getName())) {
+ deployLogger.log(Level.WARNING, "Function '" + function.getName() + "' replaces a previous function " +
+ "with the same name in rank profile '" + this.name + "'");
+ }
functions.put(function.getName(), rankingExpressionFunction);
allFunctionsCached = null;
return rankingExpressionFunction;
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/FunctionInliner.java b/config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/FunctionInliner.java
index c15ef20a455..377a90b68f9 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/FunctionInliner.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/expressiontransforms/FunctionInliner.java
@@ -24,6 +24,7 @@ public class FunctionInliner extends ExpressionTransformer<RankProfileTransformC
}
private ExpressionNode transformFeatureNode(ReferenceNode feature, RankProfileTransformContext context) {
+ if (feature.getArguments().size() > 0) return feature; // From RankProfile: only inline no-arg functions
RankProfile.RankingExpressionFunction rankingExpressionFunction = context.inlineFunctions().get(feature.getName());
if (rankingExpressionFunction == null) return feature;
return transform(rankingExpressionFunction.function().getBody().getRoot(), context); // inline recursively and return