diff options
author | Bjørn Christian Seime <bjorncs@yahooinc.com> | 2023-03-02 12:53:54 +0100 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@yahooinc.com> | 2023-03-02 12:57:24 +0100 |
commit | 69189de8d243192ae82f99fa636eb7969602cea5 (patch) | |
tree | e5211a771abb30390ddb65275a5a84bfcba8d7e5 | |
parent | c8c4363b6d6a7ee2f89809acc96f5ab4b387db74 (diff) |
Correctly classify transient/retriable errors server side for legacy feed API
3 files changed, 23 insertions, 10 deletions
diff --git a/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/ClientFeederV3.java b/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/ClientFeederV3.java index 438248f31a7..b44fe82a303 100644 --- a/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/ClientFeederV3.java +++ b/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/ClientFeederV3.java @@ -188,16 +188,12 @@ class ClientFeederV3 { outstandingOperations.incrementAndGet(); updateOpsPerSec(); log(Level.FINE, "Sent message successfully, document id: ", message.get().getOperationId()); - } else if (!result.getError().isFatal()) { - repliesFromOldMessages.add(createOperationStatus(message.get().getOperationId(), - result.getError().getMessage(), - ErrorCode.TRANSIENT_ERROR, - message.get().getMessage())); } else { - repliesFromOldMessages.add(createOperationStatus(message.get().getOperationId(), - result.getError().getMessage(), - ErrorCode.ERROR, - message.get().getMessage())); + var err = result.getError(); + var msg = message.get(); + repliesFromOldMessages.add( + createOperationStatus( + msg.getOperationId(), err.getMessage(), ErrorCode.fromBusError(err), msg.getMessage())); } } } diff --git a/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/ErrorCode.java b/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/ErrorCode.java index f819ecccbb1..ed506c77631 100644 --- a/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/ErrorCode.java +++ b/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/ErrorCode.java @@ -1,6 +1,11 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.vespa.http.server; +import com.yahoo.messagebus.Error; + +import java.util.Collection; +import java.util.Set; + /** * Return types for the server. * @@ -30,4 +35,16 @@ enum ErrorCode { return _transient; } + static ErrorCode fromBusError(Error mbusError) { + Collection<Integer> fatalsHandledAsTransient = Set.of( + com.yahoo.messagebus.ErrorCode.SEND_QUEUE_CLOSED, + com.yahoo.messagebus.ErrorCode.ILLEGAL_ROUTE, + com.yahoo.messagebus.ErrorCode.NO_SERVICES_FOR_ROUTE, + com.yahoo.messagebus.ErrorCode.NETWORK_ERROR, + com.yahoo.messagebus.ErrorCode.SEQUENCE_ERROR, + com.yahoo.messagebus.ErrorCode.NETWORK_SHUTDOWN, + com.yahoo.messagebus.ErrorCode.TIMEOUT); + return mbusError.isFatal() && !fatalsHandledAsTransient.contains(mbusError.getCode()) ? ERROR : TRANSIENT_ERROR; + } + } diff --git a/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/FeedReplyReader.java b/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/FeedReplyReader.java index 377e91f6490..b504de64c63 100644 --- a/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/FeedReplyReader.java +++ b/vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/FeedReplyReader.java @@ -50,7 +50,7 @@ public class FeedReplyReader implements ReplyHandler { DocumentOperationStatus status = DocumentOperationStatus.fromMessageBusErrorCodes(reply.getErrorCodes()); metricsHelper.reportFailure(type, status); metric.add(MetricNames.FAILED, 1, null); - enqueue(context, reply.getError(0).getMessage(), ErrorCode.ERROR, false, reply.getTrace()); + enqueue(context, reply.getError(0).getMessage(), ErrorCode.fromBusError(reply.getError(0)), false, reply.getTrace()); } else { metricsHelper.reportSuccessful(type, latencyInSeconds); if ( ! conditionMet) |