[NO ISSUE][RT] Inherit Closeable in IFrameOperationCallback

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

Details:
- Primary upsert operator uses an IFrameOperationCallback
  to perform per frame operations. In this change,
  IFrameOperationCallback extends Closeable and allow the
  callback to release resources on the close of the pipeline.

Change-Id: Iaacd6538c27d5498868256616a793e0ebcec3729
Reviewed-on: https://asterix-gerrit.ics.uci.edu/2536
Sonar-Qube: Jenkins <jenk...@fulliautomatix.ics.uci.edu>
Tested-by: Jenkins <jenk...@fulliautomatix.ics.uci.edu>
Contrib: Jenkins <jenk...@fulliautomatix.ics.uci.edu>
Integration-Tests: Jenkins <jenk...@fulliautomatix.ics.uci.edu>
Reviewed-by: Murtadha Hubail <mhub...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/asterixdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/asterixdb/commit/bf41e4cb
Tree: http://git-wip-us.apache.org/repos/asf/asterixdb/tree/bf41e4cb
Diff: http://git-wip-us.apache.org/repos/asf/asterixdb/diff/bf41e4cb

Branch: refs/heads/release-0.9.4-pre-rc
Commit: bf41e4cb3cfd659f6b00e783532d470ce2b7281e
Parents: 6453ecf
Author: Abdullah Alamoudi <bamou...@gmail.com>
Authored: Mon Mar 26 21:10:08 2018 -0700
Committer: abdullah alamoudi <bamou...@gmail.com>
Committed: Wed Mar 28 12:31:01 2018 -0700

----------------------------------------------------------------------
 .../common/context/BaseOperationTracker.java    |  4 ++++
 .../NoOpFrameOperationCallbackFactory.java      |  7 +++++++
 .../LSMPrimaryUpsertOperatorNodePushable.java   | 22 +++++++++++---------
 .../am/common/api/IIndexDataflowHelper.java     |  5 ++++-
 .../lsm/common/api/IFrameOperationCallback.java |  5 +++--
 5 files changed, 30 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/asterixdb/blob/bf41e4cb/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/BaseOperationTracker.java
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/BaseOperationTracker.java
 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/BaseOperationTracker.java
index 9ec13ef..b7af0b6 100644
--- 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/BaseOperationTracker.java
+++ 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/context/BaseOperationTracker.java
@@ -74,4 +74,8 @@ public class BaseOperationTracker implements 
ITransactionOperationTracker {
         dsInfo.untouch();
         dsInfo.getIndexes().get(resourceId).untouch();
     }
+
+    public DatasetInfo getDatasetInfo() {
+        return dsInfo;
+    }
 }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/bf41e4cb/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/dataflow/NoOpFrameOperationCallbackFactory.java
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/dataflow/NoOpFrameOperationCallbackFactory.java
 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/dataflow/NoOpFrameOperationCallbackFactory.java
index 5e3879f..8f28752 100644
--- 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/dataflow/NoOpFrameOperationCallbackFactory.java
+++ 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/dataflow/NoOpFrameOperationCallbackFactory.java
@@ -18,6 +18,8 @@
  */
 package org.apache.asterix.common.dataflow;
 
+import java.io.IOException;
+
 import org.apache.hyracks.api.context.IHyracksTaskContext;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.storage.am.lsm.common.api.IFrameOperationCallback;
@@ -43,5 +45,10 @@ public class NoOpFrameOperationCallbackFactory implements 
IFrameOperationCallbac
         public void frameCompleted() throws HyracksDataException {
             // No Op
         }
