summaryrefslogtreecommitdiffstats
path: root/documentapi
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-04-19 22:24:39 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2022-04-19 22:24:39 +0200
commit73f00e0684b26c9deadf85aa7d6ca57b243f230d (patch)
tree5d5f0dedbde8c0d42bd7e37a6506699dbffaf619 /documentapi
parentddd16fd9efba8428e0d62430550e8741dcf696b8 (diff)
Use com.yahoo.messagebus.Error instead of java.lang.Error
Diffstat (limited to 'documentapi')
-rw-r--r--documentapi/abi-spec.json6
-rw-r--r--documentapi/src/main/java/com/yahoo/documentapi/Result.java45
-rw-r--r--documentapi/src/main/java/com/yahoo/documentapi/local/LocalAsyncSession.java6
-rw-r--r--documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusAsyncSession.java6
-rwxr-xr-xdocumentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusSyncSession.java2
-rw-r--r--documentapi/src/test/java/com/yahoo/documentapi/local/LocalDocumentApiTestCase.java2
6 files changed, 54 insertions, 13 deletions
diff --git a/documentapi/abi-spec.json b/documentapi/abi-spec.json
index 20043450501..49bdf32bfb1 100644
--- a/documentapi/abi-spec.json
+++ b/documentapi/abi-spec.json
@@ -484,12 +484,16 @@
"public"
],
"methods": [
+ "public void <init>()",
"public void <init>(long)",
"public void <init>(com.yahoo.documentapi.Result$ResultType, java.lang.Error)",
+ "public void <init>(com.yahoo.documentapi.Result$ResultType, com.yahoo.messagebus.Error)",
"public boolean isSuccess()",
"public java.lang.Error getError()",
+ "public com.yahoo.messagebus.Error error()",
"public long getRequestId()",
- "public com.yahoo.documentapi.Result$ResultType type()"
+ "public com.yahoo.documentapi.Result$ResultType type()",
+ "public static com.yahoo.messagebus.Error toError(com.yahoo.documentapi.Result$ResultType)"
],
"fields": []
},
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/Result.java b/documentapi/src/main/java/com/yahoo/documentapi/Result.java
index 9509a485654..5f16b237833 100644
--- a/documentapi/src/main/java/com/yahoo/documentapi/Result.java
+++ b/documentapi/src/main/java/com/yahoo/documentapi/Result.java
@@ -1,6 +1,9 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
package com.yahoo.documentapi;
+import com.yahoo.messagebus.Error;
+import com.yahoo.messagebus.ErrorCode;
+
/**
* The <i>synchronous</i> result of submitting an asynchronous operation.
* A result is either a success or not. If it is not a success, it will contain an explanation of why.
@@ -11,25 +14,43 @@ package com.yahoo.documentapi;
public class Result {
/** Null if this is a success, set to the error occurring if this is a failure */
- private Error error = null;
+ private final Error error;
/** The id of this operation */
- private long requestId;
+ private final long requestId;
+
+ private final ResultType type;
- private ResultType type = ResultType.SUCCESS;
+ /** Creates a successful result with requestId zero */
+ public Result() {
+ this(0);
+ }
/**
* Creates a successful result
*
* @param requestId the ID of the request
*/
public Result(long requestId) {
+ this.error = null;
this.requestId = requestId;
+ type = ResultType.SUCCESS;
}
/**
* Creates a unsuccessful result
*
+ * @deprecated Will be removed on Vespa 8 due to incorrect java.lang.Error
+ */
+ @Deprecated(forRemoval = true, since="7")
+ public Result(ResultType type, java.lang.Error error) {
+ this.type = type;
+ this.error = new Error(0, error.getMessage());
+ this.requestId = 0;
+ }
+ /**
+ * Creates a unsuccessful result
+ *
* @param type the type of failure
* @param error the error to encapsulate in this Result
* @see com.yahoo.documentapi.Result.ResultType
@@ -37,6 +58,7 @@ public class Result {
public Result(ResultType type, Error error) {
this.type = type;
this.error = error;
+ this.requestId = 0;
}
/**
@@ -54,8 +76,12 @@ public class Result {
* If this was a success, this method returns null.
*
* @return the Error, or null
+ * @deprecated Will be removed on Vespa 8
*/
- public Error getError() { return error; }
+ @Deprecated(forRemoval = true, since="7")
+ public java.lang.Error getError() { return new java.lang.Error(error.getMessage()); }
+
+ public Error error() { return error; }
/**
* Returns the id of this operation. The asynchronous response to this operation
@@ -85,5 +111,16 @@ public class Result {
@Deprecated(since = "7", forRemoval = true) // TODO: Remove on Vespa 8 — this is a Response outcome, not a Result outcome.
CONDITION_NOT_MET_ERROR
}
+ public static Error toError(ResultType result) {
+ switch (result) {
+ case TRANSIENT_ERROR:
+ return new Error(ErrorCode.TRANSIENT_ERROR, ResultType.TRANSIENT_ERROR.name());
+ case CONDITION_NOT_MET_ERROR:
+ return new Error(ErrorCode.TRANSIENT_ERROR, ResultType.CONDITION_NOT_MET_ERROR.name());
+ case FATAL_ERROR:
+ return new Error(ErrorCode.FATAL_ERROR, ResultType.FATAL_ERROR.name());
+ }
+ return new Error(ErrorCode.NONE, "SUCCESS");
+ }
}
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/local/LocalAsyncSession.java b/documentapi/src/main/java/com/yahoo/documentapi/local/LocalAsyncSession.java
index 102fa73f2ec..591b4c80436 100644
--- a/documentapi/src/main/java/com/yahoo/documentapi/local/LocalAsyncSession.java
+++ b/documentapi/src/main/java/com/yahoo/documentapi/local/LocalAsyncSession.java
@@ -45,8 +45,8 @@ public class LocalAsyncSession implements AsyncSession {
private final Executor executor = Executors.newCachedThreadPool();
private final AtomicReference<Phaser> phaser;
- private AtomicLong requestId = new AtomicLong(0);
- private AtomicReference<Result.ResultType> result = new AtomicReference<>(SUCCESS);
+ private final AtomicLong requestId = new AtomicLong(0);
+ private final AtomicReference<Result.ResultType> result = new AtomicReference<>(SUCCESS);
public LocalAsyncSession(AsyncParameters params, LocalDocumentAccess access) {
this.handler = params.getResponseHandler();
@@ -163,7 +163,7 @@ public class LocalAsyncSession implements AsyncSession {
private Result send(Function<Long, Response> responses, DocumentOperationParameters parameters) {
Result.ResultType resultType = result.get();
if (resultType != SUCCESS)
- return new Result(resultType, new Error());
+ return new Result(resultType, Result.toError(resultType));
ResponseHandler responseHandler = parameters.responseHandler().orElse(this::addResponse);
long req = requestId.incrementAndGet();
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusAsyncSession.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusAsyncSession.java
index 279e04c43b4..8809e05caf3 100644
--- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusAsyncSession.java
+++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusAsyncSession.java
@@ -26,6 +26,7 @@ import com.yahoo.documentapi.messagebus.protocol.RemoveDocumentMessage;
import com.yahoo.documentapi.messagebus.protocol.RemoveDocumentReply;
import com.yahoo.documentapi.messagebus.protocol.UpdateDocumentMessage;
import com.yahoo.documentapi.messagebus.protocol.UpdateDocumentReply;
+import com.yahoo.messagebus.Error;
import com.yahoo.messagebus.ErrorCode;
import com.yahoo.messagebus.Message;
import com.yahoo.messagebus.MessageBus;
@@ -187,7 +188,7 @@ public class MessageBusAsyncSession implements MessageBusSession, AsyncSession {
return toResult(reqId, session.send(msg));
}
} catch (Exception e) {
- return new Result(Result.ResultType.FATAL_ERROR, new Error(e.getMessage(), e));
+ return new Result(Result.ResultType.FATAL_ERROR, new Error(ErrorCode.FATAL_ERROR, e.toString()));
}
}
@@ -285,8 +286,7 @@ public class MessageBusAsyncSession implements MessageBusSession, AsyncSession {
return new Result(reqId);
}
return new Result(
- messageBusErrorToResultType(mbusResult.getError().getCode()),
- new Error(mbusResult.getError().getMessage() + " (" + mbusResult.getError().getCode() + ")"));
+ messageBusErrorToResultType(mbusResult.getError().getCode()), mbusResult.getError());
}
private static Response.Outcome toOutcome(Reply reply) {
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusSyncSession.java b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusSyncSession.java
index 318b518f44e..1b0a6db3d53 100755
--- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusSyncSession.java
+++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusSyncSession.java
@@ -112,7 +112,7 @@ public class MessageBusSyncSession implements MessageBusSession, SyncSession, Re
Thread.sleep(100);
}
if (!result.isSuccess()) {
- throw new DocumentAccessException(result.getError().toString());
+ throw new DocumentAccessException(result.error().toString());
}
return monitor.waitForReply();
} catch (InterruptedException e) {
diff --git a/documentapi/src/test/java/com/yahoo/documentapi/local/LocalDocumentApiTestCase.java b/documentapi/src/test/java/com/yahoo/documentapi/local/LocalDocumentApiTestCase.java
index 3a748ca173a..69fa32986f2 100644
--- a/documentapi/src/test/java/com/yahoo/documentapi/local/LocalDocumentApiTestCase.java
+++ b/documentapi/src/test/java/com/yahoo/documentapi/local/LocalDocumentApiTestCase.java
@@ -111,7 +111,7 @@ public class LocalDocumentApiTestCase extends AbstractDocumentApiTestCase {
for (DocumentId id : ids) {
Result result = session.get(id);
if ( ! result.isSuccess())
- throw new IllegalStateException("Failed requesting document " + id, result.getError().getCause());
+ throw new IllegalStateException("Failed requesting document " + id + ": " + result.error().toString());
outstandingRequests.add(result.getRequestId());
}