diff options
author | Bjørn Christian Seime <bjorncs@yahooinc.com> | 2023-03-02 14:24:07 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-02 14:24:07 +0100 |
commit | e51a699e8dd09720590c64a4414b703a40f990f2 (patch) | |
tree | 26b29e5f1849aaa8aaca4763c44d0dc7a5eef613 | |
parent | 3a55a18eeac23e95a456e09084c96a5fa3a374a2 (diff) | |
parent | f06173d2ad91349e3d4831127641f4f0306c19b9 (diff) |
Merge pull request #26271 from vespa-engine/bjorncs/legacy-feed-api
Correctly classify transient/retriable errors server side for legacy feed API
3 files changed, 25 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..90c6ffd042d 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. * @@ -14,6 +19,15 @@ enum ErrorCode { TRANSIENT_ERROR(false, true), END_OF_FEED(true, true); + private static final Collection<Integer> MBUS_FATALS_HANDLED_AS_TRANSIENT = 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); + private final boolean success; private final boolean _transient; @@ -30,4 +44,9 @@ enum ErrorCode { return _transient; } + static ErrorCode fromBusError(Error mbusError) { + return mbusError.isFatal() && !MBUS_FATALS_HANDLED_AS_TRANSIENT.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) |