This is an automated email from the ASF dual-hosted git repository. tanxinyu pushed a commit to branch master_performance in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 5ceecfd85aa17f7757feb59e030630d58d9d2ccd 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
