This is an automated email from the ASF dual-hosted git repository.

agrove pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/datafusion-comet.git


The following commit(s) were added to refs/heads/main by this push:
     new 80e4a2e9 chore: Close dictionary provider when iterator is closed 
(#904)
80e4a2e9 is described below

commit 80e4a2e98faeacc2fb0c041bd75158014921b9d6
Author: Andy Grove <[email protected]>
AuthorDate: Tue Sep 3 15:01:44 2024 -0600

    chore: Close dictionary provider when iterator is closed (#904)
    
    * Close dictionary provider when iterator is closed
    
    * add more docs
    
    * format
---
 .../java/org/apache/arrow/c/ArrowImporter.java     |  5 +----
 .../scala/org/apache/comet/vector/NativeUtil.scala | 26 +++++++++++++++++++++-
 .../scala/org/apache/comet/CometExecIterator.scala |  3 ++-
 3 files changed, 28 insertions(+), 6 deletions(-)

diff --git a/common/src/main/java/org/apache/arrow/c/ArrowImporter.java 
b/common/src/main/java/org/apache/arrow/c/ArrowImporter.java
index 1f0cbd41..d0d1754e 100644
--- a/common/src/main/java/org/apache/arrow/c/ArrowImporter.java
+++ b/common/src/main/java/org/apache/arrow/c/ArrowImporter.java
@@ -40,15 +40,12 @@ public class ArrowImporter {
   }
 
   Field importField(ArrowSchema schema, CDataDictionaryProvider provider) {
-    Field var4;
     try {
-      var4 = importer.importField(schema, provider);
+      return importer.importField(schema, provider);
     } finally {
       schema.release();
       schema.close();
     }
-
-    return var4;
   }
 
   public FieldVector importVector(
diff --git a/common/src/main/scala/org/apache/comet/vector/NativeUtil.scala 
b/common/src/main/scala/org/apache/comet/vector/NativeUtil.scala
index 5149c734..751aa6bb 100644
--- a/common/src/main/scala/org/apache/comet/vector/NativeUtil.scala
+++ b/common/src/main/scala/org/apache/comet/vector/NativeUtil.scala
@@ -30,13 +30,32 @@ import org.apache.spark.sql.vectorized.ColumnarBatch
 
 import org.apache.comet.CometArrowAllocator
 
+/**
+ * Provides functionality for importing Arrow vectors from native code and 
wrapping them as
+ * CometVectors.
+ *
+ * Also provides functionality for exporting Comet columnar batches to native 
code.
+ *
+ * Each instance of NativeUtil creates an instance of CDataDictionaryProvider 
(a
+ * DictionaryProvider that is used in C Data Interface for imports).
+ *
+ * NativeUtil must be closed after use to release resources in the dictionary 
provider.
+ */
 class NativeUtil {
   import Utils._
 
+  /** Use the global allocator */
   private val allocator = CometArrowAllocator
-  private val dictionaryProvider: CDataDictionaryProvider = new 
CDataDictionaryProvider
+
+  /** ArrowImporter does not hold any state and does not need to be closed */
   private val importer = new ArrowImporter(allocator)
 
+  /**
+   * Dictionary provider to use for the lifetime of this instance of 
NativeUtil. The dictionary
+   * provider is closed when NativeUtil is closed.
+   */
+  private val dictionaryProvider: CDataDictionaryProvider = new 
CDataDictionaryProvider
+
   /**
    * Exports a Comet `ColumnarBatch` into a list of memory addresses that can 
be consumed by the
    * native execution.
@@ -133,6 +152,11 @@ class NativeUtil {
 
     new ColumnarBatch(arrayVectors.toArray, maxNumRows)
   }
+
+  def close(): Unit = {
+    // closing the dictionary provider also closes the dictionary arrays
+    dictionaryProvider.close()
+  }
 }
 
 object NativeUtil {
diff --git a/spark/src/main/scala/org/apache/comet/CometExecIterator.scala 
b/spark/src/main/scala/org/apache/comet/CometExecIterator.scala
index 29eb2f0c..dcdc8ae9 100644
--- a/spark/src/main/scala/org/apache/comet/CometExecIterator.scala
+++ b/spark/src/main/scala/org/apache/comet/CometExecIterator.scala
@@ -48,7 +48,7 @@ class CometExecIterator(
     extends Iterator[ColumnarBatch] {
 
   private val nativeLib = new Native()
-  private val nativeUtil = new NativeUtil
+  private val nativeUtil = new NativeUtil()
   private val cometBatchIterators = inputs.map { iterator =>
     new CometBatchIterator(iterator, nativeUtil)
   }.toArray
@@ -157,6 +157,7 @@ class CometExecIterator(
         currentBatch.close()
         currentBatch = null
       }
+      nativeUtil.close()
       nativeLib.releasePlan(plan)
 
       // The allocator thoughts the exported ArrowArray and ArrowSchema 
structs are not released,


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to