>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

Reply via email to