aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@yahooinc.com>2023-03-02 12:53:54 +0100
committerBjørn Christian Seime <bjorncs@yahooinc.com>2023-03-02 12:57:24 +0100
commit69189de8d243192ae82f99fa636eb7969602cea5 (patch)
treee5211a771abb30390ddb65275a5a84bfcba8d7e5
parentc8c4363b6d6a7ee2f89809acc96f5ab4b387db74 (diff)
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.java17
-rw-r--r--vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/FeedReplyReader.java2
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)