You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ji...@apache.org on 2023/05/16 03:04:22 UTC
[iotdb] branch handle_redirection_during_dispatching updated: do not modify an existing redirection handle local redirection
This is an automated email from the ASF dual-hosted git repository.
jiangtian pushed a commit to branch handle_redirection_during_dispatching
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/handle_redirection_during_dispatching by this push:
new 6b813ee094 do not modify an existing redirection handle local redirection
6b813ee094 is described below
commit 6b813ee0941ef95d15bf6a852331789639b2b60e
Author: Tian Jiang <jt...@163.com>
AuthorDate: Tue May 16 11:07:15 2023 +0800
do not modify an existing redirection
handle local redirection
---
.../iotdb/db/mpp/plan/execution/QueryExecution.java | 4 +++-
.../scheduler/FragmentInstanceDispatcherImpl.java | 21 ++++++++++++++-------
2 files changed, 17 insertions(+), 8 deletions(-)
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/QueryExecution.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/QueryExecution.java
index 715cf29c71..0cac209f97 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/QueryExecution.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/QueryExecution.java
@@ -660,7 +660,9 @@ public class QueryExecution implements IQueryExecution {
if (analysis.getStatement() instanceof InsertBaseStatement
&& !analysis.isFinishQueryAfterAnalyze()
&& (!config.isEnable13DataInsertAdapt()
- || IoTDBConstant.ClientVersion.V_1_0.equals(context.getSession().getVersion()))) {
+ || IoTDBConstant.ClientVersion.V_1_0.equals(context.getSession().getVersion()))
+ // if the status is already a redirection, do not modify it
+ && tsstatus.getCode() != TSStatusCode.REDIRECTION_RECOMMEND.getStatusCode()) {
InsertBaseStatement insertStatement = (InsertBaseStatement) analysis.getStatement();
List<TEndPoint> redirectNodeList = analysis.getRedirectNodeList();
if (insertStatement instanceof InsertRowsStatement
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/scheduler/FragmentInstanceDispatcherImpl.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/scheduler/FragmentInstanceDispatcherImpl.java
index d362d1fbfc..724cbf8ae2 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/scheduler/FragmentInstanceDispatcherImpl.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/scheduler/FragmentInstanceDispatcherImpl.java
@@ -370,20 +370,27 @@ public class FragmentInstanceDispatcherImpl implements IFragInstanceDispatcher {
PlanNode planNode = instance.getFragment().getPlanNodeTree();
RegionWriteExecutor writeExecutor = new RegionWriteExecutor();
RegionExecutionResult writeResult = writeExecutor.execute(groupId, planNode);
+
+ TSStatus status = writeResult.getStatus();
if (!writeResult.isAccepted()) {
- logger.warn(
- "write locally failed. TSStatus: {}, message: {}",
- writeResult.getStatus(),
- writeResult.getMessage());
- if (writeResult.getStatus() == null) {
+ if (status == null || status.getCode() != TSStatusCode.REDIRECTION_RECOMMEND.getStatusCode()) {
+ logger.warn(
+ "write locally failed. TSStatus: {}, message: {}",
+ status,
+ writeResult.getMessage());
+ } else {
+ // status code == REDIRECTION_RECOMMEND
+ instance.getExecutorType().updatePreferredLocation(status.getRedirectNode());
+ }
+
+ if (status == null) {
throw new FragmentInstanceDispatchException(
RpcUtils.getStatus(TSStatusCode.EXECUTE_STATEMENT_ERROR, writeResult.getMessage()));
} else {
- throw new FragmentInstanceDispatchException(writeResult.getStatus());
+ throw new FragmentInstanceDispatchException(status);
}
} else {
// some expected and accepted status except SUCCESS_STATUS need to be returned
- TSStatus status = writeResult.getStatus();
if (status != null && status.getCode() != TSStatusCode.SUCCESS_STATUS.getStatusCode()) {
throw new FragmentInstanceDispatchException(status);
}