diff options
Diffstat (limited to 'container-search/src/main/java/com')
3 files changed, 28 insertions, 2 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/dispatch/rpc/ProtobufSerialization.java b/container-search/src/main/java/com/yahoo/search/dispatch/rpc/ProtobufSerialization.java index 250524fadf2..4379da5f98b 100644 --- a/container-search/src/main/java/com/yahoo/search/dispatch/rpc/ProtobufSerialization.java +++ b/container-search/src/main/java/com/yahoo/search/dispatch/rpc/ProtobufSerialization.java @@ -25,6 +25,7 @@ import com.yahoo.search.query.Ranking; import com.yahoo.search.query.Sorting; import com.yahoo.search.query.Sorting.Order; import com.yahoo.search.result.Coverage; +import com.yahoo.search.result.ErrorMessage; import com.yahoo.searchlib.aggregation.Grouping; import com.yahoo.slime.BinaryFormat; import com.yahoo.vespa.objects.BufferSerializer; @@ -42,6 +43,12 @@ public class ProtobufSerialization { return convertFromQuery(query, hits, serverId).toByteArray(); } + private static void convertSearchReplyErrors(Result target, List<SearchProtocol.Error> errors) { + for (var error : errors) { + target.hits().addError(ErrorMessage.createSearchReplyError(error.getMessage())); + } + } + private static SearchProtocol.SearchRequest convertFromQuery(Query query, int hits, String serverId) { var builder = SearchProtocol.SearchRequest.newBuilder().setHits(hits).setOffset(query.getOffset()) .setTimeout((int) query.getTimeLeft()); @@ -196,6 +203,8 @@ public class ProtobufSerialization { result.getResult().setTotalHitCount(protobuf.getTotalHitCount()); result.getResult().setCoverage(convertToCoverage(protobuf)); + convertSearchReplyErrors(result.getResult(), protobuf.getErrorsList()); + var haveGrouping = ! protobuf.getGroupingBlob().isEmpty(); if (haveGrouping) { BufferSerializer buf = new BufferSerializer(new GrowableByteBuffer(protobuf.getGroupingBlob().asReadOnlyByteBuffer())); 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 8a17be8102e..178e59a0468 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 @@ -185,6 +185,12 @@ public class RpcProtobufFillInvoker extends FillInvoker { }); } + private void convertErrorsFromDocsumReply(Result target, List<SearchProtocol.Error> errors) { + for (var error : errors) { + target.hits().addError(ErrorMessage.createDocsumReplyError(error.getMessage())); + } + } + private int fill(Result result, List<FastHit> hits, String summaryClass, byte[] payload) { try { var protobuf = SearchProtocol.DocsumReply.parseFrom(payload); @@ -194,6 +200,7 @@ public class RpcProtobufFillInvoker extends FillInvoker { if (hasErrors) { addErrors(result, errors); } + convertErrorsFromDocsumReply(result, protobuf.getErrorsList()); Inspector summaries = new SlimeAdapter(root.field("docsums")); if (!summaries.valid()) { diff --git a/container-search/src/main/java/com/yahoo/search/result/ErrorMessage.java b/container-search/src/main/java/com/yahoo/search/result/ErrorMessage.java index a58db5a542e..5e6b2f9a81f 100644 --- a/container-search/src/main/java/com/yahoo/search/result/ErrorMessage.java +++ b/container-search/src/main/java/com/yahoo/search/result/ErrorMessage.java @@ -20,7 +20,7 @@ public class ErrorMessage extends com.yahoo.processing.request.ErrorMessage { private String source = null; public ErrorMessage(int code, String message) { - super(code,message); + super(code, message); } /** @@ -29,7 +29,7 @@ public class ErrorMessage extends com.yahoo.processing.request.ErrorMessage { * can be generated using com.yahoo.protect.Exceptions.toMessageString(exception). */ public ErrorMessage(int code, String message, String detailedMessage) { - super(code,message, detailedMessage); + super(code, message, detailedMessage); } /** @@ -163,6 +163,16 @@ public class ErrorMessage extends com.yahoo.processing.request.ErrorMessage { return new ErrorMessage(INTERNAL_SERVER_ERROR.code, "Internal server error.", detailedMessage); } + /** Wraps an error message received in a SearchReply packet */ + public static ErrorMessage createSearchReplyError(String detailedMessage) { + return new ErrorMessage(ERROR_IN_SEARCH_REPLY.code, "Error in search reply.", detailedMessage); + } + + /** Wraps an error message received in a DocsumReply packet */ + public static ErrorMessage createDocsumReplyError(String detailedMessage) { + return new ErrorMessage(ERROR_IN_DOCSUM_REPLY.code, "Error in getDocsum reply.", detailedMessage); + } + /** Sets the source producing this error */ public void setSource(String source) { this.source = source; } |