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;