>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
