aboutsummaryrefslogtreecommitdiffstats
path: root/container-search/src/main/java/com
diff options
context:
space:
mode:
authorArne H Juul <arnej@yahooinc.com>2021-10-06 14:35:43 +0000
committerArne H Juul <arnej@yahooinc.com>2021-10-06 14:35:43 +0000
commitd69bed9cff9e95c6c4422a32ad9708310337715b (patch)
tree22c72fc77bc7183d0c65e7290b0bb0c0329ac748 /container-search/src/main/java/com
parent87c26111db1a8071ad58a0d78fc455a3e765a3fa (diff)
wire error received in protobuf message
Diffstat (limited to 'container-search/src/main/java/com')
-rw-r--r--container-search/src/main/java/com/yahoo/search/dispatch/rpc/ProtobufSerialization.java9
-rw-r--r--container-search/src/main/java/com/yahoo/search/dispatch/rpc/RpcProtobufFillInvoker.java7
-rw-r--r--container-search/src/main/java/com/yahoo/search/result/ErrorMessage.java14
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; }