[ASTERIXDB-3397][API]Add retriable flag to returned errors
- user model changes: no
- storage format changes: no
- interface changes: no
Change-Id: I65b31440b2a0570ab3d0533fde620a71476aa0b0
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18280
Integration-Tests: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Reviewed-by: Murtadha Hubail <mhubail@apache.org>
Tested-by: Peeyush Gupta <peeyush.gupta@couchbase.com>
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ResultUtil.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ResultUtil.java
index cf535d9..3b1b2e8 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ResultUtil.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/ResultUtil.java
@@ -110,6 +110,10 @@
printFieldInternal(pw, name, String.valueOf(value), comma);
}
+ public static void printField(PrintWriter pw, String name, boolean value, boolean comma) {
+ printFieldInternal(pw, name, String.valueOf(value), comma);
+ }
+
protected static void printFieldInternal(PrintWriter pw, String name, String value, boolean comma) {
pw.print("\t\"");
pw.print(name);
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/ExecutionError.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/ExecutionError.java
index 6556b61..a25c5a2 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/ExecutionError.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/ExecutionError.java
@@ -52,4 +52,9 @@
public String getMessage() {
return message;
}
+
+ @Override
+ public boolean isRetriable() {
+ return false;
+ }
}
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/ExecutionWarning.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/ExecutionWarning.java
index 5552bb8..66b8f0e 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/ExecutionWarning.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/ExecutionWarning.java
@@ -44,4 +44,9 @@
public String getMessage() {
return message;
}
+
+ @Override
+ public boolean isRetriable() {
+ return false;
+ }
}
diff --git a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/fields/AbstractCodedMessagePrinter.java b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/fields/AbstractCodedMessagePrinter.java
index f1eb315..bbeb81c 100644
--- a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/fields/AbstractCodedMessagePrinter.java
+++ b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/result/fields/AbstractCodedMessagePrinter.java
@@ -33,7 +33,8 @@
private enum CodedMessageField {
CODE("code"),
- MSG("msg");
+ MSG("msg"),
+ RETRIABLE("retriable");
private final String str;
@@ -62,7 +63,9 @@
pw.print("{ \n\t");
ResultUtil.printField(pw, CodedMessageField.CODE.str(), codedMessage.getCode());
pw.print("\t");
- ResultUtil.printField(pw, CodedMessageField.MSG.str(), JSONUtil.escape(codedMessage.getMessage()), false);
+ ResultUtil.printField(pw, CodedMessageField.MSG.str(), JSONUtil.escape(codedMessage.getMessage()));
+ pw.print("\t");
+ ResultUtil.printField(pw, CodedMessageField.RETRIABLE.str(), codedMessage.isRetriable(), false);
pw.print("\t} \n\t");
boolean lastMsg = i == messages.size() - 1;
if (!lastMsg) {
@@ -78,6 +81,7 @@
ObjectNode error = array.addObject();
error.put(CodedMessageField.CODE.str(), codedMessage.getCode());
error.put(CodedMessageField.MSG.str(), codedMessage.getMessage());
+ error.put(CodedMessageField.RETRIABLE.str(), codedMessage.isRetriable());
});
return objectNode;
}
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/request-param-validation-400-BAD/request-param-validation-400-BAD.01.regexjson b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/request-param-validation-400-BAD/request-param-validation-400-BAD.01.regexjson
index ba3c970..f823ff8 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results/api/request-param-validation-400-BAD/request-param-validation-400-BAD.01.regexjson
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/api/request-param-validation-400-BAD/request-param-validation-400-BAD.01.regexjson
@@ -1,6 +1,6 @@
{
"errors": [{
- "code": 1, "msg": "ASX0047: Invalid value for parameter 'format': foo" }
+ "code": 1, "msg": "ASX0047: Invalid value for parameter 'format': foo", "retriable": false }
],
"status": "fatal",
"metrics": {
diff --git a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/api/ICodedMessage.java b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/api/ICodedMessage.java
index 06202c4..e2397aa 100644
--- a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/api/ICodedMessage.java
+++ b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/api/ICodedMessage.java
@@ -33,4 +33,6 @@
* @return the message
*/
String getMessage();
+
+ boolean isRetriable();
}