You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by xi...@apache.org on 2022/05/23 07:57:59 UTC

[iotdb] 02/02: Fix timeIterator bug

This is an automated email from the ASF dual-hosted git repository.

xiangweiwei pushed a commit to branch timeIteratorBug
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 795c6f57bc696f818559da99e2743268a5dffe1d
Author: Alima777 <wx...@gmail.com>
AuthorDate: Mon May 23 15:57:29 2022 +0800

    Fix timeIterator bug
---
 data                                                         |  1 +
 .../aggregation/timerangeiterator/AggrWindowIterator.java    |  9 ++++++++-
 .../aggregation/timerangeiterator/PreAggrWindowIterator.java |  9 ++++++++-
 .../PreAggrWindowWithNaturalMonthIterator.java               |  9 ++++++++-
 .../timerangeiterator/SingleTimeWindowIterator.java          | 12 ++++++++----
 5 files changed, 33 insertions(+), 7 deletions(-)

diff --git a/data b/data
new file mode 120000
index 0000000000..dc6adc3d96
--- /dev/null
+++ b/data
@@ -0,0 +1 @@
+/Users/alima/Downloads/apache-iotdb-0.13.0-all-bin/data
\ No newline at end of file
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 d53678bad2..f27c56223c 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
@@ -43,6 +43,7 @@ public class AggrWindowIterator implements ITimeRangeIterator {
   private final boolean leftCRightO;
 
   private TimeRange curTimeRange;
+  private boolean hasCachedTimeRange;
 
   public AggrWindowIterator(
       long startTime,
@@ -114,8 +115,12 @@ public class AggrWindowIterator implements ITimeRangeIterator {
 
   @Override
   public boolean hasNextTimeRange() {
+    if (hasCachedTimeRange) {
+      return true;
+    }
     if (curTimeRange == null) {
       curTimeRange = getFirstTimeRange();
+      hasCachedTimeRange = true;
       return true;
     }
 
@@ -149,12 +154,14 @@ public class AggrWindowIterator implements ITimeRangeIterator {
     }
     retEndTime = Math.min(retEndTime, endTime);
     curTimeRange = new TimeRange(retStartTime, retEndTime);
+    hasCachedTimeRange = true;
     return true;
   }
 
   @Override
   public TimeRange nextTimeRange() {
-    if (curTimeRange != null || hasNextTimeRange()) {
+    if (hasCachedTimeRange || hasNextTimeRange()) {
+      hasCachedTimeRange = false;
       return getFinalTimeRange(curTimeRange, leftCRightO);
     }
     return null;
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 ab018e3cb7..f7f6297ddb 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
@@ -43,6 +43,7 @@ public class PreAggrWindowIterator implements ITimeRangeIterator {
   private int intervalCnt = 0;
 
   private TimeRange curTimeRange;
+  private boolean hasCachedTimeRange;
 
   public PreAggrWindowIterator(
       long startTime,
@@ -91,8 +92,12 @@ public class PreAggrWindowIterator implements ITimeRangeIterator {
 
   @Override
   public boolean hasNextTimeRange() {
+    if (hasCachedTimeRange) {
+      return true;
+    }
     if (curTimeRange == null) {
       curTimeRange = getFirstTimeRange();
+      hasCachedTimeRange = true;
       return true;
     }
 
@@ -113,12 +118,14 @@ public class PreAggrWindowIterator implements ITimeRangeIterator {
     retEndTime = Math.min(retStartTime + curInterval, endTime);
     updateIntervalAndStep();
     curTimeRange = new TimeRange(retStartTime, retEndTime);
+    hasCachedTimeRange = true;
     return true;
   }
 
   @Override
   public TimeRange nextTimeRange() {
-    if (curTimeRange != null || hasNextTimeRange()) {
+    if (hasCachedTimeRange || hasNextTimeRange()) {
+      hasCachedTimeRange = false;
       return getFinalTimeRange(curTimeRange, leftCRightO);
     }
     return null;
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 0a0d630811..d8eede01ef 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
@@ -35,6 +35,7 @@ public class PreAggrWindowWithNaturalMonthIterator implements ITimeRangeIterator
 
   private long lastEndTime;
   private TimeRange curTimeRange;
+  private boolean hasCachedTimeRange;
 
   public PreAggrWindowWithNaturalMonthIterator(
       long startTime,
@@ -70,8 +71,12 @@ public class PreAggrWindowWithNaturalMonthIterator implements ITimeRangeIterator
 
   @Override
   public boolean hasNextTimeRange() {
+    if (hasCachedTimeRange) {
+      return true;
+    }
     if (curTimeRange == null) {
       curTimeRange = getFirstTimeRange();
+      hasCachedTimeRange = true;
       return true;
     }
 
@@ -90,12 +95,14 @@ public class PreAggrWindowWithNaturalMonthIterator implements ITimeRangeIterator
     }
     lastEndTime = timeBoundaryHeap.first();
     curTimeRange = new TimeRange(retStartTime, lastEndTime);
+    hasCachedTimeRange = true;
     return true;
   }
 
   @Override
   public TimeRange nextTimeRange() {
-    if (curTimeRange != null || hasNextTimeRange()) {
+    if (hasCachedTimeRange || hasNextTimeRange()) {
+      hasCachedTimeRange = false;
       return getFinalTimeRange(curTimeRange, leftCRightO);
     }
     return null;
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 2145b51f45..b998557604 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
@@ -29,6 +29,7 @@ public class SingleTimeWindowIterator implements ITimeRangeIterator {
   private final long endTime;
 
   private TimeRange curTimeRange;
+  private boolean hasCachedTimeRange;
 
   public SingleTimeWindowIterator(long startTime, long endTime) {
     this.startTime = startTime;
@@ -42,17 +43,20 @@ public class SingleTimeWindowIterator implements ITimeRangeIterator {
 
   @Override
   public boolean hasNextTimeRange() {
+    if (hasCachedTimeRange) {
+      return true;
+    }
     if (curTimeRange == null) {
       curTimeRange = getFirstTimeRange();
-      return true;
-    } else {
-      return false;
+      hasCachedTimeRange = true;
     }
+    return hasCachedTimeRange;
   }
 
   @Override
   public TimeRange nextTimeRange() {
-    if (curTimeRange != null || hasNextTimeRange()) {
+    if (hasCachedTimeRange || hasNextTimeRange()) {
+      hasCachedTimeRange = false;
       return curTimeRange;
     }
     return null;