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 2023/03/23 13:40:52 UTC

[iotdb] branch lmh/fixLimitPushDownBug1.1 created (now 2e6ae8d107)

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

hui pushed a change to branch lmh/fixLimitPushDownBug1.1
in repository https://gitbox.apache.org/repos/asf/iotdb.git


      at 2e6ae8d107 Merge remote-tracking branch 'upstream/rel/1.1' into lmh/fixLimitPushDownBug1.1

This branch includes the following new commits:

     new 07f7581798 fix order bug
     new d3307a4103 fix bug & add UT
     new d9c62d810a fix bug
     new 8336670398 fix bug
     new 1428c823b8 fix bug
     new 2e6ae8d107 Merge remote-tracking branch 'upstream/rel/1.1' into lmh/fixLimitPushDownBug1.1

The 6 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[iotdb] 05/06: fix bug

Posted by hu...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

hui pushed a commit to branch lmh/fixLimitPushDownBug1.1
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 1428c823b8dbf93287a837aa9b6bcb1afe308596
Author: liuminghui233 <54...@qq.com>
AuthorDate: Thu Mar 23 21:26:11 2023 +0800

    fix bug
---
 .../execution/operator/source/SeriesScanUtil.java  | 20 +++++++---------
 .../read/reader/series/PaginationController.java   | 28 ++++++----------------
 2 files changed, 16 insertions(+), 32 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/source/SeriesScanUtil.java b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/source/SeriesScanUtil.java
index 635e7f873c..5e0f087945 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/source/SeriesScanUtil.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/source/SeriesScanUtil.java
@@ -637,7 +637,10 @@ public class SeriesScanUtil {
         firstPageReader.setFilter(queryFilter);
       }
       firstPageReader.setLimitOffset(paginationController);
-      TsBlock tsBlock = firstPageReader.getAllSatisfiedPageData(orderUtils.getAscending(), true);
+      TsBlock tsBlock = firstPageReader.getAllSatisfiedPageData(orderUtils.getAscending());
+      if (!orderUtils.getAscending()) {
+        tsBlock = paginationController.applyTsBlock(tsBlock);
+      }
       firstPageReader = null;
 
       return tsBlock;
