You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by hu...@apache.org on 2022/08/14 12:33:07 UTC
[iotdb] 02/06: temp save
This is an automated email from the ASF dual-hosted git repository.
hui pushed a commit to branch lmh/AggOpMemoryControl
in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 90eeac046ea6e4f933239cd94410c4e73a376c11
Author: liuminghui233 <54...@qq.com>
AuthorDate: Thu Aug 11 23:52:34 2022 +0800
temp save
---
.../timerangeiterator/AggrWindowIterator.java | 17 ++++++++++--
.../timerangeiterator/ITimeRangeIterator.java | 2 +-
.../timerangeiterator/PreAggrWindowIterator.java | 5 ++++
.../PreAggrWindowWithNaturalMonthIterator.java | 30 ++++++++++++++++++++++
.../SingleTimeWindowIterator.java | 2 +-
.../db/mpp/aggregation/TimeRangeIteratorTest.java | 2 ++
6 files changed, 54 insertions(+), 4 deletions(-)
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/aggregation/timerangeiterator/AggrWindowIterator.java b/server/src/main/java/org/apache/iotdb/db/mpp/aggregation/timerangeiterator/AggrWindowIterator.java
index 98dd32abc0..9f2300f0ff 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/aggregation/timerangeiterator/AggrWindowIterator.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/aggregation/timerangeiterator/AggrWindowIterator.java
@@ -178,7 +178,20 @@ public class AggrWindowIterator implements ITimeRangeIterator {
}
@Override
- public int getTotalTimeRangeNum() {
- return 0;
+ public long getTotalIntervalNum() {
+ long queryRange = endTime - startTime;
+ long intervalNum;
+
+ if (isSlidingStepByMonth) {
+ intervalNum = (long) Math.ceil(queryRange / (double) (slidingStep * MS_TO_MONTH));
+ long retStartTime = DatetimeUtils.calcIntervalByMonth(startTime, intervalNum * slidingStep);
+ while (retStartTime > endTime) {
+ intervalNum -= 1;
+ retStartTime = DatetimeUtils.calcIntervalByMonth(startTime, intervalNum * slidingStep);
+ }
+ } else {
+ intervalNum = (long) Math.ceil(queryRange / (double) slidingStep);
+ }
+ return intervalNum;
}
}
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/aggregation/timerangeiterator/ITimeRangeIterator.java b/server/src/main/java/org/apache/iotdb/db/mpp/aggregation/timerangeiterator/ITimeRangeIterator.java
index 76161dd684..47a6961fd7 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/aggregation/timerangeiterator/ITimeRangeIterator.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/aggregation/timerangeiterator/ITimeRangeIterator.java
@@ -56,5 +56,5 @@ public interface ITimeRangeIterator {
*/
long currentOutputTime();
- int getTotalTimeRangeNum();
+ long getTotalIntervalNum();
}
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/aggregation/timerangeiterator/PreAggrWindowIterator.java b/server/src/main/java/org/apache/iotdb/db/mpp/aggregation/timerangeiterator/PreAggrWindowIterator.java
index f7f6297ddb..223ae03d0d 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/aggregation/timerangeiterator/PreAggrWindowIterator.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/aggregation/timerangeiterator/PreAggrWindowIterator.java
@@ -173,4 +173,9 @@ public class PreAggrWindowIterator implements ITimeRangeIterator {
public long currentOutputTime() {
return leftCRightO ? curTimeRange.getMin() : curTimeRange.getMax();
}
+
+ @Override
+ public long getTotalIntervalNum() {
+ return (long) Math.ceil((endTime - startTime) / (double) slidingStep);
+ }
}
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/aggregation/timerangeiterator/PreAggrWindowWithNaturalMonthIterator.java b/server/src/main/java/org/apache/iotdb/db/mpp/aggregation/timerangeiterator/PreAggrWindowWithNaturalMonthIterator.java
index d8eede01ef..f89c913f88 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/aggregation/timerangeiterator/PreAggrWindowWithNaturalMonthIterator.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/aggregation/timerangeiterator/PreAggrWindowWithNaturalMonthIterator.java
@@ -19,13 +19,21 @@
package org.apache.iotdb.db.mpp.aggregation.timerangeiterator;
+import org.apache.iotdb.db.qp.utils.DatetimeUtils;
import org.apache.iotdb.db.utils.datastructure.TimeSelector;
import org.apache.iotdb.tsfile.read.common.TimeRange;
+import static org.apache.iotdb.db.qp.utils.DatetimeUtils.MS_TO_MONTH;
+
public class PreAggrWindowWithNaturalMonthIterator implements ITimeRangeIterator {
private static final int HEAP_MAX_SIZE = 100;
+ private final long startTime;
+ private final long endTime;
+ private final long slidingStep;
+ private final boolean isSlidingStepByMonth;
+
private final boolean isAscending;
private final boolean leftCRightO;
private final TimeSelector timeBoundaryHeap;
@@ -46,6 +54,10 @@ public class PreAggrWindowWithNaturalMonthIterator implements ITimeRangeIterator
boolean isSlidingStepByMonth,
boolean isIntervalByMonth,
boolean leftCRightO) {
+ this.startTime = startTime;
+ this.endTime = endTime;
+ this.slidingStep = slidingStep;
+ this.isSlidingStepByMonth = isSlidingStepByMonth;
this.isAscending = isAscending;
this.timeBoundaryHeap = new TimeSelector(HEAP_MAX_SIZE, isAscending);
this.aggrWindowIterator =
@@ -147,4 +159,22 @@ public class PreAggrWindowWithNaturalMonthIterator implements ITimeRangeIterator
public long currentOutputTime() {
return leftCRightO ? curTimeRange.getMin() : curTimeRange.getMax();
}
+
+ @Override
+ public long getTotalIntervalNum() {
+ long queryRange = endTime - startTime;
+
+ long intervalNum;
+ if (isSlidingStepByMonth) {
+ intervalNum = (long) Math.ceil(queryRange / (double) (slidingStep * MS_TO_MONTH));
+ long retStartTime = DatetimeUtils.calcIntervalByMonth(startTime, intervalNum * slidingStep);
+ while (retStartTime >= endTime) {
+ intervalNum -= 1;
+ retStartTime = DatetimeUtils.calcIntervalByMonth(startTime, intervalNum * slidingStep);
+ }
+ } else {
+ intervalNum = (long) Math.ceil(queryRange / (double) slidingStep);
+ }
+ return intervalNum;
+ }
}
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/aggregation/timerangeiterator/SingleTimeWindowIterator.java b/server/src/main/java/org/apache/iotdb/db/mpp/aggregation/timerangeiterator/SingleTimeWindowIterator.java
index 291e4f3b4a..4802267afa 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/aggregation/timerangeiterator/SingleTimeWindowIterator.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/aggregation/timerangeiterator/SingleTimeWindowIterator.java
@@ -73,7 +73,7 @@ public class SingleTimeWindowIterator implements ITimeRangeIterator {
}
@Override
- public int getTotalTimeRangeNum() {
+ public long getTotalIntervalNum() {
return 1;
}
}
diff --git a/server/src/test/java/org/apache/iotdb/db/mpp/aggregation/TimeRangeIteratorTest.java b/server/src/test/java/org/apache/iotdb/db/mpp/aggregation/TimeRangeIteratorTest.java
index 88e4b6bf16..1d3f3ccf79 100644
--- a/server/src/test/java/org/apache/iotdb/db/mpp/aggregation/TimeRangeIteratorTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/mpp/aggregation/TimeRangeIteratorTest.java
@@ -295,6 +295,8 @@ public class TimeRangeIteratorTest {
}
private void checkRes(ITimeRangeIterator timeRangeIterator, String[] res) {
+ Assert.assertEquals(res.length, timeRangeIterator.getTotalIntervalNum());
+
boolean isAscending = timeRangeIterator.isAscending();
int cnt = isAscending ? 0 : res.length - 1;