>From Ali Alsuliman <[email protected]>:

Ali Alsuliman has uploaded this change for review. ( 
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18565 )


Change subject: WIP: catch Task exceptions
......................................................................

WIP: catch Task exceptions

Change-Id: I5e0f1e6b906c15932a3bb7ae740b5a7c89198cae
---
M 
hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/comm/IFrameWriter.java
M 
hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/comm/IPartitionCollector.java
M 
hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/comm/IFrameReader.java
M 
hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/Task.java
4 files changed, 34 insertions(+), 9 deletions(-)



  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb 
refs/changes/65/18565/1

diff --git 
a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/comm/IFrameReader.java
 
b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/comm/IFrameReader.java
index 62eacc8..3e7e2ab 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/comm/IFrameReader.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/comm/IFrameReader.java
@@ -20,7 +20,7 @@

 import org.apache.hyracks.api.exceptions.HyracksDataException;

-public interface IFrameReader {
+public interface IFrameReader extends AutoCloseable {
     void open() throws HyracksDataException;

     boolean nextFrame(IFrame frame) throws HyracksDataException;
diff --git 
a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/comm/IFrameWriter.java
 
b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/comm/IFrameWriter.java
index 19d7afb..a49f226 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/comm/IFrameWriter.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/comm/IFrameWriter.java
@@ -56,7 +56,7 @@
  * Note: If the call to {@link IFrameWriter#open()} failed, the {@link 
IFrameWriter#close()} must still be called by the
  * producer.
  */
-public interface IFrameWriter {
+public interface IFrameWriter extends AutoCloseable {
     /**
      * First call to allocate any resources.
      */
diff --git 
a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/comm/IPartitionCollector.java
 
b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/comm/IPartitionCollector.java
index 4a977ec..7b52875 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/comm/IPartitionCollector.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-api/src/main/java/org/apache/hyracks/api/comm/IPartitionCollector.java
@@ -25,7 +25,7 @@
 import org.apache.hyracks.api.job.JobId;
 import org.apache.hyracks.api.partitions.PartitionId;

-public interface IPartitionCollector {
+public interface IPartitionCollector extends AutoCloseable {
     public JobId getJobId();

     public ConnectorDescriptorId getConnectorId();
diff --git 
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/Task.java
 
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/Task.java
index 0c5c233..9d4d4ae 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/Task.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-control/hyracks-control-nc/src/main/java/org/apache/hyracks/control/nc/Task.java
@@ -406,6 +406,7 @@
         if (aborted) {
             return;
         }
+        Exception originalEx = null;
         try {
             collector.open();
             try {
@@ -430,24 +431,39 @@
                             buffer.compact();
                         }
                     } catch (Exception e) {
+                        originalEx = e;
                         try {
                             writer.fail();
                         } catch (HyracksDataException e1) {
-                            e.addSuppressed(e1);
+                            originalEx.addSuppressed(e1);
                         }
-                        throw e;
                     } finally {
-                        writer.close();
+                        originalEx = autoClose(writer, originalEx);
                     }
                 } finally {
-                    reader.close();
+                    originalEx = autoClose(reader, originalEx);
                 }
+            } catch (Exception e) {
+                originalEx = ExceptionUtils.suppress(originalEx, e);
             } finally {
-                collector.close();
+                originalEx = autoClose(collector, originalEx);
             }
         } catch (Exception e) {
-            throw HyracksDataException.create(e);
+            originalEx = ExceptionUtils.suppress(originalEx, e);
         }
+        if (originalEx != null) {
+            throw HyracksDataException.create(originalEx);
+        }
+    }
+
+    private static Exception autoClose(AutoCloseable closeable, Exception ex) {
+        Exception exception = ex;
+        try {
+            closeable.close();
+        } catch (Exception e) {
+            exception = ExceptionUtils.suppress(exception, e);
+        }
+        return exception;
     }

     @Override

--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18565
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: I5e0f1e6b906c15932a3bb7ae740b5a7c89198cae
Gerrit-Change-Number: 18565
Gerrit-PatchSet: 1
Gerrit-Owner: Ali Alsuliman <[email protected]>
Gerrit-MessageType: newchange

Reply via email to