aboutsummaryrefslogtreecommitdiffstats
path: root/documentapi
diff options
context:
space:
mode:
authorHaakon Dybdahl <dybdahl@yahoo-inc.com>2017-03-06 09:22:16 +0100
committerHaakon Dybdahl <dybdahl@yahoo-inc.com>2017-03-06 09:22:16 +0100
commit3fcafa4cc9a2f29c417cfbda9bed0c8390ba2ab7 (patch)
tree8a297abd0b7deb4f52098033535a12f11f290cd8 /documentapi
parent351903b75e5cf8feaa6606c139ee56e1caeccd23 (diff)
Extend APIs with condition-not-met.
Diffstat (limited to 'documentapi')
-rw-r--r--documentapi/src/main/java/com/yahoo/documentapi/DocumentAccessException.java6
-rw-r--r--documentapi/src/main/java/com/yahoo/documentapi/Result.java22
-rw-r--r--documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusAsyncSession.java21
-rwxr-xr-xdocumentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusSyncSession.java2
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;