>From Wail Alkowaileet <[email protected]>:

Wail Alkowaileet has submitted this change. ( 
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17979 )

Change subject: [ASTERIXDB-3319][COMP][RT] Throw external error in COPY TO
......................................................................

[ASTERIXDB-3319][COMP][RT] Throw external error in COPY TO

- user model changes: no
- storage format changes: no
- interface changes: no

Details:
Whenever we face an S3 misconfiguration (wrong region),
we throw internal error. Instead, we should report the
error as received from S3 SDK.

Change-Id: I21d9d4c91bdee50b86ab1bf6b2b06f23cf376a29
Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17979
Integration-Tests: Jenkins <[email protected]>
Reviewed-by: Wail Alkowaileet <[email protected]>
Reviewed-by: Murtadha Hubail <[email protected]>
Tested-by: Wail Alkowaileet <[email protected]>
---
M 
asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/writer/S3ExternalFileWriterFactory.java
M 
asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/writer/AbstractCloudExternalFileWriter.java
M 
asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/writer/S3ExternalFileWriter.java
3 files changed, 71 insertions(+), 7 deletions(-)

Approvals:
  Murtadha Hubail: Looks good to me, approved
  Wail Alkowaileet: Looks good to me, but someone else must approve; Verified
  Jenkins: Verified

Objections:
  Anon. E. Moose #1000171: Violations found




diff --git 
a/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/writer/AbstractCloudExternalFileWriter.java
 
b/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/writer/AbstractCloudExternalFileWriter.java
index fb8150b..73a0aeb 100644
--- 
a/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/writer/AbstractCloudExternalFileWriter.java
+++ 
b/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/writer/AbstractCloudExternalFileWriter.java
@@ -18,6 +18,8 @@
  */
 package org.apache.asterix.cloud.writer;

+import static org.apache.hyracks.api.util.ExceptionUtils.getMessageOrToString;
+
 import org.apache.asterix.cloud.CloudOutputStream;
 import org.apache.asterix.cloud.CloudResettableInputStream;
 import org.apache.asterix.cloud.IWriteBufferProvider;
@@ -91,26 +93,55 @@

     @Override
     public final void write(IValueReference value) throws HyracksDataException 
{
-        printer.print(value);
+        try {
+            printer.print(value);
+        } catch (HyracksDataException e) {
+            throw e;
+        } catch (Exception e) {
+            if (isSdkException(e)) {
+                throw 
RuntimeDataException.create(ErrorCode.EXTERNAL_SOURCE_ERROR, e, 
getMessageOrToString(e));
+            }
+            throw e;
+        }
     }

     @Override
     public final void abort() throws HyracksDataException {
-        if (bufferedWriter != null) {
-            bufferedWriter.abort();
+        try {
+            if (bufferedWriter != null) {
+                bufferedWriter.abort();
+            }
+            printer.close();
+        } catch (HyracksDataException e) {
+            throw e;
+        } catch (Exception e) {
+            if (isSdkException(e)) {
+                throw 
RuntimeDataException.create(ErrorCode.EXTERNAL_SOURCE_ERROR, e, 
getMessageOrToString(e));
+            }
+            throw e;
         }
-        printer.close();
     }

     @Override
     public final void close() throws HyracksDataException {
-        printer.close();
+        try {
+            printer.close();
+        } catch (HyracksDataException e) {
+            throw e;
+        } catch (Exception e) {
+            if (isSdkException(e)) {
+                throw 
RuntimeDataException.create(ErrorCode.EXTERNAL_SOURCE_ERROR, e, 
getMessageOrToString(e));
+            }
+            throw e;
+        }
     }

     abstract String getAdapterName();

     abstract int getPathMaxLengthInBytes();

+    abstract boolean isSdkException(Exception e);
+
     private boolean checkAndWarnExceedingMaxLength(String fullPath) {
         boolean exceeding = isExceedingMaxLength(fullPath, 
getPathMaxLengthInBytes());
         if (exceeding && warningCollector.shouldWarn()) {
diff --git 
a/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/writer/S3ExternalFileWriter.java
 
b/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/writer/S3ExternalFileWriter.java
index 648dda5..e896c05 100644
--- 
a/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/writer/S3ExternalFileWriter.java
+++ 
b/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/writer/S3ExternalFileWriter.java
@@ -24,6 +24,8 @@
 import org.apache.hyracks.api.exceptions.IWarningCollector;
 import org.apache.hyracks.api.exceptions.SourceLocation;

+import software.amazon.awssdk.core.exception.SdkException;
+
 final class S3ExternalFileWriter extends AbstractCloudExternalFileWriter {
     static int MAX_LENGTH_IN_BYTES = 1024;

@@ -41,4 +43,9 @@
     int getPathMaxLengthInBytes() {
         return MAX_LENGTH_IN_BYTES;
     }
+
+    @Override
+    boolean isSdkException(Exception e) {
+        return e instanceof SdkException;
+    }
 }
diff --git 
a/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/writer/S3ExternalFileWriterFactory.java
 
b/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/writer/S3ExternalFileWriterFactory.java
index 508225d..5036fc8 100644
--- 
a/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/writer/S3ExternalFileWriterFactory.java
+++ 
b/asterixdb/asterix-cloud/src/main/java/org/apache/asterix/cloud/writer/S3ExternalFileWriterFactory.java
@@ -19,6 +19,7 @@
 package org.apache.asterix.cloud.writer;

 import static 
org.apache.asterix.cloud.writer.AbstractCloudExternalFileWriter.isExceedingMaxLength;
+import static org.apache.hyracks.api.util.ExceptionUtils.getMessageOrToString;

 import java.io.IOException;
 import java.util.Collections;
@@ -51,6 +52,7 @@
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;

+import software.amazon.awssdk.core.exception.SdkException;
 import software.amazon.awssdk.services.s3.model.NoSuchBucketException;

 public final class S3ExternalFileWriterFactory implements 
IExternalFileWriterFactory {
@@ -126,12 +128,13 @@
             doValidate(testClient, bucket);
         } catch (IOException e) {
             if (e.getCause() instanceof NoSuchBucketException) {
-                throw new 
CompilationException(ErrorCode.EXTERNAL_SOURCE_CONTAINER_NOT_FOUND, bucket);
+                throw 
CompilationException.create(ErrorCode.EXTERNAL_SOURCE_CONTAINER_NOT_FOUND, 
bucket);
             } else {
-                LOGGER.error(e);
                 throw 
CompilationException.create(ErrorCode.EXTERNAL_SOURCE_ERROR,
                         ExceptionUtils.getMessageOrToString(e));
             }
+        } catch (SdkException e) {
+            throw CompilationException.create(ErrorCode.EXTERNAL_SOURCE_ERROR, 
e, getMessageOrToString(e));
         }
     }


--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17979
To unsubscribe, or for help writing mail filters, visit 
https://asterix-gerrit.ics.uci.edu/settings

Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Change-Id: I21d9d4c91bdee50b86ab1bf6b2b06f23cf376a29
Gerrit-Change-Number: 17979
Gerrit-PatchSet: 3
Gerrit-Owner: Wail Alkowaileet <[email protected]>
Gerrit-Reviewer: Ali Alsuliman <[email protected]>
Gerrit-Reviewer: Anon. E. Moose #1000171
Gerrit-Reviewer: Jenkins <[email protected]>
Gerrit-Reviewer: Murtadha Hubail <[email protected]>
Gerrit-Reviewer: Wail Alkowaileet <[email protected]>
Gerrit-MessageType: merged

Reply via email to