>From Hussain Towaileb <[email protected]>:
Hussain Towaileb has uploaded this change for review. (
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19546 )
Change subject: [NO ISSUE]: do not lose cause exceptions and interrupts
......................................................................
[NO ISSUE]: do not lose cause exceptions and interrupts
Change-Id: I2cca80ee59fd86306c7433b3df100b32499b4e3b
---
M
hyracks-fullstack/algebricks/algebricks-common/src/main/java/org/apache/hyracks/algebricks/common/exceptions/AlgebricksException.java
M
asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceRequestParameters.java
M
asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
M
asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/RuntimeDataException.java
M
asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/aws/AwsS3InputStream.java
M
hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/ExceptionUtils.java
M
asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryServiceServlet.java
M
hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksDataException.java
M
hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksException.java
9 files changed, 33 insertions(+), 10 deletions(-)
git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb
refs/changes/46/19546/1
diff --git
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryServiceServlet.java
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryServiceServlet.java
index a5e13c1..2809358 100644
---
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryServiceServlet.java
+++
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/NCQueryServiceServlet.java
@@ -100,7 +100,7 @@
cancelQuery(ncMb, ncCtx.getNodeId(),
requestReference.getUuid(), param.getClientContextID(), e, false);
throw e;
} catch (TimeoutException exception) {
- RuntimeDataException hde = new
RuntimeDataException(ErrorCode.REQUEST_TIMEOUT);
+ RuntimeDataException hde =
RuntimeDataException.create(ErrorCode.REQUEST_TIMEOUT, exception);
hde.addSuppressed(exception);
// cancel query
cancelQuery(ncMb, ncCtx.getNodeId(),
requestReference.getUuid(), param.getClientContextID(), hde, true);
diff --git
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceRequestParameters.java
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceRequestParameters.java
index 563f498..281dad3 100644
---
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceRequestParameters.java
+++
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/http/server/QueryServiceRequestParameters.java
@@ -456,7 +456,7 @@
setFromRequestBody(request);
}
} catch (JsonParseException | JsonMappingException e) {
- throw new RuntimeDataException(ErrorCode.INVALID_REQ_JSON_VAL);
+ throw RuntimeDataException.create(ErrorCode.INVALID_REQ_JSON_VAL,
e);
}
}
@@ -601,7 +601,7 @@
try {
return Long.parseLong(value);
} catch (NumberFormatException e) {
- throw new RuntimeDataException(ErrorCode.INVALID_REQ_PARAM_VAL,
parameterName, value);
+ throw RuntimeDataException.create(ErrorCode.INVALID_REQ_PARAM_VAL,
e, parameterName, value);
}
}
@@ -614,7 +614,7 @@
try {
return
TimeUnit.NANOSECONDS.toMillis(Duration.parseDurationStringToNanos(value));
} catch (HyracksDataException e) {
- throw new RuntimeDataException(ErrorCode.INVALID_REQ_PARAM_VAL,
parameterName, value);
+ throw RuntimeDataException.create(ErrorCode.INVALID_REQ_PARAM_VAL,
e, parameterName, value);
}
}
diff --git
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
index c89097b..05fb712 100644
---
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
+++
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
@@ -4890,7 +4890,7 @@
} catch (Exception e) {
if (org.apache.hyracks.api.util.ExceptionUtils.getRootCause(e)
instanceof InterruptedException) {
Thread.currentThread().interrupt();
- throw new RuntimeDataException(ErrorCode.REQUEST_CANCELLED,
clientRequest.getId());
+ throw RuntimeDataException.create(ErrorCode.REQUEST_CANCELLED,
e, clientRequest.getId());
}
throw e;
} finally {
diff --git
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/RuntimeDataException.java
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/RuntimeDataException.java
index 1a0a61f..95bcda7 100644
---
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/RuntimeDataException.java
+++
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/exceptions/RuntimeDataException.java
@@ -31,6 +31,10 @@
return new RuntimeDataException(error, params);
}
+ public static RuntimeDataException create(ErrorCode error, Throwable
cause, Serializable... params) {
+ return new RuntimeDataException(error, cause, params);
+ }
+
public RuntimeDataException(ErrorCode errorCode, Throwable cause,
SourceLocation sourceLoc,
Serializable... params) {
super(errorCode, cause, sourceLoc, params);
diff --git
a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/aws/AwsS3InputStream.java
b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/aws/AwsS3InputStream.java
index 0f7f71a..9d7b938 100644
---
a/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/aws/AwsS3InputStream.java
+++
b/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/input/record/reader/aws/AwsS3InputStream.java
@@ -80,7 +80,7 @@
*
* @return true
*/
- private boolean doGetInputStream(GetObjectRequest request) throws
RuntimeDataException {
+ private boolean doGetInputStream(GetObjectRequest request) throws
HyracksDataException {
int retries = 0;
while (retries < MAX_RETRIES) {
try {
@@ -93,7 +93,7 @@
return false;
} catch (S3Exception ex) {
if (!shouldRetry(ex.awsErrorDetails().errorCode(), retries++))
{
- throw new
RuntimeDataException(ErrorCode.EXTERNAL_SOURCE_ERROR, getMessageOrToString(ex));
+ throw
RuntimeDataException.create(ErrorCode.EXTERNAL_SOURCE_ERROR, ex,
getMessageOrToString(ex));
}
LOGGER.debug(() -> "S3 retryable error: " +
LogRedactionUtil.userData(ex.getMessage()));
@@ -102,9 +102,10 @@
Thread.sleep(TimeUnit.SECONDS.toMillis(retries < 3 ? 1 :
2));
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
+ throw RuntimeDataException.create(e);
}
} catch (SdkException ex) {
- throw new
RuntimeDataException(ErrorCode.EXTERNAL_SOURCE_ERROR, getMessageOrToString(ex));
+ throw new
RuntimeDataException(ErrorCode.EXTERNAL_SOURCE_ERROR, ex,
getMessageOrToString(ex));
}
}
return true;
diff --git
a/hyracks-fullstack/algebricks/algebricks-common/src/main/java/org/apache/hyracks/algebricks/common/exceptions/AlgebricksException.java
b/hyracks-fullstack/algebricks/algebricks-common/src/main/java/org/apache/hyracks/algebricks/common/exceptions/AlgebricksException.java
index 0b7af91..483076b 100644
---
a/hyracks-fullstack/algebricks/algebricks-common/src/main/java/org/apache/hyracks/algebricks/common/exceptions/AlgebricksException.java
+++
b/hyracks-fullstack/algebricks/algebricks-common/src/main/java/org/apache/hyracks/algebricks/common/exceptions/AlgebricksException.java
@@ -61,6 +61,10 @@
this.sourceLoc = sourceLoc;
this.nodeId = nodeId;
this.params = params;
+
+ if (cause instanceof InterruptedException) {
+ Thread.currentThread().interrupt();
+ }
}
/**
diff --git
a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksDataException.java
b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksDataException.java
index fdda793..0270f7f 100644
---
a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksDataException.java
+++
b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksDataException.java
@@ -43,8 +43,6 @@
}
if (cause instanceof HyracksDataException) {
return (HyracksDataException) cause;
- } else if (cause instanceof InterruptedException) {
- Thread.currentThread().interrupt();
}
return new HyracksDataException(cause);
}
diff --git
a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksException.java
b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksException.java
index 12f1095..b12c8df 100644
---
a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksException.java
+++
b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/exceptions/HyracksException.java
@@ -79,6 +79,10 @@
this.errorCode = intCode;
this.nodeId = nodeId;
this.params = params;
+
+ if (cause instanceof InterruptedException) {
+ Thread.currentThread().interrupt();
+ }
}
protected HyracksException(IError errorCode, Throwable cause,
SourceLocation sourceLoc, String nodeId,
diff --git
a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/ExceptionUtils.java
b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/ExceptionUtils.java
index d616eb5..ddba3f0 100644
---
a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/ExceptionUtils.java
+++
b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/util/ExceptionUtils.java
@@ -128,6 +128,9 @@
}
public static Throwable getRootCause(Throwable e) {
+ if (e == null) {
+ return null;
+ }
Throwable current = e;
Throwable cause = e.getCause();
while (cause != null && cause != current) {
--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/19546
To unsubscribe, or for help writing mail filters, visit
https://asterix-gerrit.ics.uci.edu/settings
Gerrit-Project: asterixdb
Gerrit-Branch: trinity
Gerrit-Change-Id: I2cca80ee59fd86306c7433b3df100b32499b4e3b
Gerrit-Change-Number: 19546
Gerrit-PatchSet: 1
Gerrit-Owner: Hussain Towaileb <[email protected]>
Gerrit-MessageType: newchange