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;