You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ro...@apache.org on 2022/04/17 08:26:44 UTC
[iotdb] 01/01: [IOTDB-2924] UDF Framework: index overflow while iterating sliding windows (#5555)
This is an automated email from the ASF dual-hosted git repository.
rong pushed a commit to branch iotdb-2924-0.13
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit e1188f5308bd91b0ed6d1d50f7c6810604352c83
Author: Steve Yurong Su <ro...@apache.org>
AuthorDate: Sat Apr 16 12:22:28 2022 +0800
[IOTDB-2924] UDF Framework: index overflow while iterating sliding windows (#5555)
(cherry picked from commit 90cd903f9bfd6b3f6c15f4e3674cabfea35a5058)
---
.../udf/core/layer/MultiInputColumnIntermediateLayer.java | 14 ++++++++++++++
.../SingleInputColumnMultiReferenceIntermediateLayer.java | 14 ++++++++++++++
.../SingleInputColumnSingleReferenceIntermediateLayer.java | 14 ++++++++++++++
3 files changed, 42 insertions(+)
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/layer/MultiInputColumnIntermediateLayer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/layer/MultiInputColumnIntermediateLayer.java
index 505367215f..843bd85504 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/layer/MultiInputColumnIntermediateLayer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/layer/MultiInputColumnIntermediateLayer.java
@@ -36,6 +36,9 @@ import org.apache.iotdb.db.utils.datastructure.TimeSelector;
import org.apache.iotdb.tsfile.exception.write.UnSupportedDataTypeException;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
@@ -43,6 +46,9 @@ import java.util.List;
public class MultiInputColumnIntermediateLayer extends IntermediateLayer
implements IUDFInputDataSet {
+ private static final Logger LOGGER =
+ LoggerFactory.getLogger(MultiInputColumnIntermediateLayer.class);
+
private final LayerPointReader[] layerPointReaders;
private final TSDataType[] dataTypes;
private final TimeSelector timeHeap;
@@ -226,6 +232,14 @@ public class MultiInputColumnIntermediateLayer extends IntermediateLayer
beginIndex += slidingStep;
int endIndex = beginIndex + windowSize;
+ if (beginIndex < 0 || endIndex < 0) {
+ LOGGER.warn(
+ "MultiInputColumnIntermediateLayer$LayerRowWindowReader: index overflow. beginIndex: {}, endIndex: {}, windowSize: {}.",
+ beginIndex,
+ endIndex,
+ windowSize);
+ return false;
+ }
int rowsToBeCollected = endIndex - rowRecordList.size();
if (0 < rowsToBeCollected) {
diff --git a/server/src/main/java/org/apache/iotdb/db/query/udf/core/layer/SingleInputColumnMultiReferenceIntermediateLayer.java b/server/src/main/java/org/apache/iotdb/db/query/udf/core/layer/SingleInputColumnMultiReferenceIntermediateLayer.java
index eb8f10f1eb..c1359d5771 100644
--- a/server/src/main/java/org/apache/iotdb/db/query/udf/core/layer/SingleInputColumnMultiReferenceIntermediateLayer.java
+++ b/server/src/main/java/org/apache/iotdb/db/query/udf/core/layer/SingleInputColumnMultiReferenceIntermediateLayer.java
@@ -35,10 +35,16 @@ import org.apache.iotdb.db.query.udf.datastructure.tv.ElasticSerializableTVList;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
import org.apache.iotdb.tsfile.utils.Binary;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import java.io.IOException;
public class SingleInputColumnMultiReferenceIntermediateLayer extends IntermediateLayer {
+ private static final Logger LOGGER =
+ LoggerFactory.getLogger(SingleInputColumnMultiReferenceIntermediateLayer.class);
+
private final LayerPointReader parentLayerPointReader;
private final TSDataType dataType;
private final ElasticSerializableTVList tvList;
@@ -220,6 +226,14 @@ public class SingleInputColumnMultiReferenceIntermediateLayer extends Intermedia
beginIndex += slidingStep;
int endIndex = beginIndex + windowSize;
+ if (beginIndex < 0 || endIndex < 0) {
+ LOGGER.warn(
+ "SingleInputColumnMultiReferenceIntermediateLayer$LayerRowWindowReader: index overflow. beginIndex: {}, endIndex: {}, windowSize: {}.",
+ beginIndex,
+ endIndex,
+ windowSize);
+ return false;
+ }
int pointsToBeCollected = endIndex - tvList.size();
if (0 < pointsToBeCollected) {
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 7a8822da26..29549ccdd0 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
@@ -33,10 +33,16 @@ import org.apache.iotdb.db.query.udf.core.reader.LayerRowWindowReader;
import org.apache.iotdb.db.query.udf.datastructure.tv.ElasticSerializableTVList;
import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
import java.io.IOException;
public class SingleInputColumnSingleReferenceIntermediateLayer extends IntermediateLayer {
+ private static final Logger LOGGER =
+ LoggerFactory.getLogger(SingleInputColumnSingleReferenceIntermediateLayer.class);
+
private final LayerPointReader parentLayerPointReader;
private final TSDataType dataType;
@@ -132,6 +138,14 @@ public class SingleInputColumnSingleReferenceIntermediateLayer extends Intermedi
beginIndex += slidingStep;
int endIndex = beginIndex + windowSize;
+ if (beginIndex < 0 || endIndex < 0) {
+ LOGGER.warn(
+ "SingleInputColumnSingleReferenceIntermediateLayer$LayerRowWindowReader: index overflow. beginIndex: {}, endIndex: {}, windowSize: {}.",
+ beginIndex,
+ endIndex,
+ windowSize);
+ return false;
+ }
int pointsToBeCollected = endIndex - tvList.size();
if (0 < pointsToBeCollected) {