diff options
Diffstat (limited to 'documentapi')
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()); } |