diff options
author | Arne H Juul <arnej27959@users.noreply.github.com> | 2021-10-07 15:26:22 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-07 15:26:22 +0200 |
commit | 6cd3e5387169803041c5628178181ee15e7b929c (patch) | |
tree | 47de9d0c2c8994c8b33fbe0b9449d0ee131e0ee9 /container-search | |
parent | f4622f17a9c31efc94c12e06b2d57aeea31713fd (diff) | |
parent | 0c7946afd000a597c9902487fad9811da5d958dc (diff) |
Merge pull request #19439 from vespa-engine/arnej/wire-errors-from-backend
Arnej/wire errors from backend
Diffstat (limited to 'container-search')
4 files changed, 30 insertions, 2 deletions
diff --git a/container-search/abi-spec.json b/container-search/abi-spec.json index 4913161d955..5d30efc160a 100644 --- a/container-search/abi-spec.json +++ b/container-search/abi-spec.json @@ -7412,6 +7412,8 @@ "public static com.yahoo.search.result.ErrorMessage createNotFound(java.lang.String)", "public static com.yahoo.search.result.ErrorMessage createBadRequest(java.lang.String)", "public static com.yahoo.search.result.ErrorMessage createInternalServerError(java.lang.String)", + "public static com.yahoo.search.result.ErrorMessage createSearchReplyError(java.lang.String)", + "public static com.yahoo.search.result.ErrorMessage createDocsumReplyError(java.lang.String)", "public void setSource(java.lang.String)", "public java.lang.String getSource()", "public int hashCode()", 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 05ba1bbbc0d..fe74180cad3 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 d8852e6c9d2..b7f7150f209 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(RESULT_HAS_ERRORS.code, "Error in search reply.", detailedMessage); + } + + /** Wraps an error message received in a DocsumReply packet */ + public static ErrorMessage createDocsumReplyError(String detailedMessage) { + return new ErrorMessage(RESULT_HAS_ERRORS.code, "Error in fill reply.", detailedMessage); + } + /** Sets the source producing this error */ public void setSource(String source) { this.source = source; } |