diff options
author | Jon Marius Venstad <venstad@gmail.com> | 2020-10-05 09:34:46 +0200 |
---|---|---|
committer | Jon Marius Venstad <venstad@gmail.com> | 2020-10-05 09:34:46 +0200 |
commit | faebee7176ae2367d4a83c256a3375b37d798325 (patch) | |
tree | 446d0035995ae50fbceae76c35cc1f74e298a00f /documentapi | |
parent | 04a612ee4b9d9fc6b206f160c305b337f62df911 (diff) |
Separate error code for insufficient storage
Diffstat (limited to 'documentapi')
-rw-r--r-- | documentapi/src/main/java/com/yahoo/documentapi/Response.java | 3 | ||||
-rw-r--r-- | documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusAsyncSession.java | 17 |
2 files changed, 16 insertions, 4 deletions
diff --git a/documentapi/src/main/java/com/yahoo/documentapi/Response.java b/documentapi/src/main/java/com/yahoo/documentapi/Response.java index 0a541a92c6a..cea9f247ade 100644 --- a/documentapi/src/main/java/com/yahoo/documentapi/Response.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/Response.java @@ -124,6 +124,9 @@ public class Response { /** The operation failed because its target document was not found. */ NOT_FOUND, + /** The operation failed because the cluster had insufficient storage to accept it. */ + INSUFFICIENT_STORAGE, + /** The operation failed for some unknown reason. */ 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 0a4ab66aea4..4d136dd743e 100644 --- a/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusAsyncSession.java +++ b/documentapi/src/main/java/com/yahoo/documentapi/messagebus/MessageBusAsyncSession.java @@ -45,6 +45,7 @@ import java.util.logging.Logger; import static com.yahoo.documentapi.DocumentOperationParameters.parameters; import static com.yahoo.documentapi.Response.Outcome.CONDITION_FAILED; import static com.yahoo.documentapi.Response.Outcome.ERROR; +import static com.yahoo.documentapi.Response.Outcome.INSUFFICIENT_STORAGE; import static com.yahoo.documentapi.Response.Outcome.NOT_FOUND; import static com.yahoo.documentapi.Response.Outcome.SUCCESS; @@ -294,13 +295,21 @@ public class MessageBusAsyncSession implements MessageBusSession, AsyncSession { new Error(mbusResult.getError().getMessage() + " (" + mbusResult.getError().getCode() + ")")); } + private static Response.Outcome toOutcome(Reply reply) { + if ( reply instanceof UpdateDocumentReply && ! ((UpdateDocumentReply) reply).wasFound() + || reply instanceof RemoveDocumentReply && ! ((RemoveDocumentReply) reply).wasFound()) + return NOT_FOUND; + if (reply.getErrorCodes().contains(DocumentProtocol.ERROR_NO_SPACE)) + return INSUFFICIENT_STORAGE; + if (reply.getErrorCodes().contains(DocumentProtocol.ERROR_TEST_AND_SET_CONDITION_FAILED)) + return CONDITION_FAILED; + return ERROR; + } + private static Response toError(Reply reply, long reqId) { - boolean definitelyNotFound = reply instanceof UpdateDocumentReply && ! ((UpdateDocumentReply) reply).wasFound() - || reply instanceof RemoveDocumentReply && ! ((RemoveDocumentReply) reply).wasFound(); - boolean conditionFailed = reply.getErrorCodes().contains(DocumentProtocol.ERROR_TEST_AND_SET_CONDITION_FAILED); - Response.Outcome outcome = definitelyNotFound ? NOT_FOUND : conditionFailed ? CONDITION_FAILED : ERROR; Message msg = reply.getMessage(); String err = getErrorMessage(reply); + Response.Outcome outcome = toOutcome(reply); switch (msg.getType()) { case DocumentProtocol.MESSAGE_PUTDOCUMENT: return new DocumentResponse(reqId, ((PutDocumentMessage)msg).getDocumentPut().getDocument(), err, outcome, reply.getTrace()); |