This is an automated email from the ASF dual-hosted git repository.
JackieTien97 pushed a commit to branch dev/1.3
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/dev/1.3 by this push:
new c1050081785 [To dev/1.3] Support debug for query (#18208)
c1050081785 is described below
commit c105008178570988f7298b9f88d7afec9c80152a
Author: Weihao Li <[email protected]>
AuthorDate: Wed Jul 15 19:10:10 2026 +0800
[To dev/1.3] Support debug for query (#18208)
---
.../it/env/cluster/node/AbstractNodeWrapper.java | 19 ++++
.../assembly/resources/conf/logback-datanode.xml | 2 +-
.../protocol/legacy/loader/DeletionLoader.java | 3 +-
.../protocol/legacy/loader/TsFileLoader.java | 3 +-
.../protocol/thrift/IoTDBDataNodeReceiver.java | 3 +-
.../protocol/thrift/impl/ClientRPCServiceImpl.java | 25 ++++--
.../impl/DataNodeInternalRPCServiceImpl.java | 1 +
.../db/queryengine/common/MPPQueryContext.java | 10 +++
.../fragment/FakedFragmentInstanceContext.java | 2 +-
.../fragment/FragmentInstanceContext.java | 47 +++++++---
.../fragment/FragmentInstanceManager.java | 8 +-
.../execution/fragment/QueryContext.java | 10 ++-
.../iotdb/db/queryengine/plan/Coordinator.java | 100 ++++++++++++++++-----
.../analyze/schema/AutoCreateSchemaExecutor.java | 1 +
.../analyze/schema/ClusterSchemaFetchExecutor.java | 3 +-
.../plan/execution/IQueryExecution.java | 2 +
.../queryengine/plan/execution/QueryExecution.java | 5 ++
.../plan/execution/config/ConfigExecution.java | 5 ++
.../config/executor/ClusterConfigTaskExecutor.java | 1 +
.../SimpleFragmentParallelPlanner.java | 1 +
.../distribution/WriteFragmentParallelPlanner.java | 3 +-
.../plan/planner/plan/FragmentInstance.java | 29 ++++--
.../plan/scheduler/load/LoadTsFileScheduler.java | 6 +-
.../load/active/ActiveLoadTsFileLoader.java | 3 +-
.../converter/LoadTsFileDataTypeConverter.java | 1 +
.../rest/v1/handler/QueryDataSetHandlerTest.java | 5 ++
.../execution/operator/MergeSortOperatorTest.java | 5 ++
.../plan/planner/FragmentInstanceSerdeTest.java | 6 +-
.../load/LoadTsFileDispatcherImplTest.java | 2 +-
.../memtable/MemChunkDeserializeTest.java | 4 +-
.../dataregion/memtable/PrimitiveMemTableTest.java | 28 +++---
.../reader/chunk/MemAlignedChunkLoaderTest.java | 2 +-
.../read/reader/chunk/MemChunkLoaderTest.java | 12 +--
.../wal/recover/file/TsFilePlanRedoerTest.java | 21 +++--
.../apache/iotdb/db/utils/EnvironmentUtils.java | 4 +-
35 files changed, 282 insertions(+), 100 deletions(-)
diff --git
a/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/node/AbstractNodeWrapper.java
b/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/node/AbstractNodeWrapper.java
index 6c8f2717e71..afad120e94c 100644
---
a/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/node/AbstractNodeWrapper.java
+++
b/integration-test/src/main/java/org/apache/iotdb/it/env/cluster/node/AbstractNodeWrapper.java
@@ -56,6 +56,7 @@ import java.nio.file.NoSuchFileException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
+import java.nio.file.StandardOpenOption;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
@@ -764,4 +765,22 @@ public abstract class AbstractNodeWrapper implements
BaseNodeWrapper {
public Process getInstance() {
return instance;
}
+
+ public int[] getPortList() {
+ return portList;
+ }
+
+ public void clearLogContent() throws IOException {
+ Files.newOutputStream(Paths.get(getLogPath()),
StandardOpenOption.TRUNCATE_EXISTING).close();
+ }
+
+ public boolean logContains(String content) throws IOException {
+ List<String> lines = Files.readAllLines(Paths.get(getLogPath()),
StandardCharsets.UTF_8);
+ for (String line : lines) {
+ if (line.contains(content)) {
+ return true;
+ }
+ }
+ return false;
+ }
}
diff --git
a/iotdb-core/datanode/src/assembly/resources/conf/logback-datanode.xml
b/iotdb-core/datanode/src/assembly/resources/conf/logback-datanode.xml
index e827a7cbef2..a3a59d494ef 100644
--- a/iotdb-core/datanode/src/assembly/resources/conf/logback-datanode.xml
+++ b/iotdb-core/datanode/src/assembly/resources/conf/logback-datanode.xml
@@ -155,7 +155,7 @@
</rollingPolicy>
<append>true</append>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
- <pattern>%d [%t] %-5p %C{25}:%L - %m %n</pattern>
+ <pattern>%d [%t] %C{25}:%L - %m %n</pattern>
<charset>utf-8</charset>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/legacy/loader/DeletionLoader.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/legacy/loader/DeletionLoader.java
index 1c8771e218c..2d2fd3eec12 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/legacy/loader/DeletionLoader.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/legacy/loader/DeletionLoader.java
@@ -75,7 +75,8 @@ public class DeletionLoader implements ILoader {
PARTITION_FETCHER,
SCHEMA_FETCHER,
IoTDBDescriptor.getInstance().getConfig().getQueryTimeoutThreshold(),
- false);
+ false,
+ statement.isDebug());
if (result.status.code != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
LOGGER.error("Delete {} error, statement: {}.", deletion, statement);
LOGGER.error("Delete result status : {}.", result.status);
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/legacy/loader/TsFileLoader.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/legacy/loader/TsFileLoader.java
index 34028029de3..80b5f834f88 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/legacy/loader/TsFileLoader.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/legacy/loader/TsFileLoader.java
@@ -71,7 +71,8 @@ public class TsFileLoader implements ILoader {
PARTITION_FETCHER,
SCHEMA_FETCHER,
IoTDBDescriptor.getInstance().getConfig().getQueryTimeoutThreshold(),
- false);
+ false,
+ statement.isDebug());
if (result.status.code != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
LOGGER.error("Load TsFile {} error, statement: {}.", tsFile.getPath(),
statement);
LOGGER.error("Load TsFile result status : {}.", result.status);
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/thrift/IoTDBDataNodeReceiver.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/thrift/IoTDBDataNodeReceiver.java
index a1975f8bbe2..f2a05a72798 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/thrift/IoTDBDataNodeReceiver.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/pipe/receiver/protocol/thrift/IoTDBDataNodeReceiver.java
@@ -1000,7 +1000,8 @@ public class IoTDBDataNodeReceiver extends
IoTDBFileReceiver {
ClusterPartitionFetcher.getInstance(),
ClusterSchemaFetcher.getInstance(),
IoTDBDescriptor.getInstance().getConfig().getQueryTimeoutThreshold(),
- false)
+ false,
+ statement.isDebug())
.status;
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
index 1b2f5f400b2..3fe0e5e5267 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/ClientRPCServiceImpl.java
@@ -338,7 +338,8 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
partitionFetcher,
schemaFetcher,
req.getTimeout(),
- true);
+ true,
+ s.isDebug());
}
if (result.status.code != TSStatusCode.SUCCESS_STATUS.getStatusCode()
@@ -434,7 +435,8 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
partitionFetcher,
schemaFetcher,
req.getTimeout(),
- true);
+ true,
+ s.isDebug());
if (result.status.code != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
finished = true;
@@ -525,7 +527,8 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
partitionFetcher,
schemaFetcher,
req.getTimeout(),
- true);
+ true,
+ s.isDebug());
if (result.status.code != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
finished = true;
@@ -615,7 +618,8 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
partitionFetcher,
schemaFetcher,
req.getTimeout(),
- true);
+ true,
+ s.isDebug());
if (result.status.code != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
finished = true;
@@ -1063,7 +1067,8 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
partitionFetcher,
schemaFetcher,
req.getTimeout(),
- true);
+ true,
+ s.isDebug());
if (result.status.code != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
finished = true;
@@ -1666,7 +1671,8 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
partitionFetcher,
schemaFetcher,
config.getQueryTimeoutThreshold(),
- false);
+ false,
+ s.isDebug());
}
results.add(result.status);
} catch (Exception e) {
@@ -2522,7 +2528,8 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
partitionFetcher,
schemaFetcher,
config.getQueryTimeoutThreshold(),
- true);
+ true,
+ statement.isDebug());
if (executionResult.status.code !=
TSStatusCode.SUCCESS_STATUS.getStatusCode()
&& executionResult.status.code !=
TSStatusCode.REDIRECTION_RECOMMEND.getStatusCode()) {
@@ -2989,6 +2996,7 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
ExecutionResult result = null;
final List<? extends Statement> subStatements =
statement.getSubStatements();
final int totalSubStatements = subStatements.size();
+ boolean debug = statement.isDebug();
LOGGER.info(
"Start batch executing {} sub-statement(s) in tree model, queryId: {}",
@@ -3013,7 +3021,8 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
partitionFetcher,
schemaFetcher,
timeoutMs,
- userQuery);
+ userQuery,
+ debug);
// Exit early if any sub-statement execution fails
if (result != null
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java
index d36e8527596..1d974146464 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/protocol/thrift/impl/DataNodeInternalRPCServiceImpl.java
@@ -1492,6 +1492,7 @@ public class DataNodeInternalRPCServiceImpl implements
IDataNodeRPCService.Iface
partitionFetcher,
schemaFetcher,
req.getTimeout(),
+ false,
false);
if (result.status.code != TSStatusCode.SUCCESS_STATUS.getStatusCode()
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/MPPQueryContext.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/MPPQueryContext.java
index 25cf17d1515..0705680a3dd 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/MPPQueryContext.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/common/MPPQueryContext.java
@@ -163,6 +163,8 @@ public class MPPQueryContext {
*/
private boolean needSetHighestPriority = false;
+ private boolean debug = false;
+
@TestOnly
public MPPQueryContext(QueryId queryId) {
this.queryId = queryId;
@@ -713,6 +715,14 @@ public class MPPQueryContext {
this.userQuery = userQuery;
}
+ public boolean isDebug() {
+ return debug;
+ }
+
+ public void setDebug(boolean debug) {
+ this.debug = debug;
+ }
+
public boolean needSetHighestPriority() {
return needSetHighestPriority;
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FakedFragmentInstanceContext.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FakedFragmentInstanceContext.java
index a76ca60fd5c..a2641b881b2 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FakedFragmentInstanceContext.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FakedFragmentInstanceContext.java
@@ -35,7 +35,7 @@ import java.util.List;
public class FakedFragmentInstanceContext extends FragmentInstanceContext {
public FakedFragmentInstanceContext(Filter timeFilter, DataRegion
dataRegion) {
- super(0, new FakedMemoryReservationManager(), timeFilter, dataRegion);
+ super(0, new FakedMemoryReservationManager(), timeFilter, dataRegion,
false);
}
public QueryDataSource getSharedQueryDataSource(PartialPath sourcePath)
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceContext.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceContext.java
index d579b7e15c6..35bd6237db8 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceContext.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceContext.java
@@ -163,9 +163,12 @@ public class FragmentInstanceContext extends QueryContext {
private boolean highestPriority = false;
public static FragmentInstanceContext createFragmentInstanceContext(
- FragmentInstanceId id, FragmentInstanceStateMachine stateMachine,
SessionInfo sessionInfo) {
+ FragmentInstanceId id,
+ FragmentInstanceStateMachine stateMachine,
+ SessionInfo sessionInfo,
+ boolean debug) {
FragmentInstanceContext instanceContext =
- new FragmentInstanceContext(id, stateMachine, sessionInfo);
+ new FragmentInstanceContext(id, stateMachine, sessionInfo, debug);
instanceContext.initialize();
instanceContext.start();
return instanceContext;
@@ -176,9 +179,10 @@ public class FragmentInstanceContext extends QueryContext {
FragmentInstanceStateMachine stateMachine,
SessionInfo sessionInfo,
IDataRegionForQuery dataRegion,
- Filter timeFilter) {
+ Filter timeFilter,
+ boolean debug) {
FragmentInstanceContext instanceContext =
- new FragmentInstanceContext(id, stateMachine, sessionInfo, dataRegion,
timeFilter);
+ new FragmentInstanceContext(id, stateMachine, sessionInfo, dataRegion,
timeFilter, debug);
instanceContext.initialize();
instanceContext.start();
return instanceContext;
@@ -190,7 +194,8 @@ public class FragmentInstanceContext extends QueryContext {
SessionInfo sessionInfo,
IDataRegionForQuery dataRegion,
TimePredicate globalTimePredicate,
- Map<QueryId, DataNodeQueryContext> dataNodeQueryContextMap) {
+ Map<QueryId, DataNodeQueryContext> dataNodeQueryContextMap,
+ boolean debug) {
FragmentInstanceContext instanceContext =
new FragmentInstanceContext(
id,
@@ -198,14 +203,15 @@ public class FragmentInstanceContext extends QueryContext
{
sessionInfo,
dataRegion,
globalTimePredicate,
- dataNodeQueryContextMap);
+ dataNodeQueryContextMap,
+ debug);
instanceContext.initialize();
instanceContext.start();
return instanceContext;
}
public static FragmentInstanceContext
createFragmentInstanceContextForCompaction(long queryId) {
- return new FragmentInstanceContext(queryId, null, null, null);
+ return new FragmentInstanceContext(queryId, null, null, null, false);
}
public void setQueryDataSourceType(QueryDataSourceType queryDataSourceType) {
@@ -217,7 +223,7 @@ public class FragmentInstanceContext extends QueryContext {
FragmentInstanceId id, FragmentInstanceStateMachine stateMachine) {
FragmentInstanceContext instanceContext =
new FragmentInstanceContext(
- id, stateMachine, new SessionInfo(1, "test",
ZoneId.systemDefault(), ""));
+ id, stateMachine, new SessionInfo(1, "test",
ZoneId.systemDefault(), ""), false);
instanceContext.initialize();
instanceContext.start();
return instanceContext;
@@ -233,7 +239,8 @@ public class FragmentInstanceContext extends QueryContext {
id,
stateMachine,
new SessionInfo(1, "test", ZoneId.systemDefault(), ""),
- memoryReservationManager);
+ memoryReservationManager,
+ false);
instanceContext.initialize();
instanceContext.start();
return instanceContext;
@@ -245,7 +252,9 @@ public class FragmentInstanceContext extends QueryContext {
SessionInfo sessionInfo,
IDataRegionForQuery dataRegion,
TimePredicate globalTimePredicate,
- Map<QueryId, DataNodeQueryContext> dataNodeQueryContextMap) {
+ Map<QueryId, DataNodeQueryContext> dataNodeQueryContextMap,
+ boolean debug) {
+ super(debug);
this.id = id;
this.stateMachine = stateMachine;
this.executionEndTime.set(END_TIME_INITIAL_VALUE);
@@ -260,7 +269,11 @@ public class FragmentInstanceContext extends QueryContext {
}
private FragmentInstanceContext(
- FragmentInstanceId id, FragmentInstanceStateMachine stateMachine,
SessionInfo sessionInfo) {
+ FragmentInstanceId id,
+ FragmentInstanceStateMachine stateMachine,
+ SessionInfo sessionInfo,
+ boolean debug) {
+ super(debug);
this.id = id;
this.stateMachine = stateMachine;
this.executionEndTime.set(END_TIME_INITIAL_VALUE);
@@ -275,7 +288,9 @@ public class FragmentInstanceContext extends QueryContext {
FragmentInstanceId id,
FragmentInstanceStateMachine stateMachine,
SessionInfo sessionInfo,
- MemoryReservationManager memoryReservationManager) {
+ MemoryReservationManager memoryReservationManager,
+ boolean debug) {
+ super(debug);
this.id = id;
this.stateMachine = stateMachine;
this.executionEndTime.set(END_TIME_INITIAL_VALUE);
@@ -290,7 +305,9 @@ public class FragmentInstanceContext extends QueryContext {
FragmentInstanceStateMachine stateMachine,
SessionInfo sessionInfo,
IDataRegionForQuery dataRegion,
- Filter globalTimeFilter) {
+ Filter globalTimeFilter,
+ boolean debug) {
+ super(debug);
this.id = id;
this.stateMachine = stateMachine;
this.executionEndTime.set(END_TIME_INITIAL_VALUE);
@@ -312,7 +329,9 @@ public class FragmentInstanceContext extends QueryContext {
long queryId,
MemoryReservationManager memoryReservationManager,
Filter timeFilter,
- DataRegion dataRegion) {
+ DataRegion dataRegion,
+ boolean debug) {
+ super(debug);
this.queryId = queryId;
this.id = null;
this.stateMachine = null;
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceManager.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceManager.java
index 9dacdf44d88..93b562444bf 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceManager.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/FragmentInstanceManager.java
@@ -157,7 +157,8 @@ public class FragmentInstanceManager {
instance.getSessionInfo(),
dataRegion,
instance.getGlobalTimePredicate(),
- dataNodeQueryContextMap));
+ dataNodeQueryContextMap,
+ instance.isDebug()));
context.setHighestPriority(instance.isHighestPriority());
try {
@@ -259,7 +260,10 @@ public class FragmentInstanceManager {
instanceId,
fragmentInstanceId ->
createFragmentInstanceContext(
- fragmentInstanceId, stateMachine,
instance.getSessionInfo()));
+ fragmentInstanceId,
+ stateMachine,
+ instance.getSessionInfo(),
+ instance.isDebug()));
context.setHighestPriority(instance.isHighestPriority());
try {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/QueryContext.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/QueryContext.java
index d1b235ff7b1..b0022ddb26a 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/QueryContext.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/fragment/QueryContext.java
@@ -60,7 +60,7 @@ public class QueryContext {
protected long queryId;
- private boolean debug;
+ private final boolean debug;
private long startTime;
private long timeout;
@@ -72,10 +72,12 @@ public class QueryContext {
// referenced TVLists for the query
protected final Set<TVList> tvListSet = new HashSet<>();
- public QueryContext() {}
+ public QueryContext(boolean debug) {
+ this.debug = debug;
+ }
- public QueryContext(long queryId) {
- this(queryId, false, System.currentTimeMillis(), 0);
+ public QueryContext(long queryId, boolean debug) {
+ this(queryId, debug, System.currentTimeMillis(), 0);
}
/** Every time we generate the queryContext, register it to
queryTimeManager. */
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
index 2a548557d8c..22951f71258 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/Coordinator.java
@@ -61,6 +61,8 @@ import java.util.concurrent.ExecutorService;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.function.BiFunction;
+import java.util.function.LongSupplier;
+import java.util.function.Supplier;
import static org.apache.iotdb.commons.utils.StatusUtils.needRetry;
import static org.apache.iotdb.db.utils.CommonUtils.getContentOfRequest;
@@ -83,6 +85,8 @@ public class Coordinator {
private static final Logger SAMPLED_QUERIES_LOGGER =
LoggerFactory.getLogger(IoTDBConstant.SAMPLED_QUERIES_LOGGER_NAME);
+ private static final Logger DEBUG_LOGGER =
LoggerFactory.getLogger("QUERY_DEBUG");
+
private static final IClientManager<TEndPoint,
SyncDataNodeInternalServiceClient>
SYNC_INTERNAL_SERVICE_CLIENT_MANAGER =
new IClientManager.Factory<TEndPoint,
SyncDataNodeInternalServiceClient>()
@@ -125,6 +129,7 @@ public class Coordinator {
SessionInfo session,
String sql,
boolean userQuery,
+ boolean debug,
BiFunction<MPPQueryContext, Long, IQueryExecution>
iQueryExecutionFactory) {
long startTime = System.currentTimeMillis();
QueryId globalQueryId = queryIdGenerator.createNextQueryId();
@@ -142,6 +147,7 @@ public class Coordinator {
DataNodeEndPoints.LOCAL_HOST_DATA_BLOCK_ENDPOINT,
DataNodeEndPoints.LOCAL_HOST_INTERNAL_ENDPOINT);
queryContext.setUserQuery(userQuery);
+ queryContext.setDebug(debug);
IQueryExecution execution = iQueryExecutionFactory.apply(queryContext,
startTime);
if (execution.isQuery()) {
queryExecutionMap.put(queryId, execution);
@@ -173,7 +179,15 @@ public class Coordinator {
IPartitionFetcher partitionFetcher,
ISchemaFetcher schemaFetcher) {
return executeForTreeModel(
- statement, queryId, session, sql, partitionFetcher, schemaFetcher,
Long.MAX_VALUE, false);
+ statement,
+ queryId,
+ session,
+ sql,
+ partitionFetcher,
+ schemaFetcher,
+ Long.MAX_VALUE,
+ false,
+ statement.isDebug());
}
public ExecutionResult executeForTreeModel(
@@ -184,12 +198,14 @@ public class Coordinator {
IPartitionFetcher partitionFetcher,
ISchemaFetcher schemaFetcher,
long timeOut,
- boolean userQuery) {
+ boolean userQuery,
+ boolean debug) {
return execution(
queryId,
session,
sql,
userQuery,
+ debug,
((queryContext, startTime) ->
createQueryExecutionForTreeModel(
statement,
@@ -234,6 +250,29 @@ public class Coordinator {
return new QueryExecution(treeModelPlanner, queryContext, executor);
}
+ /** For compatibility of MQTT and REST, this method should never be called.
*/
+ @Deprecated
+ public ExecutionResult executeForTreeModel(
+ Statement statement,
+ long queryId,
+ SessionInfo sessionInfo,
+ String s,
+ IPartitionFetcher partitionFetcher,
+ ISchemaFetcher schemaFetcher,
+ long queryTimeoutThreshold,
+ boolean isUserQuery) {
+ return executeForTreeModel(
+ statement,
+ queryId,
+ sessionInfo,
+ s,
+ partitionFetcher,
+ schemaFetcher,
+ queryTimeoutThreshold,
+ isUserQuery,
+ false);
+ }
+
public IQueryExecution getQueryExecution(Long queryId) {
return queryExecutionMap.get(queryId);
}
@@ -270,27 +309,11 @@ public class Coordinator {
LOGGER.debug("[CleanUpQuery]]");
queryExecution.stopAndCleanup(t);
if (queryExecution.isQuery() && queryExecution.isUserQuery()) {
- long costTime = queryExecution.getTotalExecutionTime();
- // print slow query
- if (costTime / 1_000_000 >= CONFIG.getSlowQueryThreshold()) {
- SLOW_SQL_LOGGER.info(
- "Cost: {} ms, {}",
- costTime / 1_000_000,
- getContentOfRequest(nativeApiRequest, queryExecution));
- }
-
- // only sample successful query
- if (t == null && COMMON_CONFIG.isEnableQuerySampling()) { //
sampling is enabled
- String queryRequest = getContentOfRequest(nativeApiRequest,
queryExecution);
- if (COMMON_CONFIG.isQuerySamplingHasRateLimit()) {
- if
(COMMON_CONFIG.getQuerySamplingRateLimiter().tryAcquire(queryRequest.length()))
{
- SAMPLED_QUERIES_LOGGER.info(queryRequest);
- }
- } else {
- // no limit, always sampled
- SAMPLED_QUERIES_LOGGER.info(queryRequest);
- }
- }
+ recordQueries(
+ queryExecution::getTotalExecutionTime,
+ () -> getContentOfRequest(nativeApiRequest, queryExecution),
+ t,
+ queryExecution.isDebug());
}
}
}
@@ -325,6 +348,37 @@ public class Coordinator {
});
}
+ public static void recordQueries(
+ LongSupplier executionTime,
+ Supplier<String> contentOfQuerySupplier,
+ Throwable t,
+ boolean debug) {
+
+ long costTime = executionTime.getAsLong();
+ // print slow query
+ if (costTime / 1_000_000 >= CONFIG.getSlowQueryThreshold()) {
+ SLOW_SQL_LOGGER.info("Cost: {} ms, {}", costTime / 1_000_000,
contentOfQuerySupplier.get());
+ }
+
+ // always print the query when debug is true
+ if (debug) {
+ DEBUG_LOGGER.info(contentOfQuerySupplier.get());
+ }
+
+ // only sample successful query
+ if (t == null && COMMON_CONFIG.isEnableQuerySampling()) { // sampling is
enabled
+ String queryRequest = contentOfQuerySupplier.get();
+ if (COMMON_CONFIG.isQuerySamplingHasRateLimit()) {
+ if
(COMMON_CONFIG.getQuerySamplingRateLimiter().tryAcquire(queryRequest.length()))
{
+ SAMPLED_QUERIES_LOGGER.info(queryRequest);
+ }
+ } else {
+ // no limit, always sampled
+ SAMPLED_QUERIES_LOGGER.info(queryRequest);
+ }
+ }
+ }
+
public void cleanupQueryExecution(Long queryId) {
cleanupQueryExecution(queryId, null, null);
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/AutoCreateSchemaExecutor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/AutoCreateSchemaExecutor.java
index e7fa45be64a..583afac0e63 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/AutoCreateSchemaExecutor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/AutoCreateSchemaExecutor.java
@@ -95,6 +95,7 @@ class AutoCreateSchemaExecutor {
context == null || context.getQueryType().equals(QueryType.WRITE)
? config.getQueryTimeoutThreshold()
: context.getTimeOut(),
+ false,
false);
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ClusterSchemaFetchExecutor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ClusterSchemaFetchExecutor.java
index 400edc058a7..88042fb3588 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ClusterSchemaFetchExecutor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/schema/ClusterSchemaFetchExecutor.java
@@ -96,7 +96,8 @@ class ClusterSchemaFetchExecutor {
ClusterPartitionFetcher.getInstance(),
schemaFetcher,
timeout,
- false);
+ false,
+ statement.isDebug());
}
/**
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/IQueryExecution.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/IQueryExecution.java
index 09f25a781e1..d41db48afec 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/IQueryExecution.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/IQueryExecution.java
@@ -95,4 +95,6 @@ public interface IQueryExecution {
Optional<String> getExecuteSQL();
String getStatementType();
+
+ boolean isDebug();
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/QueryExecution.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/QueryExecution.java
index 75598e46791..7e8ac469868 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/QueryExecution.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/QueryExecution.java
@@ -746,6 +746,11 @@ public class QueryExecution implements IQueryExecution {
return analysis.getStatementType();
}
+ @Override
+ public boolean isDebug() {
+ return context.isDebug();
+ }
+
public MPPQueryContext getContext() {
return context;
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/ConfigExecution.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/ConfigExecution.java
index e3cf2408f06..86bb3b0ad2d 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/ConfigExecution.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/ConfigExecution.java
@@ -285,4 +285,9 @@ public class ConfigExecution implements IQueryExecution {
public String getStatementType() {
return statementType.name();
}
+
+ @Override
+ public boolean isDebug() {
+ return context.isDebug();
+ }
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
index 99eee84964e..e2a85023186 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java
@@ -2522,6 +2522,7 @@ public class ClusterConfigTaskExecutor implements
IConfigTaskExecutor {
ClusterPartitionFetcher.getInstance(),
ClusterSchemaFetcher.getInstance(),
IoTDBDescriptor.getInstance().getConfig().getQueryTimeoutThreshold(),
+ false,
false);
if (executionResult.status.getCode() !=
TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
future.setException(
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/SimpleFragmentParallelPlanner.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/SimpleFragmentParallelPlanner.java
index e0a193b63f1..37795a11378 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/SimpleFragmentParallelPlanner.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/SimpleFragmentParallelPlanner.java
@@ -151,6 +151,7 @@ public class SimpleFragmentParallelPlanner implements
IFragmentParallelPlaner {
queryContext.getTimeOut(),
queryContext.getSession(),
queryContext.isExplainAnalyze(),
+ queryContext.isDebug(),
fragment.isRoot());
// Get the target region for origin PlanFragment, then its instance will
be distributed one
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/WriteFragmentParallelPlanner.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/WriteFragmentParallelPlanner.java
index 9bc526ee4f5..3d707d552a3 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/WriteFragmentParallelPlanner.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/distribution/WriteFragmentParallelPlanner.java
@@ -63,7 +63,8 @@ public class WriteFragmentParallelPlanner implements
IFragmentParallelPlaner {
analysis.getCovertedTimePredicate(),
queryContext.getQueryType(),
queryContext.getTimeOut(),
- queryContext.getSession());
+ queryContext.getSession(),
+ queryContext.isDebug());
if (split.getRegionReplicaSet() != null) {
instance.setExecutorAndHost(new
StorageExecutor(split.getRegionReplicaSet()));
}
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/FragmentInstance.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/FragmentInstance.java
index b96485199ad..f8dc760f687 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/FragmentInstance.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/planner/plan/FragmentInstance.java
@@ -79,6 +79,8 @@ public class FragmentInstance implements IConsensusRequest {
// We need to cache and calculate the statistics of this FragmentInstance if
it is.
private boolean isExplainAnalyze = false;
+ private final boolean debug;
+
// We can add some more params for a specific FragmentInstance
// So that we can make different FragmentInstance owns different data range.
@@ -88,7 +90,8 @@ public class FragmentInstance implements IConsensusRequest {
TimePredicate globalTimePredicate,
QueryType type,
long timeOut,
- SessionInfo sessionInfo) {
+ SessionInfo sessionInfo,
+ boolean debug) {
this.fragment = fragment;
this.globalTimePredicate = globalTimePredicate;
this.id = id;
@@ -96,6 +99,7 @@ public class FragmentInstance implements IConsensusRequest {
this.timeOut = timeOut > 0 ? timeOut : CONFIG.getQueryTimeoutThreshold();
this.isRoot = false;
this.sessionInfo = sessionInfo;
+ this.debug = debug;
}
public FragmentInstance(
@@ -106,8 +110,9 @@ public class FragmentInstance implements IConsensusRequest {
long timeOut,
SessionInfo sessionInfo,
boolean isExplainAnalyze,
+ boolean debug,
boolean isRoot) {
- this(fragment, id, globalTimePredicate, type, timeOut, sessionInfo);
+ this(fragment, id, globalTimePredicate, type, timeOut, sessionInfo, debug);
this.isRoot = isRoot;
this.isExplainAnalyze = isExplainAnalyze;
}
@@ -119,8 +124,9 @@ public class FragmentInstance implements IConsensusRequest {
QueryType type,
long timeOut,
SessionInfo sessionInfo,
- int dataNodeFINum) {
- this(fragment, id, globalTimePredicate, type, timeOut, sessionInfo);
+ int dataNodeFINum,
+ boolean debug) {
+ this(fragment, id, globalTimePredicate, type, timeOut, sessionInfo, debug);
this.dataNodeFINum = dataNodeFINum;
}
@@ -187,6 +193,10 @@ public class FragmentInstance implements IConsensusRequest
{
this.dataNodeFINum = dataNodeFINum;
}
+ public boolean isDebug() {
+ return debug;
+ }
+
public String toString() {
StringBuilder ret = new StringBuilder();
ret.append(String.format("FragmentInstance-%s:", getId()));
@@ -216,9 +226,17 @@ public class FragmentInstance implements IConsensusRequest
{
TimePredicate globalTimePredicate = hasTimePredicate ?
TimePredicate.deserialize(buffer) : null;
QueryType queryType = QueryType.values()[ReadWriteIOUtils.readInt(buffer)];
int dataNodeFINum = ReadWriteIOUtils.readInt(buffer);
+ boolean debug = ReadWriteIOUtils.readBool(buffer);
FragmentInstance fragmentInstance =
new FragmentInstance(
- planFragment, id, globalTimePredicate, queryType, timeOut,
sessionInfo, dataNodeFINum);
+ planFragment,
+ id,
+ globalTimePredicate,
+ queryType,
+ timeOut,
+ sessionInfo,
+ dataNodeFINum,
+ debug);
boolean hasHostDataNode = ReadWriteIOUtils.readBool(buffer);
fragmentInstance.hostDataNode =
hasHostDataNode ?
ThriftCommonsSerDeUtils.deserializeTDataNodeLocation(buffer) : null;
@@ -243,6 +261,7 @@ public class FragmentInstance implements IConsensusRequest {
}
ReadWriteIOUtils.write(type.ordinal(), outputStream);
ReadWriteIOUtils.write(dataNodeFINum, outputStream);
+ ReadWriteIOUtils.write(debug, outputStream);
ReadWriteIOUtils.write(hostDataNode != null, outputStream);
if (hostDataNode != null) {
ThriftCommonsSerDeUtils.serializeTDataNodeLocation(hostDataNode,
outputStream);
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/scheduler/load/LoadTsFileScheduler.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/scheduler/load/LoadTsFileScheduler.java
index 8381e44f753..f0ef7282cc9 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/scheduler/load/LoadTsFileScheduler.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/scheduler/load/LoadTsFileScheduler.java
@@ -348,7 +348,8 @@ public class LoadTsFileScheduler implements IScheduler {
null,
queryContext.getQueryType(),
queryContext.getTimeOut(),
- queryContext.getSession());
+ queryContext.getSession(),
+ queryContext.isDebug());
instance.setExecutorAndHost(new StorageExecutor(replicaSet));
Future<FragInstanceDispatchResult> dispatchResultFuture =
dispatcher.dispatch(null, Collections.singletonList(instance));
@@ -486,7 +487,8 @@ public class LoadTsFileScheduler implements IScheduler {
null,
queryContext.getQueryType(),
queryContext.getTimeOut(),
- queryContext.getSession());
+ queryContext.getSession(),
+ queryContext.isDebug());
instance.setExecutorAndHost(new
StorageExecutor(node.getLocalRegionReplicaSet()));
dispatcher.dispatchLocally(instance);
} catch (FragmentInstanceDispatchException e) {
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/active/ActiveLoadTsFileLoader.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/active/ActiveLoadTsFileLoader.java
index a9133efe4f3..9dac9f11759 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/active/ActiveLoadTsFileLoader.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/active/ActiveLoadTsFileLoader.java
@@ -271,7 +271,8 @@ public class ActiveLoadTsFileLoader {
ClusterPartitionFetcher.getInstance(),
ClusterSchemaFetcher.getInstance(),
IOTDB_CONFIG.getQueryTimeoutThreshold(),
- false)
+ false,
+ statement.isDebug())
.status;
} finally {
SESSION_MANAGER.removeCurrSession();
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadTsFileDataTypeConverter.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadTsFileDataTypeConverter.java
index be154ac8181..6fc1f1bf6d9 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadTsFileDataTypeConverter.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/load/converter/LoadTsFileDataTypeConverter.java
@@ -204,6 +204,7 @@ public class LoadTsFileDataTypeConverter {
ClusterPartitionFetcher.getInstance(),
ClusterSchemaFetcher.getInstance(),
IoTDBDescriptor.getInstance().getConfig().getQueryTimeoutThreshold(),
+ false,
false)
.status;
} finally {
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/protocol/rest/v1/handler/QueryDataSetHandlerTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/protocol/rest/v1/handler/QueryDataSetHandlerTest.java
index 9f5d3a097ea..d0f6709bc60 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/protocol/rest/v1/handler/QueryDataSetHandlerTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/protocol/rest/v1/handler/QueryDataSetHandlerTest.java
@@ -151,6 +151,11 @@ public class QueryDataSetHandlerTest {
return true;
}
+ @Override
+ public boolean isDebug() {
+ return false;
+ }
+
@Override
public String getQueryId() {
return null;
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/MergeSortOperatorTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/MergeSortOperatorTest.java
index 9afc9c7c540..e2bc5a388c4 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/MergeSortOperatorTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/execution/operator/MergeSortOperatorTest.java
@@ -1883,5 +1883,10 @@ public class MergeSortOperatorTest {
public boolean isUserQuery() {
return false;
}
+
+ @Override
+ public boolean isDebug() {
+ return false;
+ }
}
}
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/FragmentInstanceSerdeTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/FragmentInstanceSerdeTest.java
index e435468f533..3ee4cb56fe4 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/FragmentInstanceSerdeTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/planner/FragmentInstanceSerdeTest.java
@@ -77,7 +77,8 @@ public class FragmentInstanceSerdeTest {
new TreeModelTimePredicate(ExpressionFactory.groupByTime(1, 2, 3,
4)),
QueryType.READ,
config.getQueryTimeoutThreshold(),
- sessionInfo);
+ sessionInfo,
+ false);
// test FI with StorageExecutor
TRegionReplicaSet regionReplicaSet =
new TRegionReplicaSet(
@@ -119,7 +120,8 @@ public class FragmentInstanceSerdeTest {
null,
QueryType.READ,
config.getQueryTimeoutThreshold(),
- sessionInfo);
+ sessionInfo,
+ false);
TRegionReplicaSet regionReplicaSet =
new TRegionReplicaSet(
new TConsensusGroupId(TConsensusGroupType.DataRegion, 1),
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/scheduler/load/LoadTsFileDispatcherImplTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/scheduler/load/LoadTsFileDispatcherImplTest.java
index 3d496470597..4fc0da17bb9 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/scheduler/load/LoadTsFileDispatcherImplTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/queryengine/plan/scheduler/load/LoadTsFileDispatcherImplTest.java
@@ -84,7 +84,7 @@ public class LoadTsFileDispatcherImplTest {
null,
0,
null,
- false,
+ 0,
false);
final TConsensusGroupId consensusGroupId = new
DataRegionId(1).convertToTConsensusGroupId();
instance.setExecutorAndHost(
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/memtable/MemChunkDeserializeTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/memtable/MemChunkDeserializeTest.java
index 04a81ee1866..4ac89010d31 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/memtable/MemChunkDeserializeTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/memtable/MemChunkDeserializeTest.java
@@ -302,7 +302,7 @@ public class MemChunkDeserializeTest {
memTableMap.put(deviceID, memChunkGroup);
IMemTable memTable = new PrimitiveMemTable(storageGroup, dataRegionId,
memTableMap);
- QueryContext context = new QueryContext();
+ QueryContext context = new QueryContext(false);
MeasurementPath nonAlignedFullPath =
new MeasurementPath(
deviceID,
@@ -327,7 +327,7 @@ public class MemChunkDeserializeTest {
memTableMap.put(deviceID, memChunkGroup);
IMemTable memTable = new PrimitiveMemTable(storageGroup, dataRegionId,
memTableMap);
- QueryContext context = new QueryContext();
+ QueryContext context = new QueryContext(false);
AlignedPath alignedFullPath = new AlignedPath("d1", measurementList,
schemaList);
return memTable.query(context, alignedFullPath, Long.MIN_VALUE, null,
null);
}
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/memtable/PrimitiveMemTableTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/memtable/PrimitiveMemTableTest.java
index b9259db0a0f..3177e34ee2a 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/memtable/PrimitiveMemTableTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/memtable/PrimitiveMemTableTest.java
@@ -117,7 +117,7 @@ public class PrimitiveMemTableTest {
tvListQueryMap.put(series.getWorkingTVList(),
series.getWorkingTVList().rowCount());
ReadOnlyMemChunk readableChunk =
new ReadOnlyMemChunk(
- new QueryContext(), "s1", dataType, TSEncoding.PLAIN,
tvListQueryMap, null, null);
+ new QueryContext(false), "s1", dataType, TSEncoding.PLAIN,
tvListQueryMap, null, null);
IPointReader it = readableChunk.getPointReader();
int i = 0;
while (it.hasNextTimeValuePair()) {
@@ -162,7 +162,7 @@ public class PrimitiveMemTableTest {
new AlignedPath("root.test.d1", Arrays.asList("s1", "s2", "s3"),
measurementSchemas));
ReadOnlyMemChunk readOnlyMemChunk =
resourcesByPathUtils.getReadOnlyMemChunkFromMemTable(
- new QueryContext(1), memTable, null, Long.MAX_VALUE, null);
+ new QueryContext(1, false), memTable, null, Long.MAX_VALUE, null);
for (int i = 1; i <= 50; i++) {
memTable.writeAlignedRow(
@@ -206,7 +206,7 @@ public class PrimitiveMemTableTest {
new AlignedPath("root.test.d1", Arrays.asList("s1", "s2", "s3"),
measurementSchemas));
ReadOnlyMemChunk readOnlyMemChunk =
resourcesByPathUtils.getReadOnlyMemChunkFromMemTable(
- new QueryContext(), memTable, null, Long.MAX_VALUE, null);
+ new QueryContext(false), memTable, null, Long.MAX_VALUE, null);
for (int i = 1; i <= 50; i++) {
memTable.writeAlignedRow(
@@ -243,7 +243,7 @@ public class PrimitiveMemTableTest {
AlignedReadOnlyMemChunk firstQueryMemChunk =
(AlignedReadOnlyMemChunk)
resourcesByPathUtils.getReadOnlyMemChunkFromMemTable(
- new QueryContext(1), memTable, null, Long.MAX_VALUE, null);
+ new QueryContext(1, false), memTable, null, Long.MAX_VALUE,
null);
TVList originalWorkingList = memTable.getWritableMemChunk(deviceID,
"").getWorkingTVList();
Assert.assertSame(
originalWorkingList,
@@ -263,7 +263,7 @@ public class PrimitiveMemTableTest {
AlignedReadOnlyMemChunk flushingQueryMemChunk =
(AlignedReadOnlyMemChunk)
resourcesByPathUtils.getReadOnlyMemChunkFromMemTable(
- new QueryContext(2), memTable, new ArrayList<>(),
Long.MAX_VALUE, null);
+ new QueryContext(2, false), memTable, new ArrayList<>(),
Long.MAX_VALUE, null);
TVList flushingQueryList =
flushingQueryMemChunk.getAligendTvListQueryMap().keySet().iterator().next();
Assert.assertNotSame(originalWorkingList, flushingQueryList);
@@ -343,7 +343,7 @@ public class PrimitiveMemTableTest {
CompressionType.UNCOMPRESSED,
Collections.emptyMap()));
ReadOnlyMemChunk memChunk =
- memTable.query(new QueryContext(), fullPath, Long.MIN_VALUE, null,
null);
+ memTable.query(new QueryContext(false), fullPath, Long.MIN_VALUE,
null, null);
IPointReader iterator = memChunk.getPointReader();
for (int i = 0; i < dataSize; i++) {
iterator.hasNextTimeValuePair();
@@ -445,7 +445,7 @@ public class PrimitiveMemTableTest {
new Deletion(new PartialPath(deviceId, measurementId[0]),
Long.MAX_VALUE, 10, dataSize);
modsToMemtable.add(new Pair<>(deletion, memTable));
ReadOnlyMemChunk memChunk =
- memTable.query(new QueryContext(), fullPath, Long.MIN_VALUE,
modsToMemtable, null);
+ memTable.query(new QueryContext(false), fullPath, Long.MIN_VALUE,
modsToMemtable, null);
IPointReader iterator = memChunk.getPointReader();
int cnt = 0;
while (iterator.hasNextTimeValuePair()) {
@@ -501,7 +501,7 @@ public class PrimitiveMemTableTest {
new Deletion(new PartialPath(deviceId, measurementId[0]),
Long.MAX_VALUE, 10, dataSize);
modsToMemtable.add(new Pair<>(deletion, memTable));
ReadOnlyMemChunk memChunk =
- memTable.query(new QueryContext(), fullPath, Long.MIN_VALUE,
modsToMemtable, null);
+ memTable.query(new QueryContext(false), fullPath, Long.MIN_VALUE,
modsToMemtable, null);
IPointReader iterator = memChunk.getPointReader();
int cnt = 0;
while (iterator.hasNextTimeValuePair()) {
@@ -541,7 +541,9 @@ public class PrimitiveMemTableTest {
CompressionType.UNCOMPRESSED,
Collections.emptyMap()));
IPointReader tvPair =
- memTable.query(new QueryContext(), fullPath, Long.MIN_VALUE, null,
null).getPointReader();
+ memTable
+ .query(new QueryContext(false), fullPath, Long.MIN_VALUE, null,
null)
+ .getPointReader();
Arrays.sort(ret);
TimeValuePair last = null;
for (int i = 0; i < ret.length; i++) {
@@ -587,7 +589,9 @@ public class PrimitiveMemTableTest {
CompressionType.UNCOMPRESSED,
Collections.emptyMap())));
IPointReader tvPair =
- memTable.query(new QueryContext(), fullPath, Long.MIN_VALUE, null,
null).getPointReader();
+ memTable
+ .query(new QueryContext(false), fullPath, Long.MIN_VALUE, null,
null)
+ .getPointReader();
for (int i = 0; i < 100; i++) {
tvPair.hasNextTimeValuePair();
TimeValuePair next = tvPair.nextTimeValuePair();
@@ -614,7 +618,9 @@ public class PrimitiveMemTableTest {
Collections.emptyMap())));
tvPair =
- memTable.query(new QueryContext(), fullPath, Long.MIN_VALUE, null,
null).getPointReader();
+ memTable
+ .query(new QueryContext(false), fullPath, Long.MIN_VALUE, null,
null)
+ .getPointReader();
for (int i = 0; i < 100; i++) {
tvPair.hasNextTimeValuePair();
TimeValuePair next = tvPair.nextTimeValuePair();
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedChunkLoaderTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedChunkLoaderTest.java
index 87c6e28ea55..02a3fc90e38 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedChunkLoaderTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemAlignedChunkLoaderTest.java
@@ -63,7 +63,7 @@ public class MemAlignedChunkLoaderTest {
public void testMemAlignedChunkLoader() throws IOException {
AlignedReadOnlyMemChunk chunk =
Mockito.mock(AlignedReadOnlyMemChunk.class);
ChunkMetadata chunkMetadata = Mockito.mock(ChunkMetadata.class);
- QueryContext ctx = new QueryContext();
+ QueryContext ctx = new QueryContext(false);
MemAlignedChunkLoader memAlignedChunkLoader = new
MemAlignedChunkLoader(ctx, chunk);
try {
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemChunkLoaderTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemChunkLoaderTest.java
index e852c656253..c8102c8eb59 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemChunkLoaderTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/read/reader/chunk/MemChunkLoaderTest.java
@@ -75,7 +75,7 @@ public class MemChunkLoaderTest {
Mockito.when(chunk.getMemPointIterator()).thenReturn(timeValuePairIterator);
ChunkMetadata chunkMetadata = Mockito.mock(ChunkMetadata.class);
- MemChunkLoader memChunkLoader = new MemChunkLoader(new QueryContext(),
chunk);
+ MemChunkLoader memChunkLoader = new MemChunkLoader(new
QueryContext(false), chunk);
try {
memChunkLoader.loadChunk(chunkMetadata);
fail();
@@ -154,7 +154,7 @@ public class MemChunkLoaderTest {
Mockito.when(chunk.getMemPointIterator()).thenReturn(timeValuePairIterator);
ChunkMetadata chunkMetadata = Mockito.mock(ChunkMetadata.class);
- MemChunkLoader memChunkLoader = new MemChunkLoader(new QueryContext(),
chunk);
+ MemChunkLoader memChunkLoader = new MemChunkLoader(new
QueryContext(false), chunk);
try {
memChunkLoader.loadChunk(chunkMetadata);
fail();
@@ -234,7 +234,7 @@ public class MemChunkLoaderTest {
Mockito.when(chunk.getMemPointIterator()).thenReturn(timeValuePairIterator);
ChunkMetadata chunkMetadata = Mockito.mock(ChunkMetadata.class);
- MemChunkLoader memChunkLoader = new MemChunkLoader(new QueryContext(),
chunk);
+ MemChunkLoader memChunkLoader = new MemChunkLoader(new
QueryContext(false), chunk);
try {
memChunkLoader.loadChunk(chunkMetadata);
fail();
@@ -314,7 +314,7 @@ public class MemChunkLoaderTest {
Mockito.when(chunk.getMemPointIterator()).thenReturn(timeValuePairIterator);
ChunkMetadata chunkMetadata = Mockito.mock(ChunkMetadata.class);
- MemChunkLoader memChunkLoader = new MemChunkLoader(new QueryContext(),
chunk);
+ MemChunkLoader memChunkLoader = new MemChunkLoader(new
QueryContext(false), chunk);
try {
memChunkLoader.loadChunk(chunkMetadata);
fail();
@@ -394,7 +394,7 @@ public class MemChunkLoaderTest {
Mockito.when(chunk.getMemPointIterator()).thenReturn(timeValuePairIterator);
ChunkMetadata chunkMetadata = Mockito.mock(ChunkMetadata.class);
- MemChunkLoader memChunkLoader = new MemChunkLoader(new QueryContext(),
chunk);
+ MemChunkLoader memChunkLoader = new MemChunkLoader(new
QueryContext(false), chunk);
try {
memChunkLoader.loadChunk(chunkMetadata);
fail();
@@ -474,7 +474,7 @@ public class MemChunkLoaderTest {
Mockito.when(chunk.getMemPointIterator()).thenReturn(timeValuePairIterator);
ChunkMetadata chunkMetadata = Mockito.mock(ChunkMetadata.class);
- MemChunkLoader memChunkLoader = new MemChunkLoader(new QueryContext(),
chunk);
+ MemChunkLoader memChunkLoader = new MemChunkLoader(new
QueryContext(false), chunk);
try {
memChunkLoader.loadChunk(chunkMetadata);
fail();
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/TsFilePlanRedoerTest.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/TsFilePlanRedoerTest.java
index fae5ee647a8..acbaaae6620 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/TsFilePlanRedoerTest.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/wal/recover/file/TsFilePlanRedoerTest.java
@@ -156,7 +156,7 @@ public class TsFilePlanRedoerTest {
new MeasurementPath(
DEVICE2_NAME, "s1", new MeasurementSchema("s1", TSDataType.FLOAT,
TSEncoding.RLE));
ReadOnlyMemChunk memChunk =
- recoveryMemTable.query(new QueryContext(), fullPath, Long.MIN_VALUE,
null, null);
+ recoveryMemTable.query(new QueryContext(false), fullPath,
Long.MIN_VALUE, null, null);
IPointReader iterator = memChunk.getPointReader();
time = 5;
while (iterator.hasNextTimeValuePair()) {
@@ -170,7 +170,8 @@ public class TsFilePlanRedoerTest {
fullPath =
new MeasurementPath(
DEVICE2_NAME, "s2", new MeasurementSchema("s2", TSDataType.DOUBLE,
TSEncoding.RLE));
- memChunk = recoveryMemTable.query(new QueryContext(), fullPath,
Long.MIN_VALUE, null, null);
+ memChunk =
+ recoveryMemTable.query(new QueryContext(false), fullPath,
Long.MIN_VALUE, null, null);
iterator = memChunk.getPointReader();
time = 5;
while (iterator.hasNextTimeValuePair()) {
@@ -256,7 +257,7 @@ public class TsFilePlanRedoerTest {
new MeasurementSchema("s4", TSDataType.FLOAT, TSEncoding.RLE),
new MeasurementSchema("s5", TSDataType.TEXT,
TSEncoding.PLAIN)));
ReadOnlyMemChunk memChunk =
- recoveryMemTable.query(new QueryContext(), fullPath, Long.MIN_VALUE,
null, null);
+ recoveryMemTable.query(new QueryContext(false), fullPath,
Long.MIN_VALUE, null, null);
IPointReader iterator = memChunk.getPointReader();
int time = 6;
while (iterator.hasNextTimeValuePair()) {
@@ -336,7 +337,7 @@ public class TsFilePlanRedoerTest {
new MeasurementPath(
DEVICE1_NAME, "s1", new MeasurementSchema("s1", TSDataType.INT32,
TSEncoding.RLE));
ReadOnlyMemChunk memChunk =
- recoveryMemTable.query(new QueryContext(), fullPath, Long.MIN_VALUE,
null, null);
+ recoveryMemTable.query(new QueryContext(false), fullPath,
Long.MIN_VALUE, null, null);
IPointReader iterator = memChunk.getPointReader();
int time = 5;
while (iterator.hasNextTimeValuePair()) {
@@ -350,7 +351,8 @@ public class TsFilePlanRedoerTest {
fullPath =
new MeasurementPath(
DEVICE1_NAME, "s2", new MeasurementSchema("s2", TSDataType.INT64,
TSEncoding.RLE));
- memChunk = recoveryMemTable.query(new QueryContext(), fullPath,
Long.MIN_VALUE, null, null);
+ memChunk =
+ recoveryMemTable.query(new QueryContext(false), fullPath,
Long.MIN_VALUE, null, null);
iterator = memChunk.getPointReader();
time = 5;
while (iterator.hasNextTimeValuePair()) {
@@ -449,7 +451,7 @@ public class TsFilePlanRedoerTest {
new MeasurementSchema("s4", TSDataType.FLOAT, TSEncoding.RLE),
new MeasurementSchema("s5", TSDataType.TEXT,
TSEncoding.PLAIN)));
ReadOnlyMemChunk memChunk =
- recoveryMemTable.query(new QueryContext(), fullPath, Long.MIN_VALUE,
null, null);
+ recoveryMemTable.query(new QueryContext(false), fullPath,
Long.MIN_VALUE, null, null);
IPointReader iterator = memChunk.getPointReader();
int time = 6;
while (iterator.hasNextTimeValuePair()) {
@@ -571,13 +573,14 @@ public class TsFilePlanRedoerTest {
new MeasurementPath(
DEVICE1_NAME, "s1", new MeasurementSchema("s1", TSDataType.INT32,
TSEncoding.RLE));
ReadOnlyMemChunk memChunk =
- recoveryMemTable.query(new QueryContext(), fullPath, Long.MIN_VALUE,
null, null);
+ recoveryMemTable.query(new QueryContext(false), fullPath,
Long.MIN_VALUE, null, null);
assertTrue(memChunk == null || memChunk.isEmpty());
// check d1.s2
fullPath =
new MeasurementPath(
DEVICE1_NAME, "s2", new MeasurementSchema("s2", TSDataType.INT64,
TSEncoding.RLE));
- memChunk = recoveryMemTable.query(new QueryContext(), fullPath,
Long.MIN_VALUE, null, null);
+ memChunk =
+ recoveryMemTable.query(new QueryContext(false), fullPath,
Long.MIN_VALUE, null, null);
assertTrue(memChunk == null || memChunk.isEmpty());
}
@@ -716,7 +719,7 @@ public class TsFilePlanRedoerTest {
new MeasurementSchema("s4", TSDataType.FLOAT, TSEncoding.RLE),
new MeasurementSchema("s5", TSDataType.TEXT,
TSEncoding.PLAIN)));
ReadOnlyMemChunk memChunk =
- recoveryMemTable.query(new QueryContext(), fullPath, Long.MIN_VALUE,
null, null);
+ recoveryMemTable.query(new QueryContext(false), fullPath,
Long.MIN_VALUE, null, null);
IPointReader iterator = memChunk.getPointReader();
time = 6;
while (iterator.hasNextTimeValuePair()) {
diff --git
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/utils/EnvironmentUtils.java
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/utils/EnvironmentUtils.java
index 1291540be05..66f33554c9f 100644
---
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/utils/EnvironmentUtils.java
+++
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/utils/EnvironmentUtils.java
@@ -82,7 +82,7 @@ public class EnvironmentUtils {
private static final TierManager tierManager = TierManager.getInstance();
public static long TEST_QUERY_JOB_ID = 1;
- public static QueryContext TEST_QUERY_CONTEXT = new
QueryContext(TEST_QUERY_JOB_ID);
+ public static QueryContext TEST_QUERY_CONTEXT = new
QueryContext(TEST_QUERY_JOB_ID, false);
public static FragmentInstanceContext TEST_QUERY_FI_CONTEXT =
FragmentInstanceContext.createFragmentInstanceContextForCompaction(TEST_QUERY_JOB_ID);
@@ -279,7 +279,7 @@ public class EnvironmentUtils {
DeviceIDFactory.getInstance().reset();
TEST_QUERY_JOB_ID = QueryResourceManager.getInstance().assignQueryId();
- TEST_QUERY_CONTEXT = new QueryContext(TEST_QUERY_JOB_ID);
+ TEST_QUERY_CONTEXT = new QueryContext(TEST_QUERY_JOB_ID, false);
}
private static void createAllDir() {