+
+        @Override
+        public void close() throws IOException {
+            // No Op
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/bf41e4cb/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/LSMPrimaryUpsertOperatorNodePushable.java
----------------------------------------------------------------------
diff --git 
a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/LSMPrimaryUpsertOperatorNodePushable.java
 
b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/LSMPrimaryUpsertOperatorNodePushable.java
index e58a7db..68053d3 100644
--- 
a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/LSMPrimaryUpsertOperatorNodePushable.java
+++ 
b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/operators/LSMPrimaryUpsertOperatorNodePushable.java
@@ -40,6 +40,7 @@ import org.apache.hyracks.api.dataflow.value.IMissingWriter;
 import org.apache.hyracks.api.dataflow.value.IMissingWriterFactory;
 import org.apache.hyracks.api.dataflow.value.RecordDescriptor;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
+import org.apache.hyracks.api.util.CleanupUtils;
 import org.apache.hyracks.dataflow.common.comm.io.ArrayTupleBuilder;
 import org.apache.hyracks.dataflow.common.comm.io.ArrayTupleReference;
 import org.apache.hyracks.dataflow.common.comm.io.FrameTupleAccessor;
@@ -243,6 +244,11 @@ public class LSMPrimaryUpsertOperatorNodePushable extends 
LSMIndexInsertUpdateDe
                     callback.frameCompleted();
                     appender.write(writer, true);
                 }
+
+                @Override
+                public void close() throws IOException {
+                    callback.close();
+                }
             };
         } catch (Throwable e) { // NOSONAR: Re-thrown
             throw HyracksDataException.create(e);
@@ -360,16 +366,12 @@ public class LSMPrimaryUpsertOperatorNodePushable extends 
LSMIndexInsertUpdateDe
 
     @Override
     public void close() throws HyracksDataException {
-        try {
-            try {
-                if (cursor != null) {
-                    cursor.destroy();
-                }
-            } finally {
-                writer.close();
-            }
-        } finally {
-            indexHelper.close();
+        Throwable failure = CleanupUtils.close(frameOpCallback, null);
+        failure = CleanupUtils.destroy(failure, cursor);
+        failure = CleanupUtils.close(writer, failure);
+        failure = CleanupUtils.close(indexHelper, failure);
+        if (failure != null) {
+            throw HyracksDataException.create(failure);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/bf41e4cb/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/api/IIndexDataflowHelper.java
----------------------------------------------------------------------
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/api/IIndexDataflowHelper.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/api/IIndexDataflowHelper.java
index be10b27..9e65eb2 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/api/IIndexDataflowHelper.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-common/src/main/java/org/apache/hyracks/storage/am/common/api/IIndexDataflowHelper.java
@@ -18,11 +18,13 @@
  */
 package org.apache.hyracks.storage.am.common.api;
 
+import java.io.Closeable;
+
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.storage.common.IIndex;
 import org.apache.hyracks.storage.common.LocalResource;
 
-public interface IIndexDataflowHelper {
+public interface IIndexDataflowHelper extends Closeable {
 
     /**
      * If open throws an exception, it means that the index was not opened 
successfully.
@@ -36,6 +38,7 @@ public interface IIndexDataflowHelper {
      *
      * @throws HyracksDataException
      */
+    @Override
     void close() throws HyracksDataException;
 
     /**

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/bf41e4cb/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/IFrameOperationCallback.java
----------------------------------------------------------------------
diff --git 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/IFrameOperationCallback.java
 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/IFrameOperationCallback.java
index 96eb559..df78c53 100644
--- 
a/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/IFrameOperationCallback.java
+++ 
b/hyracks-fullstack/hyracks/hyracks-storage-am-lsm-common/src/main/java/org/apache/hyracks/storage/am/lsm/common/api/IFrameOperationCallback.java
@@ -18,13 +18,14 @@
  */
 package org.apache.hyracks.storage.am.lsm.common.api;
 
+import java.io.Closeable;
+
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 
 /**
  * An interface that is used to enable frame level operation on indexes
  */
-@FunctionalInterface
-public interface IFrameOperationCallback {
+public interface IFrameOperationCallback extends Closeable {
     /**
      * Called once processing the frame is done before calling nextFrame on 
the next IFrameWriter in
      * the pipeline

Reply via email to