From 794c30f2ac2aae6a45012c45f948267ca10dc9f6 Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Tue, 19 Mar 2024 13:59:39 +0100 Subject: Move error handling to common component used by both streaming and indexed --- .../java/com/yahoo/prelude/fastsearch/VespaBackend.java | 16 +++++++++++++++- .../search/dispatch/rpc/RpcProtobufFillInvoker.java | 9 --------- .../yahoo/vespa/streamingvisitors/StreamingBackend.java | 1 + 3 files changed, 16 insertions(+), 10 deletions(-) (limited to 'container-search/src/main') diff --git a/container-search/src/main/java/com/yahoo/prelude/fastsearch/VespaBackend.java b/container-search/src/main/java/com/yahoo/prelude/fastsearch/VespaBackend.java index 761cb22be57..a463fb9d0e6 100644 --- a/container-search/src/main/java/com/yahoo/prelude/fastsearch/VespaBackend.java +++ b/container-search/src/main/java/com/yahoo/prelude/fastsearch/VespaBackend.java @@ -9,6 +9,7 @@ import com.yahoo.prelude.query.Item; import com.yahoo.prelude.query.NullItem; import com.yahoo.prelude.query.textualrepresentation.TextualQueryRepresentation; import com.yahoo.prelude.querytransform.QueryRewrite; +import com.yahoo.processing.IllegalInputException; import com.yahoo.protect.Validator; import com.yahoo.search.Query; import com.yahoo.search.Result; @@ -212,13 +213,26 @@ public abstract class VespaBackend { List parts = partitionHits(result, summaryClass); if (!parts.isEmpty()) { // anything to fill at all? for (Result r : parts) { - doPartialFill(r, summaryClass); + doPartialFill(r, ensureLegalSummaryClass(r.getQuery(), summaryClass)); mergeErrorsInto(result, r); } result.hits().setSorted(false); result.analyzeHits(); } } + protected String ensureLegalSummaryClass(Query query, String summaryClass) { + if (summaryClass != null) { + if (summaryClass.isEmpty()) { + return null; + } else { + var db = getDocumentDatabase(query); + if (db != null && ! db.getDocsumDefinitionSet().hasDocsum(summaryClass)) { + throw new IllegalInputException("invalid presentation.summary=" + summaryClass); + } + } + } + return summaryClass; + } private void mergeErrorsInto(Result destination, Result source) { destination.hits().addErrorsFrom(source.hits()); diff --git a/container-search/src/main/java/com/yahoo/search/dispatch/rpc/RpcProtobufFillInvoker.java b/container-search/src/main/java/com/yahoo/search/dispatch/rpc/RpcProtobufFillInvoker.java index 7220bc61fe5..fe6dc9abe19 100644 --- a/container-search/src/main/java/com/yahoo/search/dispatch/rpc/RpcProtobufFillInvoker.java +++ b/container-search/src/main/java/com/yahoo/search/dispatch/rpc/RpcProtobufFillInvoker.java @@ -12,7 +12,6 @@ import com.yahoo.data.access.slime.SlimeAdapter; import com.yahoo.prelude.fastsearch.DocumentDatabase; import com.yahoo.prelude.fastsearch.FastHit; import com.yahoo.prelude.fastsearch.TimeoutException; -import com.yahoo.processing.IllegalInputException; import com.yahoo.search.Query; import com.yahoo.search.Result; import com.yahoo.search.dispatch.FillInvoker; @@ -23,7 +22,6 @@ import com.yahoo.slime.ArrayTraverser; import com.yahoo.slime.BinaryFormat; import com.yahoo.slime.BinaryView; -import java.util.Iterator; import java.util.List; import java.util.concurrent.BlockingQueue; import java.util.concurrent.LinkedBlockingQueue; @@ -72,13 +70,6 @@ public class RpcProtobufFillInvoker extends FillInvoker { @Override protected void sendFillRequest(Result result, String summaryClass) { - if (summaryClass != null) { - if (summaryClass.equals("")) { - summaryClass = null; - } else if (! documentDb.getDocsumDefinitionSet().hasDocsum(summaryClass)) { - throw new IllegalInputException("invalid presentation.summary=" + summaryClass); - } - } ListMap hitsByNode = hitsByNode(result); result.getQuery().trace(false, 5, "Sending ", hitsByNode.size(), " summary fetch requests with jrt/protobuf"); diff --git a/container-search/src/main/java/com/yahoo/vespa/streamingvisitors/StreamingBackend.java b/container-search/src/main/java/com/yahoo/vespa/streamingvisitors/StreamingBackend.java index 6b81ab0fa97..6ebd1bb2c37 100644 --- a/container-search/src/main/java/com/yahoo/vespa/streamingvisitors/StreamingBackend.java +++ b/container-search/src/main/java/com/yahoo/vespa/streamingvisitors/StreamingBackend.java @@ -131,6 +131,7 @@ public class StreamingBackend extends VespaBackend { return new Result(query, ErrorMessage.createIllegalQuery("Streaming search requires either " + "streaming.groupname or streaming.selection")); } + ensureLegalSummaryClass(query, query.getPresentation().getSummary()); if (query.getTrace().isTraceable(4)) query.trace("Routing to search cluster " + getSearchClusterName() + " and document type " + schema, 4); -- cgit v1.2.3