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

dzamo pushed a commit to branch 1.21
in repository https://gitbox.apache.org/repos/asf/drill.git

commit df505ae6541c246d9ecbf955d0abf87525a4ae44
Author: shfshihuafeng <shfshihuaf...@163.com>
AuthorDate: Sat Mar 30 05:29:32 2024 +0800

    DRILL-8484: HashJoinPOP Memory Leak is Caused by  an OOM Exception when 
read data from Stream with container (#2889)
---
 .../drill/exec/cache/VectorAccessibleSerializable.java    | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/cache/VectorAccessibleSerializable.java
 
b/exec/java-exec/src/main/java/org/apache/drill/exec/cache/VectorAccessibleSerializable.java
index b041d4795f..13f53de76f 100644
--- 
a/exec/java-exec/src/main/java/org/apache/drill/exec/cache/VectorAccessibleSerializable.java
+++ 
b/exec/java-exec/src/main/java/org/apache/drill/exec/cache/VectorAccessibleSerializable.java
@@ -25,6 +25,7 @@ import java.io.OutputStream;
 import java.util.List;
 
 import org.apache.drill.common.exceptions.UserException;
+import org.apache.drill.exec.exception.OutOfMemoryException;
 import org.apache.drill.exec.expr.TypeHelper;
 import org.apache.drill.exec.memory.BufferAllocator;
 import org.apache.drill.exec.metrics.DrillMetrics;
@@ -164,14 +165,22 @@ public class VectorAccessibleSerializable extends 
AbstractStreamSerializable {
     for (SerializedField metaData : fieldList) {
       final int dataLength = metaData.getBufferLength();
       final MaterializedField field = MaterializedField.create(metaData);
-      final DrillBuf buf = allocator.buffer(dataLength);
-      final ValueVector vector;
+      DrillBuf buf = null;
+      ValueVector vector = null;
       try {
+        buf = allocator.buffer(dataLength);
         buf.writeBytes(input, dataLength);
         vector = TypeHelper.getNewVector(field, allocator);
         vector.load(metaData, buf);
+      } catch (OutOfMemoryException oom) {
+        for (ValueVector valueVector : vectorList) {
+          valueVector.clear();
+        }
+        throw UserException.memoryError(oom).message("Allocator memory 
failed").build(logger);
       } finally {
-        buf.release();
+        if (buf != null) {
+          buf.release();
+        }
       }
       vectorList.add(vector);
     }

Reply via email to