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

qiaojialin pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 241eb90  [IOTDB-2062] UDF Framework: Potential Memory Leak in 
`SingleInputColumnSingleReferenceIntermediateLayer` (#4472)
241eb90 is described below

commit 241eb904e01a712be11e46fcdfc73e34586cbff5
Author: Steve Yurong Su <[email protected]>
AuthorDate: Fri Nov 26 13:00:33 2021 +0800

    [IOTDB-2062] UDF Framework: Potential Memory Leak in 
`SingleInputColumnSingleReferenceIntermediateLayer` (#4472)
---
 .../org/apache/iotdb/db/exception/query/QueryProcessException.java  | 4 ++++
 .../org/apache/iotdb/db/query/udf/core/executor/UDTFExecutor.java   | 6 ++++++
 .../layer/SingleInputColumnSingleReferenceIntermediateLayer.java    | 4 ++++
 3 files changed, 14 insertions(+)

diff --git 
a/server/src/main/java/org/apache/iotdb/db/exception/query/QueryProcessException.java
 
b/server/src/main/java/org/apache/iotdb/db/exception/query/QueryProcessException.java
index e36b67f..6ea4ad3 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/exception/query/QueryProcessException.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/exception/query/QueryProcessException.java
@@ -38,6 +38,10 @@ public class QueryProcessException extends IoTDBException {
     super(message, errorCode);
   }
 
+  public QueryProcessException(String message, Throwable cause) {
+    super(message, cause, TSStatusCode.QUERY_PROCESS_ERROR.getStatusCode());
+  }
+
   public QueryProcessException(IoTDBException e) {
     super(e, e.getErrorCode(), e.isUserException());
   }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/query/udf/core/executor/UDTFExecutor.java
 
b/server/src/main/java/org/apache/iotdb/db/query/udf/core/executor/UDTFExecutor.java
index 48b94f9..37269d3 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/query/udf/core/executor/UDTFExecutor.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/udf/core/executor/UDTFExecutor.java
@@ -32,11 +32,16 @@ import 
org.apache.iotdb.db.query.udf.datastructure.tv.ElasticSerializableTVList;
 import org.apache.iotdb.db.query.udf.service.UDFRegistrationService;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import java.time.ZoneId;
 import java.util.Map;
 
 public class UDTFExecutor {
 
+  private static final Logger LOGGER = 
LoggerFactory.getLogger(UDTFExecutor.class);
+
   protected final FunctionExpression expression;
   protected final UDTFConfigurations configurations;
 
@@ -104,6 +109,7 @@ public class UDTFExecutor {
   }
 
   private void onError(String methodName, Exception e) throws 
QueryProcessException {
+    LOGGER.warn("Error occurred during executing UDTF", e);
     throw new QueryProcessException(
         String.format(
                 "Error occurred during executing UDTF#%s: %s", methodName, 
System.lineSeparator())
diff --git 
a/server/src/main/java/org/apache/iotdb/db/query/udf/core/layer/SingleInputColumnSingleReferenceIntermediateLayer.java
 
b/server/src/main/java/org/apache/iotdb/db/query/udf/core/layer/SingleInputColumnSingleReferenceIntermediateLayer.java
index 3dc3e34..be5d41c 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/query/udf/core/layer/SingleInputColumnSingleReferenceIntermediateLayer.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/udf/core/layer/SingleInputColumnSingleReferenceIntermediateLayer.java
@@ -144,6 +144,8 @@ public class 
SingleInputColumnSingleReferenceIntermediateLayer extends Intermedi
       @Override
       public void readyForNext() {
         hasCached = false;
+
+        tvList.setEvictionUpperBound(beginIndex + 1);
       }
 
       @Override
@@ -234,6 +236,8 @@ public class 
SingleInputColumnSingleReferenceIntermediateLayer extends Intermedi
       public void readyForNext() {
         hasCached = false;
         nextWindowTimeBegin += slidingStep;
+
+        tvList.setEvictionUpperBound(nextIndexBegin + 1);
       }
 
       @Override

Reply via email to