This is an automated email from the ASF dual-hosted git repository.
xingtanzjr pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new ed68cb5d9b Fix the issue that the QueryExecution may not be released
(#6318)
ed68cb5d9b is described below
commit ed68cb5d9b3707fea0d31a03fa019e75eb13662f
Author: Zhang.Jinrui <[email protected]>
AuthorDate: Fri Jun 17 12:23:59 2022 +0800
Fix the issue that the QueryExecution may not be released (#6318)
---
.../execution/datatransfer/DataBlockManager.java | 8 ++--
.../db/mpp/plan/analyze/ClusterSchemaFetcher.java | 55 ++++++++++++----------
2 files changed, 33 insertions(+), 30 deletions(-)
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/execution/datatransfer/DataBlockManager.java
b/server/src/main/java/org/apache/iotdb/db/mpp/execution/datatransfer/DataBlockManager.java
index 0db8bb2328..5b9743a07f 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/execution/datatransfer/DataBlockManager.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/execution/datatransfer/DataBlockManager.java
@@ -177,10 +177,10 @@ public class DataBlockManager implements
IDataBlockManager {
.get(e.getTargetFragmentInstanceId())
.get(e.getTargetPlanNodeId())
.isAborted()) {
- throw new TException(
- "Target fragment instance not found. Fragment instance ID: "
- + e.getTargetFragmentInstanceId()
- + ".");
+ logger.warn(
+ "received onEndOfDataBlockEvent but the downstream
FragmentInstance[{}] is not found",
+ e.getTargetFragmentInstanceId());
+ return;
}
SourceHandle sourceHandle =
(SourceHandle)
diff --git
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ClusterSchemaFetcher.java
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ClusterSchemaFetcher.java
index 2d2d06e2f1..84db6df7f7 100644
---
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ClusterSchemaFetcher.java
+++
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/ClusterSchemaFetcher.java
@@ -102,35 +102,38 @@ public class ClusterSchemaFetcher implements
ISchemaFetcher {
private SchemaTree executeSchemaFetchQuery(SchemaFetchStatement
schemaFetchStatement) {
long queryId = SessionManager.getInstance().requestQueryId(false);
- ExecutionResult executionResult =
- coordinator.execute(schemaFetchStatement, queryId, null, "",
partitionFetcher, this);
- // TODO: (xingtanzjr) throw exception
- if (executionResult.status.getCode() !=
TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
- throw new RuntimeException(
- String.format(
- "cannot fetch schema, status is: %s, msg is: %s",
- executionResult.status.getCode(),
executionResult.status.getMessage()));
- }
- try (SetThreadName threadName = new
SetThreadName(executionResult.queryId.getId())) {
- SchemaTree result = new SchemaTree();
- while (coordinator.getQueryExecution(queryId).hasNextResult()) {
- // The query will be transited to FINISHED when invoking
getBatchResult() at the last time
- // So we don't need to clean up it manually
- Optional<TsBlock> tsBlock =
coordinator.getQueryExecution(queryId).getBatchResult();
- if (!tsBlock.isPresent() || tsBlock.get().isEmpty()) {
- break;
- }
- Binary binary;
- SchemaTree fetchedSchemaTree;
- Column column = tsBlock.get().getColumn(0);
- for (int i = 0; i < column.getPositionCount(); i++) {
- binary = column.getBinary(i);
- fetchedSchemaTree =
SchemaTree.deserialize(ByteBuffer.wrap(binary.getValues()));
- result.mergeSchemaTree(fetchedSchemaTree);
+ try {
+ ExecutionResult executionResult =
+ coordinator.execute(schemaFetchStatement, queryId, null, "",
partitionFetcher, this);
+ // TODO: (xingtanzjr) throw exception
+ if (executionResult.status.getCode() !=
TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
+ throw new RuntimeException(
+ String.format(
+ "cannot fetch schema, status is: %s, msg is: %s",
+ executionResult.status.getCode(),
executionResult.status.getMessage()));
+ }
+ try (SetThreadName threadName = new
SetThreadName(executionResult.queryId.getId())) {
+ SchemaTree result = new SchemaTree();
+ while (coordinator.getQueryExecution(queryId).hasNextResult()) {
+ // The query will be transited to FINISHED when invoking
getBatchResult() at the last time
+ // So we don't need to clean up it manually
+ Optional<TsBlock> tsBlock =
coordinator.getQueryExecution(queryId).getBatchResult();
+ if (!tsBlock.isPresent() || tsBlock.get().isEmpty()) {
+ break;
+ }
+ Binary binary;
+ SchemaTree fetchedSchemaTree;
+ Column column = tsBlock.get().getColumn(0);
+ for (int i = 0; i < column.getPositionCount(); i++) {
+ binary = column.getBinary(i);
+ fetchedSchemaTree =
SchemaTree.deserialize(ByteBuffer.wrap(binary.getValues()));
+ result.mergeSchemaTree(fetchedSchemaTree);
+ }
}
+ return result;
}
+ } finally {
coordinator.removeQueryExecution(queryId);
- return result;
}
}