This is an automated email from the ASF dual-hosted git repository. jackietien pushed a commit to branch ty/highAvailable in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 79623cae928a3e4070fb2c5f68bb5568d5e9e7bb Author: JackieTien97 <[email protected]> AuthorDate: Tue Nov 14 11:56:03 2023 +0800 Support high available while meeting timeout exception --- .../db/queryengine/plan/scheduler/AsyncSendPlanNodeHandler.java | 8 +++++--- .../main/java/org/apache/iotdb/db/service/IoTDBShutdownHook.java | 3 +++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/scheduler/AsyncSendPlanNodeHandler.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/scheduler/AsyncSendPlanNodeHandler.java index ed7601b0b3b..5312e2d7be9 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/scheduler/AsyncSendPlanNodeHandler.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/scheduler/AsyncSendPlanNodeHandler.java @@ -31,6 +31,7 @@ import org.apache.thrift.async.AsyncMethodCallback; import java.util.List; import java.util.Map; +import java.util.concurrent.TimeoutException; import java.util.concurrent.atomic.AtomicLong; import static org.apache.iotdb.commons.client.ThriftClient.isConnectionBroken; @@ -97,9 +98,10 @@ public class AsyncSendPlanNodeHandler implements AsyncMethodCallback<TSendBatchP private boolean needRetry(Exception e) { Throwable rootCause = ExceptionUtils.getRootCause(e); - // if the exception is SocketException and its error message is Broken pipe, it means that the - // remote node may go offline - return isConnectionBroken(rootCause); + // 1. connection broken it means that the remote node may go offline + // 2. or the method call is time out + // 3. or the target node is ReadOnly + return isConnectionBroken(rootCause) || (e instanceof TimeoutException); } private boolean needRetry(TSendSinglePlanNodeResp resp) { diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/IoTDBShutdownHook.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/IoTDBShutdownHook.java index af5d90f5110..db520211787 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/IoTDBShutdownHook.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/service/IoTDBShutdownHook.java @@ -55,6 +55,9 @@ public class IoTDBShutdownHook extends Thread { @Override public void run() { + // stop external rpc service firstly. + RPCService.getInstance().stop(); + // close rocksdb if possible to avoid lose data if (SchemaEngineMode.valueOf(CommonDescriptor.getInstance().getConfig().getSchemaEngineMode()) .equals(SchemaEngineMode.Rocksdb_based)) {