@@ -936,7 +939,7 @@ public class SeriesScanUtil {
 
   private void putPageReaderToMergeReader(VersionPageReader pageReader) throws IOException {
     mergeReader.addReader(
-        getPointReader(pageReader.getAllSatisfiedPageData(orderUtils.getAscending(), false)),
+        getPointReader(pageReader.getAllSatisfiedPageData(orderUtils.getAscending())),
         pageReader.version,
         orderUtils.getOverlapCheckTime(pageReader.getStatistics()),
         context);
@@ -1138,20 +1141,13 @@ public class SeriesScanUtil {
       return ((IAlignedPageReader) data).getTimeStatistics();
     }
 
-    TsBlock getAllSatisfiedPageData(boolean ascending, boolean isSeq) throws IOException {
+    TsBlock getAllSatisfiedPageData(boolean ascending) throws IOException {
       long startTime = System.nanoTime();
       try {
-        paginationController.setEnable(isSeq && ascending);
         TsBlock tsBlock = data.getAllSatisfiedData();
-
         if (!ascending) {
           tsBlock.reverse();
-
-          paginationController.setEnable(isSeq);
-          tsBlock = paginationController.applyTsBlock(tsBlock);
         }
-
-        paginationController.setEnable(true);
         return tsBlock;
       } finally {
         QUERY_METRICS.recordSeriesScanCost(
@@ -1179,7 +1175,9 @@ public class SeriesScanUtil {
     }
 
     public void setLimitOffset(PaginationController paginationController) {
-      data.setLimitOffset(paginationController);
+      if (orderUtils.getAscending()) {
+        data.setLimitOffset(paginationController);
+      }
     }
   }
 
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/series/PaginationController.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/series/PaginationController.java
index 9b7b0e6435..88e9ab868a 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/series/PaginationController.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/series/PaginationController.java
@@ -31,8 +31,6 @@ public class PaginationController {
   private long curLimit;
   private long curOffset;
 
-  private boolean enable = true;
-
   public PaginationController(long limit, long offset) {
     // row limit for result set. The default value is 0, which means no limit
     this.curLimit = limit;
@@ -42,51 +40,39 @@ public class PaginationController {
     this.curOffset = offset;
   }
 
-  public void setEnable(boolean enable) {
-    this.enable = enable;
-  }
-
   public boolean hasCurOffset() {
-    return enable && curOffset > 0;
+    return curOffset > 0;
   }
 
   public boolean hasCurOffset(long rowCount) {
-    return enable && curOffset >= rowCount;
+    return curOffset >= rowCount;
   }
 
   public boolean hasCurLimit() {
-    return !enable || (!hasLimit || curLimit > 0);
+    return !hasLimit || curLimit > 0;
   }
 
   public void consumeOffset(long rowCount) {
-    if (enable) {
-      curOffset -= rowCount;
-    }
+    curOffset -= rowCount;
   }
 
   public void consumeOffset() {
-    if (enable) {
-      curOffset--;
-    }
+    curOffset--;
   }
 
   public void consumeLimit() {
-    if (enable && hasLimit) {
+    if (hasLimit) {
       curLimit--;
     }
   }
 
   public void consumeLimit(long rowCount) {
-    if (enable && hasLimit) {
+    if (hasLimit) {
       curLimit -= rowCount;
     }
   }
 
   public TsBlock applyTsBlock(TsBlock resultTsBlock) {
-    if (!enable) {
-      return resultTsBlock;
-    }
-
     int fromIndex = 0, length = resultTsBlock.getPositionCount();
     if (curOffset > 0) {
       fromIndex = (int) Math.min(curOffset, length);


[iotdb] 01/06: fix order bug

Posted by hu...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

hui pushed a commit to branch lmh/fixLimitPushDownBug1.1
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 07f75817983ed9688ac653e22605a335fcf4a015
Author: Minghui Liu <li...@foxmail.com>
AuthorDate: Wed Mar 22 16:52:44 2023 +0800

    fix order bug
---
 .../execution/operator/source/SeriesScanUtil.java  | 11 ++++--
 .../read/reader/series/PaginationController.java   | 44 +++++++++++++++++++---
 2 files changed, 46 insertions(+), 9 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/source/SeriesScanUtil.java b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/source/SeriesScanUtil.java
index 755795447f..0dbd911adf 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/source/SeriesScanUtil.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/source/SeriesScanUtil.java
@@ -1112,7 +1112,7 @@ public class SeriesScanUtil {
     return scanOptions.getGlobalTimeFilter();
   }
 
-  protected static class VersionPageReader {
+  protected class VersionPageReader {
 
     private final PriorityMergeReader.MergeReaderPriority version;
     private final IPageReader data;
@@ -1150,11 +1150,16 @@ public class SeriesScanUtil {
     TsBlock getAllSatisfiedPageData(boolean ascending) throws IOException {
       long startTime = System.nanoTime();
       try {
+        paginationController.setEnable(ascending);
         TsBlock tsBlock = data.getAllSatisfiedData();
-        if (!ascending) {
+        paginationController.setEnable(true);
+
+        if (ascending) {
+          return tsBlock;
+        } else {
           tsBlock.reverse();
+          return paginationController.applyTsBlock(tsBlock);
         }
-        return tsBlock;
       } finally {
         QUERY_METRICS.recordSeriesScanCost(
             isAligned
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/series/PaginationController.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/series/PaginationController.java
index a35867645a..5d0f41b970 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/series/PaginationController.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/series/PaginationController.java
@@ -19,6 +19,8 @@
 
 package org.apache.iotdb.tsfile.read.reader.series;
 
+import org.apache.iotdb.tsfile.read.common.block.TsBlock;
+
 public class PaginationController {
 
   public static final PaginationController UNLIMITED_PAGINATION_CONTROLLER =
@@ -29,6 +31,8 @@ public class PaginationController {
   private long curLimit;
   private long curOffset;
 
+  private boolean enable = true;
+
   public PaginationController(long limit, long offset) {
     // row limit for result set. The default value is 0, which means no limit
     this.curLimit = limit;
@@ -38,29 +42,57 @@ public class PaginationController {
     this.curOffset = offset;
   }
 
+  public void setEnable(boolean enable) {
+    this.enable = enable;
+  }
+
   public boolean hasCurOffset() {
-    return curOffset > 0;
+    return enable && curOffset > 0;
   }
 
   public boolean hasCurOffset(long rowCount) {
-    return curOffset >= rowCount;
+    return enable && curOffset >= rowCount;
   }
 
   public boolean hasCurLimit() {
-    return !hasLimit || curLimit > 0;
+    return !enable || (!hasLimit || curLimit > 0);
   }
 
   public void consumeOffset(long rowCount) {
-    curOffset -= rowCount;
+    if (enable) {
+      curOffset -= rowCount;
+    }
   }
 
   public void consumeOffset() {
-    curOffset--;
+    if (enable) {
+      curOffset--;
+    }
   }
 
   public void consumeLimit() {
-    if (hasLimit) {
+    if (enable && hasLimit) {
       curLimit--;
     }
   }
+
+  public void consumeLimit(long rowCount) {
+    if (enable && hasLimit) {
+      curLimit -= rowCount;
+    }
+  }
+
+  public TsBlock applyTsBlock(TsBlock resultTsBlock) {
+    int fromIndex = 0, length = resultTsBlock.getPositionCount();
+    if (hasCurOffset()) {
+      fromIndex = (int) Math.min(curOffset, length);
+      length -= fromIndex;
+      consumeOffset(fromIndex);
+    }
+    if (hasCurLimit()) {
+      length = (int) Math.min(curLimit, length);
+      consumeLimit(length);
+    }
+    return resultTsBlock.getRegion(fromIndex, length);
+  }
 }


[iotdb] 06/06: Merge remote-tracking branch 'upstream/rel/1.1' into lmh/fixLimitPushDownBug1.1

Posted by hu...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

hui pushed a commit to branch lmh/fixLimitPushDownBug1.1
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 2e6ae8d107488d250e7076f188ff9d6bcd201359
Merge: 1428c823b8 4f235f67c8
Author: liuminghui233 <54...@qq.com>
AuthorDate: Thu Mar 23 21:26:13 2023 +0800

    Merge remote-tracking branch 'upstream/rel/1.1' into lmh/fixLimitPushDownBug1.1

 .github/workflows/main-unix.yml                    |    4 +-
 .github/workflows/main-win.yml                     |    4 +-
 cli/src/assembly/resources/sbin/start-cli.sh       |    2 +-
 cli/src/assembly/resources/tools/export-csv.sh     |    2 +-
 cli/src/assembly/resources/tools/export-tsfile.sh  |    2 +-
 cli/src/assembly/resources/tools/import-csv.sh     |    2 +-
 cli/src/assembly/resources/tools/load-tsfile.sh    |    2 +-
 .../java/org/apache/iotdb/cli/AbstractCli.java     |   54 +-
 .../org/apache/iotdb/tool/AbstractCsvTool.java     |   22 +-
 .../java/org/apache/iotdb/tool/ExportTsFile.java   |   10 +
 .../java/org/apache/iotdb/cli/AbstractCliIT.java   |    3 +-
 .../client/async/AsyncDataNodeClientPool.java      |    4 +-
 .../iotdb/confignode/conf/ConfigNodeConfig.java    |   20 +-
 .../confignode/conf/ConfigNodeDescriptor.java      |    6 +-
 .../confignode/conf/ConfigNodeStartupCheck.java    |   98 +-
 .../confignode/conf/SystemPropertiesUtils.java     |   32 +-
 .../consensus/request/ConfigPhysicalPlan.java      |   16 +-
 .../request/read/database/CountDatabasePlan.java   |    2 +-
 .../read/partition/GetSeriesSlotListPlan.java      |    2 +-
 .../read/partition/GetTimeSlotListPlan.java        |    2 +-
 .../request/read/region/GetRegionIdPlan.java       |    2 +-
 .../AdjustMaxRegionGroupNumPlan.java               |   11 +-
 .../DatabaseSchemaPlan.java                        |    2 +-
 .../DeleteDatabasePlan.java                        |    2 +-
 .../PreDeleteDatabasePlan.java                     |    2 +-
 .../SetDataReplicationFactorPlan.java              |   30 +-
 .../SetSchemaReplicationFactorPlan.java            |   11 +-
 .../{storagegroup => database}/SetTTLPlan.java     |   13 +-
 .../SetTimePartitionIntervalPlan.java              |   13 +-
 ...eMachine.java => ConfigRegionStateMachine.java} |   92 +-
 .../confignode/manager/ClusterSchemaManager.java   |  210 +-
 .../iotdb/confignode/manager/ConfigManager.java    |  104 +-
 .../apache/iotdb/confignode/manager/IManager.java  |   18 +-
 .../iotdb/confignode/manager/ProcedureManager.java |    7 +-
 .../manager/consensus/ConsensusManager.java        |   77 +-
 .../manager/partition/PartitionManager.java        |   75 +-
 .../persistence/executor/ConfigPlanExecutor.java   |   16 +-
 .../partition/DatabasePartitionTable.java          |   17 +-
 .../persistence/partition/PartitionInfo.java       |  110 +-
 .../persistence/schema/ClusterSchemaInfo.java      |   87 +-
 .../procedure/env/ConfigNodeProcedureEnv.java      |   19 +-
 .../procedure/env/DataNodeRemoveHandler.java       |    5 +-
 .../impl/schema/DeleteDatabaseProcedure.java       |   90 +-
 .../state/schema/DeleteStorageGroupState.java      |    5 +-
 .../iotdb/confignode/service/ConfigNode.java       |   18 +-
 .../confignode/service/ConfigNodeCommandLine.java  |    7 +-
 .../thrift/ConfigNodeRPCServiceProcessor.java      |   28 +-
 .../request/ConfigPhysicalPlanSerDeTest.java       |   22 +-
 .../persistence/ClusterSchemaInfoTest.java         |    2 +-
 .../confignode/persistence/PartitionInfoTest.java  |    2 +-
 consensus/README.md                                |    2 +-
 .../common/request/IndexedConsensusRequest.java    |   19 +-
 .../iotdb/consensus/config/ConsensusConfig.java    |   15 -
 .../consensus/iot/IoTConsensusServerImpl.java      |   11 +-
 .../consensus/iot/logdispatcher/LogDispatcher.java |   33 +-
 .../ratis/ApplicationStateMachineProxy.java        |   26 +-
 .../iotdb/consensus/ratis/RatisConsensus.java      |   31 +-
 .../org/apache/iotdb/consensus/ratis/Utils.java    |   15 +
 .../ratis/metrics/IoTDBMetricRegistry.java         |   65 +-
 .../ratis/metrics/MetricRegistryManager.java       |   13 +-
 .../consensus/ratis/metrics/RatisMetricSet.java    |   79 +-
 .../ratis/metrics/RatisMetricsManager.java         |   89 +
 .../iotdb/consensus/simple/SimpleConsensus.java    |   13 +-
 .../apache/iotdb/consensus/iot/ReplicateTest.java  |    2 -
 .../apache/iotdb/consensus/iot/StabilityTest.java  |    2 -
 .../consensus/iot/util/FakeConsensusReqReader.java |    4 +-
 .../iotdb/consensus/ratis/RatisConsensusTest.java  |    2 -
 .../apache/iotdb/consensus/ratis/SnapshotTest.java |   11 +-
 .../apache/iotdb/consensus/ratis/UtilsTest.java    |    4 +-
 .../iotdb/consensus/simple/RecoveryTest.java       |    2 -
 .../consensus/simple/SimpleConsensusTest.java      |    4 +-
 .../Administration-Management/Administration.md    |    2 +-
 docs/UserGuide/Cluster/Cluster-Maintenance.md      |  271 +-
 .../Maintenance-Tools/Maintenance-Command.md       |    7 +-
 .../Apache-IoTDB-ConfigNode-Dashboard.json         | 4259 +++++++-------
 .../Apache-IoTDB-DataNode-Dashboard.json           | 5930 +++++++++++---------
 .../Apache-IoTDB-Disk-IO-Dashboard.json            |  894 +++
 ...pache-IoTDB-Performance-Overview-Dashboard.json | 1518 ++++-
 docs/UserGuide/Monitor-Alert/Metric-Tool.md        |  191 +-
 docs/UserGuide/Operators-Functions/String.md       |    8 +-
 docs/UserGuide/Query-Data/Pagination.md            |    6 +-
 docs/UserGuide/Query-Data/Select-Into.md           |   24 +-
 .../Administration-Management/Administration.md    |    2 +-
 docs/zh/UserGuide/Cluster/Cluster-Maintenance.md   |  272 +-
 docs/zh/UserGuide/Data-Concept/Encoding.md         |    2 +-
 .../Maintenance-Tools/Maintenance-Command.md       |    7 +-
 docs/zh/UserGuide/Monitor-Alert/Metric-Tool.md     |  113 +-
 docs/zh/UserGuide/Operators-Functions/Overview.md  |    6 +-
 docs/zh/UserGuide/Operators-Functions/String.md    |    8 +-
 docs/zh/UserGuide/Query-Data/Pagination.md         |    4 +-
 docs/zh/UserGuide/Query-Data/Select-Into.md        |   26 +-
 .../iotdb/flink/tsfile/TsFileOutputFormat.java     |    2 +-
 .../iotdb/it/env/cluster/MppCommonConfig.java      |    8 +-
 .../it/env/cluster/MppSharedCommonConfig.java      |   13 +-
 .../iotdb/it/env/remote/RemoteCommonConfig.java    |    7 +-
 .../org/apache/iotdb/itbase/env/CommonConfig.java  |    4 +-
 .../confignode/it/IoTDBSnapshotTransferIT.java     |    4 +-
 .../it/cluster/IoTDBClusterNodeErrorStartUpIT.java |   47 +
 .../it/cluster/IoTDBClusterNodeGetterIT.java       |    4 +-
 .../it/load/IoTDBConfigNodeSwitchLeaderIT.java     |    2 +-
 .../it/partition/IoTDBPartitionGetterIT.java       |    6 +-
 .../confignode/it/utils/ConfigNodeTestUtils.java   |    2 +-
 .../iotdb/db/it/IoTDBInsertMultiPartitionIT.java   |   71 +
 .../db/it/aggregation/IoTDBTagAggregationIT.java   |   55 +-
 .../IoTDBOrderByWithAlignByDeviceIT.java           |   54 +
 .../db/it/groupby/IoTDBGroupByConditionIT.java     |    2 +-
 .../iotdb/db/it/groupby/IoTDBGroupBySessionIT.java |   18 +-
 .../it/last/IoTDBLastQueryWithLimitOffsetIT.java   |  193 +
 .../IoTDBNoSelectExpressionAfterAnalyzedIT.java    |   93 +
 .../apache/iotdb/metrics/config/MetricConfig.java  |    7 +-
 .../iotdb/metrics/metricsets/disk/DiskMetrics.java |   56 +-
 .../micrometer/type/MicrometerAutoGauge.java       |    2 -
 .../resources/conf/iotdb-common.properties         |   26 +-
 .../src/assembly/resources/sbin/iotdb-common.sh    |    2 +-
 .../assembly/resources/sbin/start-standalone.sh    |    2 +-
 .../src/assembly/resources/sbin/stop-standalone.sh |    2 +-
 .../apache/iotdb/commons/conf/CommonConfig.java    |   10 +
 ...ConfigNodeRegionId.java => ConfigRegionId.java} |    6 +-
 .../iotdb/commons/consensus/ConsensusGroupId.java  |    8 +-
 .../commons/exception/ConfigurationException.java  |   27 +-
 .../iotdb/commons/service/StartupChecks.java       |   33 +-
 .../iotdb/commons/service/metric/enums/Metric.java |   14 +
 .../metric/enums/PerformanceOverviewMetrics.java   |  394 ++
 .../commons/utils/ThriftCommonsSerDeUtilsTest.java |    2 +-
 .../src/assembly/resources/sbin/rewrite-tsfile.sh  |    2 +-
 .../src/assembly/resources/sbin/remove-datanode.sh |    2 +-
 .../resources/tools/schema/print-schema-file.sh    |    2 +-
 .../resources/tools/schema/print-schema-log.sh     |    2 +-
 .../resources/tools/tsfile/print-iotdb-data-dir.sh |    2 +-
 .../resources/tools/tsfile/print-tsfile.sh         |    2 +-
 .../resources/tools/tsfile/settle-tsfile.sh        |    2 +-
 .../resources/tools/tsfile/split-tsfile-tool.sh    |    2 +-
 .../resources/tools/tsfile/validate-tsfile.sh      |    2 +-
 ...eventWindow.ftl => abstractVariationWindow.ftl} |   30 +-
 .../main/codegen/templates/eventWindowManager.ftl  |   51 -
 .../{evEventWindow.ftl => variationWindow.ftl}     |   16 +-
 ...indowManager.ftl => variationWindowManager.ftl} |   36 +-
 .../org/apache/iotdb/db/auth/AuthorityChecker.java |    7 +-
 .../iotdb/db/auth/ClusterAuthorityFetcher.java     |   14 +-
 .../apache/iotdb/db/client/ConfigNodeClient.java   |   22 +-
 .../iotdb/db/client/ConfigNodeClientManager.java   |    8 +-
 .../org/apache/iotdb/db/client/ConfigNodeInfo.java |    8 +-
 .../iotdb/db/client/DataNodeClientPoolFactory.java |   14 +-
 .../apache/iotdb/db/conf/DataNodeStartupCheck.java |   69 +
 .../java/org/apache/iotdb/db/conf/IoTDBConfig.java |    9 +-
 .../org/apache/iotdb/db/conf/IoTDBDescriptor.java  |   53 +-
 .../org/apache/iotdb/db/conf/IoTDBStartCheck.java  |    5 +-
 .../db/consensus/DataRegionConsensusImpl.java      |    2 -
 .../db/consensus/SchemaRegionConsensusImpl.java    |    2 -
 .../statemachine/DataRegionStateMachine.java       |   14 +-
 .../IoTConsensusDataRegionStateMachine.java        |    8 +-
 .../execute/task/CrossSpaceCompactionTask.java     |    7 +-
 .../execute/task/InnerSpaceCompactionTask.java     |  264 +-
 .../execute/utils/MultiTsFileDeviceIterator.java   |    7 +
 .../readchunk/AlignedSeriesCompactionExecutor.java |    3 +-
 .../compaction/schedule/CompactionScheduler.java   |  100 +-
 .../compaction/schedule/CompactionTaskManager.java |    3 +-
 .../impl/RewriteCrossSpaceCompactionSelector.java  |    5 +-
 .../impl/SizeTieredCompactionSelector.java         |   27 +-
 .../utils/CrossSpaceCompactionCandidate.java       |   44 +-
 .../iotdb/db/engine/storagegroup/DataRegion.java   |  129 +-
 .../engine/storagegroup/TimePartitionManager.java  |    9 +-
 .../db/engine/storagegroup/TsFileProcessor.java    |   78 +-
 .../db/metadata/metric/SchemaEngineMemMetric.java  |   16 +-
 .../db/metadata/metric/SchemaRegionMemMetric.java  |   34 +
 .../iotdb/db/metadata/mtree/ConfigMTree.java       |   37 +-
 .../db/metadata/mtree/MTreeBelowSGCachedImpl.java  |   67 +-
 .../db/metadata/mtree/MTreeBelowSGMemoryImpl.java  |   15 +-
 .../mtree/snapshot/MemMTreeSnapshotUtil.java       |   13 +-
 .../db/metadata/mtree/store/MemMTreeStore.java     |    4 +-
 .../mtree/store/StampedWriterPreferredLock.java    |   21 +-
 .../mtree/store/disk/cache/CacheMemoryManager.java |  119 +-
 .../metadata/rescon/ISchemaEngineStatistics.java   |    2 +
 .../metadata/rescon/ISchemaRegionStatistics.java   |    4 +
 .../metadata/rescon/MemSchemaEngineStatistics.java |   26 +-
 .../metadata/rescon/MemSchemaRegionStatistics.java |   36 +-
 .../schemaregion/SchemaRegionMemoryImpl.java       |    5 +
 .../schemaregion/SchemaRegionSchemaFileImpl.java   |   90 +
 .../metadata/template/ClusterTemplateManager.java  |   23 +-
 .../iotdb/db/metadata/template/Template.java       |    4 +
 .../iotdb/db/mpp/aggregation/Accumulator.java      |   16 +-
 .../iotdb/db/mpp/aggregation/Aggregator.java       |   35 +-
 .../iotdb/db/mpp/aggregation/AvgAccumulator.java   |   90 +-
 .../iotdb/db/mpp/aggregation/CountAccumulator.java |   23 +-
 .../db/mpp/aggregation/CountIfAccumulator.java     |   25 +-
 .../db/mpp/aggregation/ExtremeAccumulator.java     |   90 +-
 .../db/mpp/aggregation/FirstValueAccumulator.java  |  150 +-
 .../mpp/aggregation/FirstValueDescAccumulator.java |  110 +-
 .../db/mpp/aggregation/LastValueAccumulator.java   |  132 +-
 .../mpp/aggregation/LastValueDescAccumulator.java  |  122 +-
 .../db/mpp/aggregation/MaxTimeAccumulator.java     |   22 +-
 .../db/mpp/aggregation/MaxTimeDescAccumulator.java |   25 +-
 .../db/mpp/aggregation/MaxValueAccumulator.java    |   94 +-
 .../db/mpp/aggregation/MinTimeAccumulator.java     |   25 +-
 .../db/mpp/aggregation/MinTimeDescAccumulator.java |   20 +-
 .../db/mpp/aggregation/MinValueAccumulator.java    |   93 +-
 .../iotdb/db/mpp/aggregation/SumAccumulator.java   |   92 +-
 .../slidingwindow/SlidingWindowAggregator.java     |    5 +-
 .../db/mpp/common/header/ColumnHeaderConstant.java |    2 +-
 .../iotdb/db/mpp/execution/driver/DataDriver.java  |    6 +
 .../iotdb/db/mpp/execution/driver/Driver.java      |   13 +-
 .../execution/exchange/MPPDataExchangeManager.java |   67 +-
 .../mpp/execution/exchange/SharedTsBlockQueue.java |    6 +-
 .../db/mpp/execution/exchange/sink/ISink.java      |    4 +
 .../mpp/execution/exchange/sink/ISinkHandle.java   |    3 +
 .../execution/exchange/sink/LocalSinkChannel.java  |    7 +
 .../execution/exchange/sink/ShuffleSinkHandle.java |   44 +-
 .../mpp/execution/exchange/sink/SinkChannel.java   |   11 +-
 .../execution/exchange/source/SourceHandle.java    |   59 +-
 .../execution/executor/RegionWriteExecutor.java    |  178 +-
 .../fragment/FragmentInstanceContext.java          |    8 +-
 .../fragment/FragmentInstanceExecution.java        |    4 +
 .../fragment/FragmentInstanceManager.java          |   21 +-
 .../db/mpp/execution/operator/AggregationUtil.java |   18 +-
 .../iotdb/db/mpp/execution/operator/Operator.java  |   10 +-
 .../process/AbstractConsumeAllOperator.java        |    4 +-
 .../operator/process/AbstractIntoOperator.java     |    7 +-
 .../operator/process/AggregationOperator.java      |    8 +-
 .../operator/process/DeviceMergeOperator.java      |    6 +-
 .../operator/process/DeviceViewOperator.java       |   17 +-
 .../execution/operator/process/FillOperator.java   |    6 +-
 .../operator/process/FilterAndProjectOperator.java |    6 +-
 .../execution/operator/process/LimitOperator.java  |    6 +-
 .../operator/process/LinearFillOperator.java       |    8 +-
 .../operator/process/MergeSortOperator.java        |   17 +-
 .../execution/operator/process/OffsetOperator.java |    6 +-
 .../process/RawDataAggregationOperator.java        |   57 +-
 .../operator/process/SingleDeviceViewOperator.java |    6 +-
 .../process/SingleInputAggregationOperator.java    |    6 +-
 .../process/SlidingWindowAggregationOperator.java  |    9 +-
 .../execution/operator/process/SortOperator.java   |    6 +-
 .../operator/process/TagAggregationOperator.java   |    8 +-
 .../operator/process/TransformOperator.java        |   16 +-
 .../process/join/HorizontallyConcatOperator.java   |    8 +-
 .../process/join/RowBasedTimeJoinOperator.java     |   13 +-
 .../operator/process/join/TimeJoinOperator.java    |    9 +-
 .../process/join/merge/AscTimeComparator.java      |    5 +
 .../process/join/merge/DescTimeComparator.java     |    5 +
 .../process/join/merge/MergeSortComparator.java    |   28 +-
 .../process/join/merge/TimeComparator.java         |    3 +
 .../last/AbstractUpdateLastCacheOperator.java      |    4 +-
 .../last/AlignedUpdateLastCacheOperator.java       |    2 +-
 .../process/last/LastQueryCollectOperator.java     |    6 +-
 .../process/last/LastQueryMergeOperator.java       |   12 +-
 .../operator/process/last/LastQueryOperator.java   |    7 +-
 .../process/last/LastQuerySortOperator.java        |    7 +-
 .../process/last/UpdateLastCacheOperator.java      |    2 +-
 .../schema/CountGroupByLevelMergeOperator.java     |    6 +-
 .../schema/CountGroupByLevelScanOperator.java      |    6 +-
 .../operator/schema/CountMergeOperator.java        |    7 +-
 .../schema/NodeManageMemoryMergeOperator.java      |    6 +-
 .../operator/schema/NodePathsConvertOperator.java  |    6 +-
 .../operator/schema/NodePathsCountOperator.java    |    6 +-
 .../operator/schema/SchemaCountOperator.java       |    6 +-
 .../operator/schema/SchemaFetchMergeOperator.java  |    6 +-
 .../operator/schema/SchemaFetchScanOperator.java   |    6 +-
 .../operator/schema/SchemaQueryMergeOperator.java  |    6 +-
 .../schema/SchemaQueryOrderByHeatOperator.java     |    6 +-
 .../operator/schema/SchemaQueryScanOperator.java   |    6 +-
 .../operator/sink/IdentitySinkOperator.java        |   35 +-
 .../operator/sink/ShuffleHelperOperator.java       |   39 +-
 .../AbstractSeriesAggregationScanOperator.java     |    8 +-
 .../operator/source/AlignedSeriesScanOperator.java |    6 +-
 .../operator/source/ExchangeOperator.java          |    6 +-
 .../operator/source/LastCacheScanOperator.java     |    6 +-
 .../operator/source/SeriesScanOperator.java        |    6 +-
 .../operator/source/ShowQueriesOperator.java       |    6 +-
 ...entWindow.java => AbstractVariationWindow.java} |   40 +-
 .../{SeriesWindow.java => ConditionWindow.java}    |   11 +-
 ...dowManager.java => ConditionWindowManager.java} |   63 +-
 ...arameter.java => ConditionWindowParameter.java} |    6 +-
 .../db/mpp/execution/operator/window/IWindow.java  |    2 +-
 .../execution/operator/window/IWindowManager.java  |   52 +-
 .../execution/operator/window/SessionWindow.java   |    5 +-
 .../operator/window/SessionWindowManager.java      |   33 +-
 .../operator/window/TimeWindowManager.java         |   24 +-
 ...dowManager.java => VariationWindowManager.java} |   48 +-
 ...arameter.java => VariationWindowParameter.java} |    6 +-
 .../operator/window/WindowManagerFactory.java      |   40 +-
 .../mpp/execution/operator/window/WindowType.java  |    4 +-
 .../db/mpp/execution/schedule/DriverScheduler.java |    2 +-
 .../db/mpp/metric/PerformanceOverviewMetrics.java  |  142 -
 .../metric/PerformanceOverviewMetricsManager.java  |  177 -
 .../iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java  |   68 +-
 .../mpp/plan/analyze/ClusterPartitionFetcher.java  |   18 +-
 .../db/mpp/plan/analyze/cache/PartitionCache.java  |   10 +-
 .../db/mpp/plan/execution/QueryExecution.java      |   13 +-
 .../config/executor/ClusterConfigTaskExecutor.java |   99 +-
 .../config/metadata/ShowVariablesTask.java         |    4 +-
 .../mpp/plan/optimization/LimitOffsetPushDown.java |    3 +-
 .../iotdb/db/mpp/plan/parser/ASTVisitor.java       |   20 +-
 .../db/mpp/plan/parser/StatementGenerator.java     |   55 +-
 .../db/mpp/plan/planner/LogicalPlanVisitor.java    |    2 +
 .../db/mpp/plan/planner/OperatorTreeGenerator.java |   38 +-
 .../db/mpp/plan/planner/SubPlanTypeExtractor.java  |   16 +-
 .../planner/distribution/DistributionPlanner.java  |   21 +
 .../db/mpp/plan/planner/plan/node/PlanNode.java    |   10 -
 .../metedata/write/CreateMultiTimeSeriesNode.java  |    6 +-
 .../plan/node/metedata/write/MeasurementGroup.java |   36 +-
 .../planner/plan/node/process/GroupByTagNode.java  |   27 +
 ...rameter.java => GroupByConditionParameter.java} |   14 +-
 .../planner/plan/parameter/GroupByParameter.java   |    6 +-
 .../plan/parameter/GroupByVariationParameter.java  |    2 +-
 .../db/mpp/plan/scheduler/AsyncPlanNodeSender.java |   50 +-
 .../plan/scheduler/AsyncSendPlanNodeHandler.java   |   30 +-
 .../scheduler/FragmentInstanceDispatcherImpl.java  |   38 +-
 ...mponent.java => GroupByConditionComponent.java} |    6 +-
 .../component/GroupByVariationComponent.java       |    2 +-
 .../db/mpp/plan/statement/crud/QueryStatement.java |   13 +-
 .../db/mpp/transformation/api/YieldableReader.java |    6 +-
 .../transformation/dag/input/IUDFInputDataSet.java |    2 +-
 .../dag/input/QueryDataSetInputLayer.java          |    4 +-
 .../dag/input/TsBlockInputDataSet.java             |    2 +-
 .../MultiInputColumnIntermediateLayer.java         |   10 +-
 ...InputColumnMultiReferenceIntermediateLayer.java |   12 +-
 ...nputColumnSingleReferenceIntermediateLayer.java |   10 +-
 .../dag/transformer/Transformer.java               |    4 +-
 .../dag/transformer/binary/BinaryTransformer.java  |    4 +-
 .../transformer/binary/LogicBinaryTransformer.java |    2 +-
 .../multi/MappableUDFQueryRowTransformer.java      |    2 +-
 .../transformer/multi/UDFQueryRowTransformer.java  |    2 +-
 .../multi/UDFQueryRowWindowTransformer.java        |    2 +-
 .../multi/UniversalUDFQueryTransformer.java        |    4 +-
 .../transformer/ternary/TernaryTransformer.java    |    4 +-
 .../transformer/unary/DiffFunctionTransformer.java |    2 +-
 .../dag/transformer/unary/IsNullTransformer.java   |    2 +-
 .../dag/transformer/unary/UnaryTransformer.java    |    2 +-
 .../db/mpp/transformation/dag/udf/UDTFContext.java |    3 +
 .../transformation/dag/util/LayerCacheUtils.java   |   10 +-
 .../org/apache/iotdb/db/rescon/SystemInfo.java     |   16 +-
 .../java/org/apache/iotdb/db/service/DataNode.java |   54 +-
 .../db/service/DataNodeServerCommandLine.java      |    6 +-
 .../apache/iotdb/db/service/IoTDBShutdownHook.java |    3 +-
 .../iotdb/db/service/RegionMigrateService.java     |    2 +-
 .../db/service/metrics/DataNodeMetricsHelper.java  |    4 +
 .../metrics/IoTDBInternalLocalReporter.java        |   37 +
 .../db/sync/common/ClusterSyncInfoFetcher.java     |   12 +-
 .../db/trigger/executor/TriggerFireVisitor.java    |    8 +-
 .../trigger/service/TriggerInformationUpdater.java |    8 +-
 .../engine/compaction/AbstractCompactionTest.java  |    7 +-
 .../compaction/FastAlignedCrossCompactionTest.java |  139 +-
 .../FastNonAlignedCrossCompactionTest.java         |  138 +-
 .../db/engine/compaction/cross/MergeTest.java      |    1 +
 .../cross/RewriteCompactionFileSelectorTest.java   |   47 +-
 .../inner/InnerCompactionSchedulerTest.java        |    6 +-
 .../utils/MultiTsFileDeviceIteratorTest.java       |  901 +++
 .../iotdb/db/metadata/mtree/ConfigMTreeTest.java   |    3 +
 .../mtree/lock/StampedWriterPreferredLockTest.java |   16 +-
 .../schemaRegion/SchemaStatisticsTest.java         |  106 +
 .../iotdb/db/mpp/aggregation/AccumulatorTest.java  |   55 +-
 .../iotdb/db/mpp/execution/exchange/StubSink.java  |    5 +
 .../operator/AggregationOperatorTest.java          |   26 +-
 .../AlignedSeriesAggregationScanOperatorTest.java  |   38 +-
 .../operator/AlignedSeriesScanOperatorTest.java    |    6 +-
 .../operator/DeviceMergeOperatorTest.java          |  565 --
 .../execution/operator/DeviceViewOperatorTest.java |    3 +-
 .../mpp/execution/operator/FillOperatorTest.java   |   16 +-
 .../operator/HorizontallyConcatOperatorTest.java   |    2 +-
 .../operator/LastQueryMergeOperatorTest.java       |   38 +-
 .../execution/operator/LastQueryOperatorTest.java  |    4 +-
 .../operator/LastQuerySortOperatorTest.java        |    5 +-
 .../mpp/execution/operator/LimitOperatorTest.java  |    2 +-
 .../execution/operator/LinearFillOperatorTest.java |   56 +-
 .../execution/operator/MergeSortOperatorTest.java  |  134 +-
 .../mpp/execution/operator/OffsetOperatorTest.java |    6 +-
 .../operator/RawDataAggregationOperatorTest.java   |   69 +-
 .../SeriesAggregationScanOperatorTest.java         |   65 +-
 .../execution/operator/SeriesScanOperatorTest.java |    2 +-
 .../operator/SingleDeviceViewOperatorTest.java     |    3 +-
 .../SlidingWindowAggregationOperatorTest.java      |    3 +-
 .../execution/operator/TimeJoinOperatorTest.java   |    6 +-
 .../operator/UpdateLastCacheOperatorTest.java      |    6 +-
 .../operator/schema/SchemaCountOperatorTest.java   |    4 +-
 .../schema/SchemaQueryScanOperatorTest.java        |    4 +-
 .../db/mpp/plan/plan/PipelineBuilderTest.java      |   96 +-
 .../plan/node/process/GroupByTagNodeSerdeTest.java |    2 +-
 server/src/test/resources/start-sync-test.sh       |    2 +-
 server/src/test/resources/stop-sync-test.sh        |    2 +-
 .../java/org/apache/iotdb/rpc/IoTDBRpcDataSet.java |    1 +
 .../java/org/apache/iotdb/rpc/TSStatusCode.java    |    2 +-
 thrift-commons/src/main/thrift/common.thrift       |    2 +-
 .../src/main/thrift/confignode.thrift              |    6 +-
 thrift/src/main/thrift/datanode.thrift             |   12 +-
 tools/check_sigs.sh                                |    2 +-
 tools/common.sh                                    |    2 +-
 tools/download_staged_release.sh                   |    2 +-
 .../tsfile/write/record/datapoint/DataPoint.java   |    2 +-
 .../tsfile/write/schema/MeasurementSchema.java     |    8 +
 388 files changed, 14489 insertions(+), 9897 deletions(-)


[iotdb] 04/06: fix bug

Posted by hu...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

hui pushed a commit to branch lmh/fixLimitPushDownBug1.1
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 8336670398494cb54afe218c00cddc1f72b34704
Author: Minghui Liu <li...@foxmail.com>
AuthorDate: Thu Mar 23 15:52:36 2023 +0800

    fix bug
---
 .../iotdb/tsfile/read/reader/series/PaginationController.java     | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/series/PaginationController.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/series/PaginationController.java
index 5d0f41b970..9b7b0e6435 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/series/PaginationController.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/series/PaginationController.java
@@ -83,13 +83,17 @@ public class PaginationController {
   }
 
   public TsBlock applyTsBlock(TsBlock resultTsBlock) {
+    if (!enable) {
+      return resultTsBlock;
+    }
+
     int fromIndex = 0, length = resultTsBlock.getPositionCount();
-    if (hasCurOffset()) {
+    if (curOffset > 0) {
       fromIndex = (int) Math.min(curOffset, length);
       length -= fromIndex;
       consumeOffset(fromIndex);
     }
-    if (hasCurLimit()) {
+    if (hasLimit && curLimit > 0) {
       length = (int) Math.min(curLimit, length);
       consumeLimit(length);
     }


[iotdb] 03/06: fix bug

Posted by hu...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

hui pushed a commit to branch lmh/fixLimitPushDownBug1.1
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit d9c62d810a5a67466e98716241f5d85a0dbc4ab4
Author: Minghui Liu <li...@foxmail.com>
AuthorDate: Thu Mar 23 09:49:41 2023 +0800

    fix bug
---
 .../apache/iotdb/db/mpp/execution/operator/source/SeriesScanUtil.java  | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/source/SeriesScanUtil.java b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/source/SeriesScanUtil.java
index be9c590aa5..635e7f873c 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/source/SeriesScanUtil.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/source/SeriesScanUtil.java
@@ -1149,8 +1149,9 @@ public class SeriesScanUtil {
 
           paginationController.setEnable(isSeq);
           tsBlock = paginationController.applyTsBlock(tsBlock);
-          paginationController.setEnable(true);
         }
+
+        paginationController.setEnable(true);
         return tsBlock;
       } finally {
         QUERY_METRICS.recordSeriesScanCost(


[iotdb] 02/06: fix bug & add UT

Posted by hu...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

hui pushed a commit to branch lmh/fixLimitPushDownBug1.1
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit d3307a41039ea50544f2e3995e7522e3bb191002
Author: liuminghui233 <54...@qq.com>
AuthorDate: Wed Mar 22 22:56:02 2023 +0800

    fix bug & add UT
---
 .../execution/operator/source/SeriesScanUtil.java  | 32 ++++-----
 .../series/SeriesScanLimitOffsetPushDownTest.java  | 83 ++++++++++++++++++++--
 2 files changed, 88 insertions(+), 27 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/source/SeriesScanUtil.java b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/source/SeriesScanUtil.java
index 0dbd911adf..be9c590aa5 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/source/SeriesScanUtil.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/source/SeriesScanUtil.java
@@ -637,7 +637,7 @@ public class SeriesScanUtil {
         firstPageReader.setFilter(queryFilter);
       }
       firstPageReader.setLimitOffset(paginationController);
-      TsBlock tsBlock = firstPageReader.getAllSatisfiedPageData(orderUtils.getAscending());
+      TsBlock tsBlock = firstPageReader.getAllSatisfiedPageData(orderUtils.getAscending(), true);
       firstPageReader = null;
 
       return tsBlock;
@@ -719,12 +719,7 @@ public class SeriesScanUtil {
                   timeValuePair.getTimestamp(), firstPageReader.getStatistics())) {
                 // current timeValuePair is overlapped with firstPageReader, add it to merged reader
                 // and update endTime to the max end time
-                mergeReader.addReader(
-                    getPointReader(
-                        firstPageReader.getAllSatisfiedPageData(orderUtils.getAscending())),
-                    firstPageReader.version,
-                    orderUtils.getOverlapCheckTime(firstPageReader.getStatistics()),
-                    context);
+                putPageReaderToMergeReader(firstPageReader);
                 currentPageEndPointTime =
                     updateEndPointTime(currentPageEndPointTime, firstPageReader);
                 firstPageReader = null;
@@ -745,11 +740,7 @@ public class SeriesScanUtil {
               } else if (orderUtils.isOverlapped(
                   timeValuePair.getTimestamp(), seqPageReaders.get(0).getStatistics())) {
                 VersionPageReader pageReader = seqPageReaders.remove(0);
-                mergeReader.addReader(
-                    getPointReader(pageReader.getAllSatisfiedPageData(orderUtils.getAscending())),
-                    pageReader.version,
-                    orderUtils.getOverlapCheckTime(pageReader.getStatistics()),
-                    context);
+                putPageReaderToMergeReader(pageReader);
                 currentPageEndPointTime = updateEndPointTime(currentPageEndPointTime, pageReader);
               }
             }
@@ -945,7 +936,7 @@ public class SeriesScanUtil {
 
   private void putPageReaderToMergeReader(VersionPageReader pageReader) throws IOException {
     mergeReader.addReader(
-        getPointReader(pageReader.getAllSatisfiedPageData(orderUtils.getAscending())),
+        getPointReader(pageReader.getAllSatisfiedPageData(orderUtils.getAscending(), false)),
         pageReader.version,
         orderUtils.getOverlapCheckTime(pageReader.getStatistics()),
         context);
@@ -1147,19 +1138,20 @@ public class SeriesScanUtil {
       return ((IAlignedPageReader) data).getTimeStatistics();
     }
 
-    TsBlock getAllSatisfiedPageData(boolean ascending) throws IOException {
+    TsBlock getAllSatisfiedPageData(boolean ascending, boolean isSeq) throws IOException {
       long startTime = System.nanoTime();
       try {
-        paginationController.setEnable(ascending);
+        paginationController.setEnable(isSeq && ascending);
         TsBlock tsBlock = data.getAllSatisfiedData();
-        paginationController.setEnable(true);
 
-        if (ascending) {
-          return tsBlock;
-        } else {
+        if (!ascending) {
           tsBlock.reverse();
-          return paginationController.applyTsBlock(tsBlock);
+
+          paginationController.setEnable(isSeq);
+          tsBlock = paginationController.applyTsBlock(tsBlock);
+          paginationController.setEnable(true);
         }
+        return tsBlock;
       } finally {
         QUERY_METRICS.recordSeriesScanCost(
             isAligned
diff --git a/server/src/test/java/org/apache/iotdb/db/query/reader/series/SeriesScanLimitOffsetPushDownTest.java b/server/src/test/java/org/apache/iotdb/db/query/reader/series/SeriesScanLimitOffsetPushDownTest.java
index 5d58b164fe..e41a10084d 100644
--- a/server/src/test/java/org/apache/iotdb/db/query/reader/series/SeriesScanLimitOffsetPushDownTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/query/reader/series/SeriesScanLimitOffsetPushDownTest.java
@@ -230,7 +230,8 @@ public class SeriesScanLimitOffsetPushDownTest {
     EnvironmentUtils.cleanAllDir();
   }
 
-  private SeriesScanUtil getSeriesScanUtil(long limit, long offset) throws IllegalPathException {
+  private SeriesScanUtil getSeriesScanUtil(long limit, long offset, Ordering scanOrder)
+      throws IllegalPathException {
     MeasurementPath scanPath = new MeasurementPath(TEST_PATH, TSDataType.INT32);
 
     SeriesScanOptions.Builder scanOptionsBuilder = new SeriesScanOptions.Builder();
@@ -240,7 +241,7 @@ public class SeriesScanLimitOffsetPushDownTest {
     SeriesScanUtil seriesScanUtil =
         new SeriesScanUtil(
             scanPath,
-            Ordering.ASC,
+            scanOrder,
             scanOptionsBuilder.build(),
             EnvironmentUtils.TEST_QUERY_FI_CONTEXT);
     seriesScanUtil.initQueryDataSource(new QueryDataSource(seqResources, unSeqResources));
@@ -249,7 +250,7 @@ public class SeriesScanLimitOffsetPushDownTest {
 
   @Test
   public void testSkipFile() throws IllegalPathException, IOException {
-    SeriesScanUtil seriesScanUtil = getSeriesScanUtil(5, 10);
+    SeriesScanUtil seriesScanUtil = getSeriesScanUtil(5, 10, Ordering.ASC);
 
     Assert.assertTrue(seriesScanUtil.hasNextFile());
     Assert.assertTrue(seriesScanUtil.hasNextChunk());
@@ -269,7 +270,7 @@ public class SeriesScanLimitOffsetPushDownTest {
 
   @Test
   public void testSkipChunk() throws IllegalPathException, IOException {
-    SeriesScanUtil seriesScanUtil = getSeriesScanUtil(5, 20);
+    SeriesScanUtil seriesScanUtil = getSeriesScanUtil(5, 20, Ordering.ASC);
 
     Assert.assertTrue(seriesScanUtil.hasNextFile());
     Assert.assertTrue(seriesScanUtil.hasNextChunk());
@@ -289,7 +290,7 @@ public class SeriesScanLimitOffsetPushDownTest {
 
   @Test
   public void testSkipPage() throws IllegalPathException, IOException {
-    SeriesScanUtil seriesScanUtil = getSeriesScanUtil(5, 30);
+    SeriesScanUtil seriesScanUtil = getSeriesScanUtil(5, 30, Ordering.ASC);
 
     Assert.assertTrue(seriesScanUtil.hasNextFile());
     Assert.assertTrue(seriesScanUtil.hasNextChunk());
@@ -309,7 +310,7 @@ public class SeriesScanLimitOffsetPushDownTest {
 
   @Test
   public void testSkipPoint1() throws IllegalPathException, IOException {
-    SeriesScanUtil seriesScanUtil = getSeriesScanUtil(10, 45);
+    SeriesScanUtil seriesScanUtil = getSeriesScanUtil(10, 45, Ordering.ASC);
 
     Assert.assertTrue(seriesScanUtil.hasNextFile());
     Assert.assertTrue(seriesScanUtil.hasNextChunk());
@@ -341,7 +342,7 @@ public class SeriesScanLimitOffsetPushDownTest {
 
   @Test
   public void testSkipPoint2() throws IllegalPathException, IOException {
-    SeriesScanUtil seriesScanUtil = getSeriesScanUtil(10, 55);
+    SeriesScanUtil seriesScanUtil = getSeriesScanUtil(10, 55, Ordering.ASC);
 
     Assert.assertTrue(seriesScanUtil.hasNextFile());
     Assert.assertTrue(seriesScanUtil.hasNextChunk());
@@ -365,4 +366,72 @@ public class SeriesScanLimitOffsetPushDownTest {
     Assert.assertFalse(seriesScanUtil.hasNextChunk());
     Assert.assertFalse(seriesScanUtil.hasNextFile());
   }
+
+  @Test
+  public void testSkipPointDesc1() throws IllegalPathException, IOException {
+    SeriesScanUtil seriesScanUtil = getSeriesScanUtil(10, 5, Ordering.DESC);
+
+    Assert.assertTrue(seriesScanUtil.hasNextFile());
+    Assert.assertTrue(seriesScanUtil.hasNextChunk());
+    Assert.assertTrue(seriesScanUtil.hasNextPage());
+
+    TsBlock tsBlock = seriesScanUtil.nextPage();
+    Assert.assertEquals(5, tsBlock.getPositionCount());
+
+    long expectedTime = 64;
+    for (int i = 0, size = tsBlock.getPositionCount(); i < size; i++) {
+      Assert.assertEquals(expectedTime--, tsBlock.getTimeByIndex(i));
+    }
+
+    Assert.assertTrue(seriesScanUtil.hasNextPage());
+    tsBlock = seriesScanUtil.nextPage();
+    Assert.assertEquals(5, tsBlock.getPositionCount());
+
+    expectedTime = 59;
+    for (int i = 0, size = tsBlock.getPositionCount(); i < size; i++) {
+      Assert.assertEquals(expectedTime--, tsBlock.getTimeByIndex(i));
+    }
+
+    Assert.assertFalse(seriesScanUtil.hasNextPage());
+    Assert.assertFalse(seriesScanUtil.hasNextChunk());
+    Assert.assertFalse(seriesScanUtil.hasNextFile());
+  }
+
+  @Test
+  public void testSkipPointDesc2() throws IllegalPathException, IOException {
+    SeriesScanUtil seriesScanUtil = getSeriesScanUtil(10, 25, Ordering.DESC);
+
+    Assert.assertTrue(seriesScanUtil.hasNextFile());
+    Assert.assertTrue(seriesScanUtil.hasNextChunk());
+    Assert.assertTrue(seriesScanUtil.hasNextPage());
+
+    TsBlock tsBlock = seriesScanUtil.nextPage();
+    Assert.assertEquals(0, tsBlock.getPositionCount());
+
+    Assert.assertFalse(seriesScanUtil.hasNextPage());
+
+    Assert.assertTrue(seriesScanUtil.hasNextChunk());
+    Assert.assertTrue(seriesScanUtil.hasNextPage());
+
+    tsBlock = seriesScanUtil.nextPage();
+    Assert.assertEquals(5, tsBlock.getPositionCount());
+
+    long expectedTime = 44;
+    for (int i = 0, size = tsBlock.getPositionCount(); i < size; i++) {
+      Assert.assertEquals(expectedTime--, tsBlock.getTimeByIndex(i));
+    }
+
+    Assert.assertTrue(seriesScanUtil.hasNextPage());
+    tsBlock = seriesScanUtil.nextPage();
+    Assert.assertEquals(5, tsBlock.getPositionCount());
+
+    expectedTime = 39;
+    for (int i = 0, size = tsBlock.getPositionCount(); i < size; i++) {
+      Assert.assertEquals(expectedTime--, tsBlock.getTimeByIndex(i));
+    }
+
+    Assert.assertFalse(seriesScanUtil.hasNextPage());
+    Assert.assertFalse(seriesScanUtil.hasNextChunk());
+    Assert.assertFalse(seriesScanUtil.hasNextFile());
+  }
 }