diff options
author | Haakon Dybdahl <dybdahl@yahoo-inc.com> | 2017-03-06 09:22:16 +0100 |
---|---|---|
committer | Haakon Dybdahl <dybdahl@yahoo-inc.com> | 2017-03-06 09:22:16 +0100 |
commit | 3fcafa4cc9a2f29c417cfbda9bed0c8390ba2ab7 (patch) | |
tree | 8a297abd0b7deb4f52098033535a12f11f290cd8 /documentapi | |
parent | 351903b75e5cf8feaa6606c139ee56e1caeccd23 (diff) |
Extend APIs with condition-not-met.
Diffstat (limited to 'documentapi')
4 files changed, 40 insertions, 11 deletions
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/DocumentAccessException.java b/documentapi/src/main/java/com/yahoo/documentapi/DocumentAccessException.java index 4c9c3b0e817..27f5a89a9b2 100644 --- a/documentapi/src/main/java/com/yahoo/documentapi/DocumentAccessException.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/DocumentAccessException.java @@ -1,6 +1,8 @@ // Copyright 2016 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. package com.yahoo.documentapi; +import com.yahoo.documentapi.messagebus.protocol.DocumentProtocol; + import java.util.Set; import java.util.HashSet; @@ -30,6 +32,10 @@ public class DocumentAccessException extends RuntimeException { this.errorCodes = errorCodes; } + public boolean hasConditionNotMetError(){ + return errorCodes.contains(DocumentProtocol.ERROR_TEST_AND_SET_CONDITION_FAILED); + } + public DocumentAccessException(String message, Throwable cause) { super(message, cause); } diff --git a/documentapi/src/main/java/com/yahoo/documentapi/Result.java b/documentapi/src/main/java/com/yahoo/documentapi/Result.java index 9a24da9a676..4d94da71a55 100644 --- a/documentapi/src/main/java/com/yahoo/documentapi/Result.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/Result.java @@ -66,12 +66,26 @@ public class Result { public long getRequestId() { return requestId; } /** + * Deprecated: Use getResultType() instead. * Returns the type of result. * - * @return the type of result, typically if this is an error or a success, and what kind of error + * @return the type of result, typically if this is an error or a success, and what kind of error. + * Does not return CONDITION_NOT_MET_ERROR for backward compatibility. * @see com.yahoo.documentapi.Result.ResultType */ - public ResultType getType() { return type; } + @Deprecated + public ResultType getType() { return + type == ResultType.CONDITION_NOT_MET_ERROR + ? ResultType.FATAL_ERROR + : type;} + + /** + * Returns the type of result. + * + * @return the type of result, typically if this is an error or a success, and what kind of error. + * @see com.yahoo.documentapi.Result.ResultType + */ + public ResultType getResultType() { return type;} /** The types that a Result can have. */ public enum ResultType { @@ -80,6 +94,8 @@ public class Result { /** The request failed, but may be successful if retried at a later time. */ TRANSIENT_ERROR, /** The request failed, and retrying is pointless. */ - FATAL_ERROR + FATAL_ERROR, + /** Condition specified in operation not met error */ + CONDITION_NOT_MET_ERROR } } 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 5795ea771b5..d7af471cc20 100644 --- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusAsyncSession.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusAsyncSession.java @@ -4,7 +4,6 @@ package com.yahoo.documentapi.messagebus; import com.yahoo.document.Document; import com.yahoo.document.DocumentId; import com.yahoo.document.DocumentPut; -import com.yahoo.document.DocumentType; import com.yahoo.document.DocumentUpdate; import com.yahoo.documentapi.*; import com.yahoo.documentapi.Result; @@ -211,13 +210,21 @@ public class MessageBusAsyncSession implements MessageBusSession, AsyncSession { private static Result toResult(long reqId, com.yahoo.messagebus.Result mbusResult) { if (mbusResult.isAccepted()) { return new Result(reqId); - } else if (mbusResult.getError().getCode() == ErrorCode.SEND_QUEUE_FULL) { - return new Result(Result.ResultType.TRANSIENT_ERROR, - new Error(mbusResult.getError().getMessage() + " (" + mbusResult.getError().getCode() + ")")); - } else { - return new Result(Result.ResultType.FATAL_ERROR, - new Error(mbusResult.getError().getMessage() + " (" + mbusResult.getError().getCode() + ")")); } + final Error error = new Error(mbusResult.getError().getMessage() + " (" + mbusResult.getError().getCode() + ")"); + final Result.ResultType resultType; + switch (mbusResult.getError().getCode()) { + case ErrorCode.SEND_QUEUE_FULL: + resultType = Result.ResultType.TRANSIENT_ERROR; + break; + case DocumentProtocol.ERROR_TEST_AND_SET_CONDITION_FAILED: + resultType = Result.ResultType.CONDITION_NOT_MET_ERROR; + break; + default: + resultType = Result.ResultType.FATAL_ERROR; + break; + } + return new Result(resultType, error); } private static Response toResponse(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 095d0c14a49..19116d69f83 100755 --- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusSyncSession.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusSyncSession.java @@ -77,7 +77,7 @@ public class MessageBusSyncSession implements MessageBusSession, SyncSession, Re msg.setContext(monitor); msg.pushHandler(this); // store monitor Result result = null; - while (result == null || result.getType() == Result.ResultType.TRANSIENT_ERROR) { + while (result == null || result.getResultType() == Result.ResultType.TRANSIENT_ERROR) { result = session.send(msg); if (result != null && result.isSuccess()) { break; |