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