aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@yahooinc.com>2023-03-02 14:24:07 +0100
committerGitHub <noreply@github.com>2023-03-02 14:24:07 +0100
commite51a699e8dd09720590c64a4414b703a40f990f2 (patch)
tree26b29e5f1849aaa8aaca4763c44d0dc7a5eef613
parent3a55a18eeac23e95a456e09084c96a5fa3a374a2 (diff)
parentf06173d2ad91349e3d4831127641f4f0306c19b9 (diff)
Merge pull request #26271 from vespa-engine/bjorncs/legacy-feed-api
Correctly classify transient/retriable errors server side for legacy feed API
-rw-r--r--vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/ClientFeederV3.java14
-rw-r--r--vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/ErrorCode.java19
-rw-r--r--vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/FeedReplyReader.java2
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)