summaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2023-08-02 19:40:02 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2023-08-02 19:40:02 +0200
commit15b094e0fc143e16c2bca3f00e296ebb8060d157 (patch)
tree1dfe14ca55c868d4c5657ce70e33dff9bbfa2376 /container-search
parent7a5d1555c64775eb1252573e657ff5f520cee7ff (diff)
Simplify error handling
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/search/query/profiling/Profiling.java6
-rw-r--r--container-search/src/main/java/com/yahoo/search/query/properties/QueryProperties.java86
2 files changed, 23 insertions, 69 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/query/profiling/Profiling.java b/container-search/src/main/java/com/yahoo/search/query/profiling/Profiling.java
index 8541b9c3930..1dbda8143a0 100644
--- a/container-search/src/main/java/com/yahoo/search/query/profiling/Profiling.java
+++ b/container-search/src/main/java/com/yahoo/search/query/profiling/Profiling.java
@@ -33,9 +33,9 @@ public class Profiling implements Cloneable {
public static QueryProfileType getArgumentType() { return argumentType; }
- private ProfilingParams matching = new ProfilingParams();
- private ProfilingParams firstPhaseRanking = new ProfilingParams();
- private ProfilingParams secondPhaseRanking = new ProfilingParams();
+ private final ProfilingParams matching = new ProfilingParams();
+ private final ProfilingParams firstPhaseRanking = new ProfilingParams();
+ private final ProfilingParams secondPhaseRanking = new ProfilingParams();
public ProfilingParams getMatching() {
return matching;
diff --git a/container-search/src/main/java/com/yahoo/search/query/properties/QueryProperties.java b/container-search/src/main/java/com/yahoo/search/query/properties/QueryProperties.java
index 4c05f29ad67..4cb7c4ae0b4 100644
--- a/container-search/src/main/java/com/yahoo/search/query/properties/QueryProperties.java
+++ b/container-search/src/main/java/com/yahoo/search/query/properties/QueryProperties.java
@@ -26,6 +26,7 @@ import com.yahoo.tensor.Tensor;
import java.util.HashMap;
import java.util.Map;
+import java.util.Set;
/**
* Maps between the query model and text properties.
@@ -47,6 +48,9 @@ public class QueryProperties extends Properties {
private final CompiledQueryProfileRegistry profileRegistry;
private final Map<String, Embedder> embedders;
+ private static final Set<String> reservedPrefix = Set.of(Model.MODEL, Presentation.PRESENTATION, Select.SELECT, Ranking.RANKING, Trace.TRACE);
+
+
private record GetterSetter(GetProperty getter, SetProperty setter) {
static GetterSetter of(GetProperty getter, SetProperty setter) {
return new GetterSetter(getter, setter);
@@ -86,7 +90,6 @@ public class QueryProperties extends Properties {
map.put(CompoundName.fromComponents(Ranking.RANKING, Ranking.SOFTTIMEOUT, SoftTimeout.ENABLE), GetterSetter.of(query -> query.getRanking().getSoftTimeout().getEnable(), (query, value) -> query.getRanking().getSoftTimeout().setEnable(asBoolean(value, true))));
map.put(CompoundName.fromComponents(Ranking.RANKING, Ranking.SOFTTIMEOUT, SoftTimeout.FACTOR), GetterSetter.of(query -> query.getRanking().getSoftTimeout().getFactor(), (query, value) -> query.getRanking().getSoftTimeout().setFactor(asDouble(value, null))));
map.put(CompoundName.fromComponents(Ranking.RANKING, Ranking.SOFTTIMEOUT, SoftTimeout.TAILCOST), GetterSetter.of(query -> query.getRanking().getSoftTimeout().getTailcost(), (query, value) -> query.getRanking().getSoftTimeout().setTailcost(asDouble(value, null))));
-
map.put(CompoundName.fromComponents(Select.SELECT), GetterSetter.of(query -> query.getSelect().getGroupingExpressionString(), (query, value) -> query.getSelect().setGroupingExpressionString(asString(value, ""))));
map.put(CompoundName.fromComponents(Select.SELECT, Select.WHERE), GetterSetter.of(query -> query.getSelect().getWhereString(), (query, value) -> query.getSelect().setWhereString(asString(value, ""))));
map.put(CompoundName.fromComponents(Select.SELECT, Select.GROUPING), GetterSetter.of(query -> query.getSelect().getGroupingString(), (query, value) -> query.getSelect().setGroupingString(asString(value, ""))));
@@ -95,6 +98,9 @@ public class QueryProperties extends Properties {
map.put(CompoundName.fromComponents(Trace.TRACE, Trace.PROFILE_DEPTH), GetterSetter.of(null, (query, value) -> query.getTrace().setProfileDepth(asInteger(value, 0))));
map.put(CompoundName.fromComponents(Trace.TRACE, Trace.TIMESTAMPS), GetterSetter.of(query -> query.getTrace().getTimestamps(), (query, value) -> query.getTrace().setTimestamps(asBoolean(value, false))));
map.put(CompoundName.fromComponents(Trace.TRACE, Trace.QUERY), GetterSetter.of(query -> query.getTrace().getQuery(), (query, value) -> query.getTrace().setQuery(asBoolean(value, true))));
+ map.put(CompoundName.fromComponents(Trace.TRACE, Trace.PROFILING, Profiling.MATCHING, ProfilingParams.DEPTH), GetterSetter.of(query -> query.getTrace().getProfiling().getMatching().getDepth(), (query, value) -> query.getTrace().getProfiling().getMatching().setDepth(asInteger(value, 0))));
+ map.put(CompoundName.fromComponents(Trace.TRACE, Trace.PROFILING, Profiling.FIRST_PHASE_RANKING, ProfilingParams.DEPTH), GetterSetter.of(query -> query.getTrace().getProfiling().getFirstPhaseRanking().getDepth(), (query, value) -> query.getTrace().getProfiling().getFirstPhaseRanking().setDepth(asInteger(value, 0))));
+ map.put(CompoundName.fromComponents(Trace.TRACE, Trace.PROFILING, Profiling.SECOND_PHASE_RANKING, ProfilingParams.DEPTH), GetterSetter.of(query -> query.getTrace().getProfiling().getSecondPhaseRanking().getDepth(), (query, value) -> query.getTrace().getProfiling().getSecondPhaseRanking().setDepth(asInteger(value, 0))));
map.put(CompoundName.fromComponents(Presentation.PRESENTATION, Presentation.BOLDING), GetterSetter.of(query -> query.getPresentation().getBolding(), (query, value) -> query.getPresentation().setBolding(asBoolean(value, true))));
map.put(CompoundName.fromComponents(Presentation.PRESENTATION, Presentation.SUMMARY), GetterSetter.of(query -> query.getPresentation().getSummary(), (query, value) -> query.getPresentation().setSummary(asString(value, ""))));
map.put(CompoundName.fromComponents(Presentation.PRESENTATION, Presentation.FORMAT), GetterSetter.of(query -> query.getPresentation().getFormat(), (query, value) -> query.getPresentation().setFormat(asString(value, ""))));
@@ -158,30 +164,10 @@ public class QueryProperties extends Properties {
return;
}
- // TODO: Simplify error handling
- if (key.size() == 2 && key.first().equals(Model.MODEL)) {
- throwIllegalParameter(key.last(), Model.MODEL);
- }
- else if (key.first().equals(Ranking.RANKING)) {
+ //TODO Why is there error handling in set path and not in get path ?
+ if (key.first().equals(Ranking.RANKING)) {
Ranking ranking = query.getRanking();
- if (key.size() == 2) {
- throwIllegalParameter(key.last(), Ranking.RANKING);
- }
- else if (key.size() >= 3 && key.get(1).equals(Ranking.MATCH_PHASE)) {
- if (key.size() == 3) {
- throwIllegalParameter(key.rest().toString(), Ranking.MATCH_PHASE);
- } else if (key.get(2).equals(Ranking.DIVERSITY)) {
- if ((key.size() > 4) && key.get(3).equals(Diversity.CUTOFF)) {
- throwIllegalParameter(key.rest().toString(), Diversity.CUTOFF);
- } else {
- throwIllegalParameter(key.rest().toString(), Ranking.DIVERSITY);
- }
- }
- }
- else if (key.size() == 3 && key.get(1).equals(Ranking.SOFTTIMEOUT)) {
- throwIllegalParameter(key.rest().toString(), Ranking.SOFTTIMEOUT);
- }
- else if (key.size() == 3 && key.get(1).equals(Ranking.MATCHING)) {
+ if (key.size() == 3 && key.get(1).equals(Ranking.MATCHING)) {
Matching matching = ranking.getMatching();
if (equalsWithLowerCaseAlias(key.last(), Matching.TERMWISELIMIT))
matching.setTermwiselimit(asDouble(value, 1.0));
@@ -201,45 +187,23 @@ public class QueryProperties extends Properties {
else if (key.size() > 2) {
String restKey = key.rest().rest().toString();
chained().requireSettable(key, value, context);
- if (key.get(1).equals(Ranking.FEATURES))
+ if (key.get(1).equals(Ranking.FEATURES)) {
setRankFeature(query, restKey, toSpecifiedType(restKey, value,
profileRegistry.getTypeRegistry().getComponent("features"),
context));
- else if (key.get(1).equals(Ranking.PROPERTIES))
+ } else if (key.get(1).equals(Ranking.PROPERTIES)) {
ranking.getProperties().put(restKey, toSpecifiedType(restKey, value,
profileRegistry.getTypeRegistry().getComponent("properties"),
context));
- else
+ } else {
throwIllegalParameter(key.rest().toString(), Ranking.RANKING);
- }
- }
- else if (key.first().equals(Presentation.PRESENTATION)) {
- if (key.size() == 2) {
- throwIllegalParameter(key.last(), Presentation.PRESENTATION);
- }
- else if (key.size() == 3 && key.get(1).equals(Presentation.FORMAT)) {
- throwIllegalParameter(key.last(), Presentation.FORMAT);
- }
- else
- throwIllegalParameter(key.last(), Presentation.PRESENTATION);
- }
- else if ((key.size() == 4) &&
- key.get(0).equals(Trace.TRACE) &&
- key.get(1).equals(Trace.PROFILING) &&
- key.get(3).equals(ProfilingParams.DEPTH)) {
- var params = getProfilingParams(query.getTrace().getProfiling(), key.get(2));
- if (params != null) {
- params.setDepth(asInteger(value, 0));
- }
- }
- else if (key.first().equals(Select.SELECT)) {
- if (key.size() == 2) {
- throwIllegalParameter(key.rest().toString(), Select.SELECT);
+ }
} else {
- throwIllegalParameter(key.last(), Select.SELECT);
+ throwIllegalParameter(key.rest().toString(), Ranking.RANKING);
}
- }
- else {
+ } else if (reservedPrefix.contains(key.first())) {
+ throwIllegalParameter(key.rest().toString(), key.first());
+ } else {
super.set(key, value, context);
}
}
@@ -258,18 +222,8 @@ public class QueryProperties extends Properties {
}
}
- private static ProfilingParams getProfilingParams(Profiling prof, String name) {
- return switch (name) {
- case Profiling.MATCHING -> prof.getMatching();
- case Profiling.FIRST_PHASE_RANKING -> prof.getFirstPhaseRanking();
- case Profiling.SECOND_PHASE_RANKING -> prof.getSecondPhaseRanking();
- default -> null;
- };
- }
-
@Override
- public Map<String, Object> listProperties(CompoundName prefix,
- Map<String,String> context,
+ public Map<String, Object> listProperties(CompoundName prefix, Map<String, String> context,
com.yahoo.processing.request.Properties substitution) {
Map<String, Object> properties = super.listProperties(prefix, context, substitution);
for (CompoundName queryProperty : Query.nativeProperties) {
@@ -308,7 +262,7 @@ public class QueryProperties extends Properties {
return field.getType().convertFrom(value, new ConversionContext(key, profileRegistry, embedders, context));
}
- private void throwIllegalParameter(String key,String namespace) {
+ private void throwIllegalParameter(String key, String namespace) {
throw new IllegalInputException("'" + key + "' is not a valid property in '" + namespace +
"'. See the query api for valid keys starting by '" + namespace + "'.");
}