Merge branch 'gerrit/stabilization-6a10f3f81d' into 'gerrit/trinity'

Ext-ref: MB-61840
Change-Id: I5ac772b21a4cbaa2e6c1a14969149b0715508f97
diff --git a/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/join/OptimizedHybridHashJoin.java b/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/join/OptimizedHybridHashJoin.java
index 04f5fe8..ddf94db 100644
--- a/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/join/OptimizedHybridHashJoin.java
+++ b/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/join/OptimizedHybridHashJoin.java
@@ -255,7 +255,7 @@
         }
     }
 
-    public void fail() throws HyracksDataException {
+    public void fail() {
         for (RunFileWriter writer : buildRFWriters) {
             if (writer != null) {
                 CleanupUtils.fail(writer, null);
diff --git a/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/join/OptimizedHybridHashJoinOperatorDescriptor.java b/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/join/OptimizedHybridHashJoinOperatorDescriptor.java
index ed53a7e..91e94dc 100644
--- a/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/join/OptimizedHybridHashJoinOperatorDescriptor.java
+++ b/hyracks-fullstack/hyracks/hyracks-dataflow-std/src/main/java/org/apache/hyracks/dataflow/std/join/OptimizedHybridHashJoinOperatorDescriptor.java
@@ -47,6 +47,7 @@
 import org.apache.hyracks.api.job.JobId;
 import org.apache.hyracks.api.job.profiling.IOperatorStats;
 import org.apache.hyracks.api.job.profiling.NoOpOperatorStats;
+import org.apache.hyracks.api.util.CleanupUtils;
 import org.apache.hyracks.dataflow.common.comm.io.ArrayTupleBuilder;
 import org.apache.hyracks.dataflow.common.comm.io.FrameTupleAccessor;
 import org.apache.hyracks.dataflow.common.comm.io.FrameTupleAppender;
@@ -440,6 +441,7 @@
                         }
                         return;
                     }
+                    Throwable ex = null;
                     try {
                         try {
                             state.hybridHJ.completeProbe(writer);
@@ -470,19 +472,21 @@
                             joinPartitionPair(bReader, pReader, bSize, pSize, 1);
                         }
                     } catch (Exception e) {
+                        ex = e;
                         if (state.hybridHJ != null) {
                             state.hybridHJ.fail();
                         }
                         // Since writer.nextFrame() is called in the above "try" body, we have to call writer.fail()
                         // to send the failure signal to the downstream, when there is a throwable thrown.
-                        writer.fail();
+                        CleanupUtils.fail(writer, ex);
                         // Clear temp files as this.fail() nor this.close() will no longer be called after close().
                         state.hybridHJ.clearBuildTempFiles();
                         state.hybridHJ.clearProbeTempFiles();
-                        // Re-throw the whatever is caught.
-                        throw e;
                     } finally {
-                        writer.close();
+                        ex = CleanupUtils.close(writer, ex);
+                    }
+                    if (ex != null) {
+                        throw HyracksDataException.create(ex);
                     }
                 }