This is an automated email from the ASF dual-hosted git repository.
jackietien 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 0ee458e991f Added retry for insertion when fetch table schema failed
due to connection error & Improved the retry mechanism of client rpc
0ee458e991f is described below
commit 0ee458e991f80fc77ad74738834d25d5bb64ece8
Author: Caideyipi <[email protected]>
AuthorDate: Fri Mar 28 14:13:47 2025 +0800
Added retry for insertion when fetch table schema failed due to connection
error & Improved the retry mechanism of client rpc
---
.../it/db/it/IoTDBAuthenticationTableIT.java | 4 +-
.../protocol/thrift/impl/ClientRPCServiceImpl.java | 111 +++++++++++----------
.../metadata/fetcher/TableDeviceSchemaFetcher.java | 7 +-
.../plan/scheduler/AsyncSendPlanNodeHandler.java | 2 +-
.../apache/iotdb/db/utils/ErrorHandlingUtils.java | 3 +-
.../apache/iotdb/commons/utils/StatusUtils.java | 5 +
6 files changed, 76 insertions(+), 56 deletions(-)
diff --git
a/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBAuthenticationTableIT.java
b/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBAuthenticationTableIT.java
index 78c53614a84..d0458601ec9 100644
---
a/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBAuthenticationTableIT.java
+++
b/integration-test/src/test/java/org/apache/iotdb/relational/it/db/it/IoTDBAuthenticationTableIT.java
@@ -225,7 +225,7 @@ public class IoTDBAuthenticationTableIT {
fail("Should have thrown an exception");
} catch (StatementExecutionException e) {
assertEquals(
- "301: [EXECUTE_STATEMENT_ERROR(301)] Exception occurred:
insertTablet failed. Access Denied: No permissions for this operation, please
add privilege CREATE ON 汉化.table2",
+ "803: Access Denied: No permissions for this operation, please
add privilege CREATE ON 汉化.table2",
e.getMessage());
}
sessionRoot.executeNonQueryStatement("GRANT CREATE ON DATABASE \"汉化\"
TO USER userA");
@@ -265,7 +265,7 @@ public class IoTDBAuthenticationTableIT {
fail("Should have thrown an exception");
} catch (StatementExecutionException e) {
assertEquals(
- "301: [EXECUTE_STATEMENT_ERROR(301)] Exception occurred:
insertTablet failed. Access Denied: No permissions for this operation, please
add privilege ALTER ON 汉化.table2",
+ "803: Access Denied: No permissions for this operation, please
add privilege ALTER ON 汉化.table2",
e.getMessage());
}
sessionRoot.executeNonQueryStatement("GRANT ALTER ON TABLE table2 TO
USER userA");
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 121f37bf2ea..75581413082 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
@@ -222,7 +222,6 @@ import static
org.apache.iotdb.db.queryengine.execution.operator.AggregationUtil
import static org.apache.iotdb.db.utils.CommonUtils.getContentOfRequest;
import static
org.apache.iotdb.db.utils.CommonUtils.getContentOfTSFastLastDataQueryForOneDeviceReq;
import static org.apache.iotdb.db.utils.ErrorHandlingUtils.onIoTDBException;
-import static
org.apache.iotdb.db.utils.ErrorHandlingUtils.onNpeOrUnexpectedException;
import static org.apache.iotdb.db.utils.ErrorHandlingUtils.onQueryException;
import static
org.apache.iotdb.db.utils.QueryDataSetUtils.convertTsBlockByFetchSize;
import static org.apache.iotdb.rpc.RpcUtils.TIME_PRECISION;
@@ -1365,8 +1364,8 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
zoneId != null ? zoneId.toString() : "Unknown time zone");
} catch (Exception e) {
return new TSGetTimeZoneResp(
- onNpeOrUnexpectedException(
- e, OperationType.GET_TIME_ZONE,
TSStatusCode.GENERATE_TIME_ZONE_ERROR),
+ onQueryException(
+ e, OperationType.GET_TIME_ZONE.getName(),
TSStatusCode.GENERATE_TIME_ZONE_ERROR),
"Unknown time zone");
}
}
@@ -1377,8 +1376,8 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
SESSION_MANAGER.getCurrSession().setZoneId(ZoneId.of(req.timeZone));
return RpcUtils.getStatus(TSStatusCode.SUCCESS_STATUS);
} catch (Exception e) {
- return onNpeOrUnexpectedException(
- e, OperationType.SET_TIME_ZONE, TSStatusCode.SET_TIME_ZONE_ERROR);
+ return onQueryException(
+ e, OperationType.SET_TIME_ZONE.getName(),
TSStatusCode.SET_TIME_ZONE_ERROR);
}
}
@@ -1436,8 +1435,8 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
} catch (IoTDBException e) {
return onIoTDBException(e, OperationType.SET_STORAGE_GROUP,
e.getErrorCode());
} catch (Exception e) {
- return onNpeOrUnexpectedException(
- e, OperationType.SET_STORAGE_GROUP,
TSStatusCode.EXECUTE_STATEMENT_ERROR);
+ return onQueryException(
+ e, OperationType.SET_STORAGE_GROUP.getName(),
TSStatusCode.EXECUTE_STATEMENT_ERROR);
}
}
@@ -1477,8 +1476,8 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
} catch (IoTDBException e) {
return onIoTDBException(e, OperationType.CREATE_TIMESERIES,
e.getErrorCode());
} catch (Exception e) {
- return onNpeOrUnexpectedException(
- e, OperationType.CREATE_TIMESERIES,
TSStatusCode.EXECUTE_STATEMENT_ERROR);
+ return onQueryException(
+ e, OperationType.CREATE_TIMESERIES.getName(),
TSStatusCode.EXECUTE_STATEMENT_ERROR);
} finally {
SESSION_MANAGER.updateIdleTime();
}
@@ -1527,8 +1526,10 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
} catch (IoTDBException e) {
return onIoTDBException(e, OperationType.CREATE_ALIGNED_TIMESERIES,
e.getErrorCode());
} catch (Exception e) {
- return onNpeOrUnexpectedException(
- e, OperationType.CREATE_ALIGNED_TIMESERIES,
TSStatusCode.EXECUTE_STATEMENT_ERROR);
+ return onQueryException(
+ e,
+ OperationType.CREATE_ALIGNED_TIMESERIES.getName(),
+ TSStatusCode.EXECUTE_STATEMENT_ERROR);
} finally {
SESSION_MANAGER.updateIdleTime();
}
@@ -1576,8 +1577,8 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
} catch (IoTDBException e) {
return onIoTDBException(e, OperationType.CREATE_MULTI_TIMESERIES,
e.getErrorCode());
} catch (Exception e) {
- return onNpeOrUnexpectedException(
- e, OperationType.CREATE_MULTI_TIMESERIES,
TSStatusCode.EXECUTE_STATEMENT_ERROR);
+ return onQueryException(
+ e, OperationType.CREATE_MULTI_TIMESERIES.getName(),
TSStatusCode.EXECUTE_STATEMENT_ERROR);
} finally {
SESSION_MANAGER.updateIdleTime();
}
@@ -1616,8 +1617,8 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
} catch (IoTDBException e) {
return onIoTDBException(e, OperationType.DELETE_TIMESERIES,
e.getErrorCode());
} catch (Exception e) {
- return onNpeOrUnexpectedException(
- e, OperationType.DELETE_TIMESERIES,
TSStatusCode.EXECUTE_STATEMENT_ERROR);
+ return onQueryException(
+ e, OperationType.DELETE_TIMESERIES.getName(),
TSStatusCode.EXECUTE_STATEMENT_ERROR);
} finally {
SESSION_MANAGER.updateIdleTime();
}
@@ -1659,8 +1660,8 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
} catch (IoTDBException e) {
return onIoTDBException(e, OperationType.DELETE_STORAGE_GROUPS,
e.getErrorCode());
} catch (Exception e) {
- return onNpeOrUnexpectedException(
- e, OperationType.DELETE_STORAGE_GROUPS,
TSStatusCode.EXECUTE_STATEMENT_ERROR);
+ return onQueryException(
+ e, OperationType.DELETE_STORAGE_GROUPS.getName(),
TSStatusCode.EXECUTE_STATEMENT_ERROR);
} finally {
SESSION_MANAGER.updateIdleTime();
}
@@ -1931,8 +1932,8 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
} catch (IoTDBException e) {
return onIoTDBException(e, OperationType.INSERT_RECORDS,
e.getErrorCode());
} catch (Exception e) {
- return onNpeOrUnexpectedException(
- e, OperationType.INSERT_RECORDS,
TSStatusCode.EXECUTE_STATEMENT_ERROR);
+ return onQueryException(
+ e, OperationType.INSERT_RECORDS.getName(),
TSStatusCode.EXECUTE_STATEMENT_ERROR);
} finally {
CommonUtils.addStatementExecutionLatency(
OperationType.INSERT_RECORDS,
@@ -2000,8 +2001,10 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
} catch (IoTDBException e) {
return onIoTDBException(e, OperationType.INSERT_RECORDS_OF_ONE_DEVICE,
e.getErrorCode());
} catch (Exception e) {
- return onNpeOrUnexpectedException(
- e, OperationType.INSERT_RECORDS_OF_ONE_DEVICE,
TSStatusCode.EXECUTE_STATEMENT_ERROR);
+ return onQueryException(
+ e,
+ OperationType.INSERT_RECORDS_OF_ONE_DEVICE.getName(),
+ TSStatusCode.EXECUTE_STATEMENT_ERROR);
} finally {
CommonUtils.addStatementExecutionLatency(
OperationType.INSERT_RECORDS_OF_ONE_DEVICE,
@@ -2069,9 +2072,9 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
return onIoTDBException(
e, OperationType.INSERT_STRING_RECORDS_OF_ONE_DEVICE,
e.getErrorCode());
} catch (Exception e) {
- return onNpeOrUnexpectedException(
+ return onQueryException(
e,
- OperationType.INSERT_STRING_RECORDS_OF_ONE_DEVICE,
+ OperationType.INSERT_STRING_RECORDS_OF_ONE_DEVICE.getName(),
TSStatusCode.EXECUTE_STATEMENT_ERROR);
} finally {
CommonUtils.addStatementExecutionLatency(
@@ -2153,8 +2156,8 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
} catch (IoTDBException e) {
return onIoTDBException(e, OperationType.INSERT_RECORD,
e.getErrorCode());
} catch (Exception e) {
- return onNpeOrUnexpectedException(
- e, OperationType.INSERT_RECORD,
TSStatusCode.EXECUTE_STATEMENT_ERROR);
+ return onQueryException(
+ e, OperationType.INSERT_RECORD.getName(),
TSStatusCode.EXECUTE_STATEMENT_ERROR);
} finally {
CommonUtils.addStatementExecutionLatency(
OperationType.INSERT_RECORD, StatementType.INSERT.name(),
System.nanoTime() - t1);
@@ -2210,8 +2213,8 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
} catch (IoTDBException e) {
return onIoTDBException(e, OperationType.INSERT_TABLETS,
e.getErrorCode());
} catch (Exception e) {
- return onNpeOrUnexpectedException(
- e, OperationType.INSERT_TABLETS,
TSStatusCode.EXECUTE_STATEMENT_ERROR);
+ return onQueryException(
+ e, OperationType.INSERT_TABLETS.getName(),
TSStatusCode.EXECUTE_STATEMENT_ERROR);
} finally {
CommonUtils.addStatementExecutionLatency(
OperationType.INSERT_TABLETS,
@@ -2287,8 +2290,8 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
} catch (IoTDBException e) {
return onIoTDBException(e, OperationType.INSERT_TABLET,
e.getErrorCode());
} catch (Exception e) {
- return onNpeOrUnexpectedException(
- e, OperationType.INSERT_TABLET,
TSStatusCode.EXECUTE_STATEMENT_ERROR);
+ return onQueryException(
+ e, OperationType.INSERT_TABLET.getName(),
TSStatusCode.EXECUTE_STATEMENT_ERROR);
} finally {
CommonUtils.addStatementExecutionLatency(
OperationType.INSERT_TABLET, StatementType.BATCH_INSERT.name(),
System.nanoTime() - t1);
@@ -2352,8 +2355,8 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
} catch (IoTDBException e) {
return onIoTDBException(e, OperationType.INSERT_STRING_RECORDS,
e.getErrorCode());
} catch (Exception e) {
- return onNpeOrUnexpectedException(
- e, OperationType.INSERT_STRING_RECORDS,
TSStatusCode.EXECUTE_STATEMENT_ERROR);
+ return onQueryException(
+ e, OperationType.INSERT_STRING_RECORDS.getName(),
TSStatusCode.EXECUTE_STATEMENT_ERROR);
} finally {
CommonUtils.addStatementExecutionLatency(
OperationType.INSERT_STRING_RECORDS,
@@ -2438,8 +2441,8 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
} catch (IoTDBException e) {
return onIoTDBException(e, OperationType.DELETE_DATA, e.getErrorCode());
} catch (Exception e) {
- return onNpeOrUnexpectedException(
- e, OperationType.DELETE_DATA, TSStatusCode.EXECUTE_STATEMENT_ERROR);
+ return onQueryException(
+ e, OperationType.DELETE_DATA.getName(),
TSStatusCode.EXECUTE_STATEMENT_ERROR);
} finally {
SESSION_MANAGER.updateIdleTime();
}
@@ -2502,8 +2505,8 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
} catch (IoTDBException e) {
return onIoTDBException(e, OperationType.CREATE_SCHEMA_TEMPLATE,
e.getErrorCode());
} catch (Exception e) {
- return onNpeOrUnexpectedException(
- e, OperationType.CREATE_SCHEMA_TEMPLATE,
TSStatusCode.EXECUTE_STATEMENT_ERROR);
+ return onQueryException(
+ e, OperationType.CREATE_SCHEMA_TEMPLATE.getName(),
TSStatusCode.EXECUTE_STATEMENT_ERROR);
} finally {
SESSION_MANAGER.updateIdleTime();
}
@@ -2563,8 +2566,10 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
return executeTemplateQueryStatement(statement, req, resp);
} catch (Exception e) {
resp.setStatus(
- onNpeOrUnexpectedException(
- e, OperationType.EXECUTE_QUERY_STATEMENT,
TSStatusCode.EXECUTE_STATEMENT_ERROR));
+ onQueryException(
+ e,
+ OperationType.EXECUTE_QUERY_STATEMENT.getName(),
+ TSStatusCode.EXECUTE_STATEMENT_ERROR));
return resp;
} finally {
SESSION_MANAGER.updateIdleTime();
@@ -2585,8 +2590,10 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
return resp;
} catch (Exception e) {
resp.setStatus(
- onNpeOrUnexpectedException(
- e, OperationType.EXECUTE_QUERY_STATEMENT,
TSStatusCode.EXECUTE_STATEMENT_ERROR));
+ onQueryException(
+ e,
+ OperationType.EXECUTE_QUERY_STATEMENT.getName(),
+ TSStatusCode.EXECUTE_STATEMENT_ERROR));
return resp;
} finally {
SESSION_MANAGER.updateIdleTime();
@@ -2624,8 +2631,10 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
}
} catch (Exception e) {
resp.setStatus(
- onNpeOrUnexpectedException(
- e, OperationType.EXECUTE_QUERY_STATEMENT,
TSStatusCode.EXECUTE_STATEMENT_ERROR));
+ onQueryException(
+ e,
+ OperationType.EXECUTE_QUERY_STATEMENT.getName(),
+ TSStatusCode.EXECUTE_STATEMENT_ERROR));
return resp;
} finally {
SESSION_MANAGER.updateIdleTime();
@@ -2747,8 +2756,8 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
} catch (IllegalPathException e) {
return onIoTDBException(e, OperationType.EXECUTE_STATEMENT,
e.getErrorCode());
} catch (Exception e) {
- return onNpeOrUnexpectedException(
- e, OperationType.EXECUTE_STATEMENT,
TSStatusCode.EXECUTE_STATEMENT_ERROR);
+ return onQueryException(
+ e, OperationType.EXECUTE_STATEMENT.getName(),
TSStatusCode.EXECUTE_STATEMENT_ERROR);
} finally {
SESSION_MANAGER.updateIdleTime();
}
@@ -2795,8 +2804,8 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
} catch (IllegalPathException e) {
return onIoTDBException(e, OperationType.EXECUTE_STATEMENT,
e.getErrorCode());
} catch (Exception e) {
- return onNpeOrUnexpectedException(
- e, OperationType.EXECUTE_STATEMENT,
TSStatusCode.EXECUTE_STATEMENT_ERROR);
+ return onQueryException(
+ e, OperationType.EXECUTE_STATEMENT.getName(),
TSStatusCode.EXECUTE_STATEMENT_ERROR);
} finally {
SESSION_MANAGER.updateIdleTime();
}
@@ -2838,8 +2847,8 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
return result.status;
} catch (Exception e) {
- return onNpeOrUnexpectedException(
- e, OperationType.EXECUTE_STATEMENT,
TSStatusCode.EXECUTE_STATEMENT_ERROR);
+ return onQueryException(
+ e, OperationType.EXECUTE_STATEMENT.getName(),
TSStatusCode.EXECUTE_STATEMENT_ERROR);
} finally {
SESSION_MANAGER.updateIdleTime();
}
@@ -2884,8 +2893,8 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
} catch (IoTDBException e) {
return onIoTDBException(e, OperationType.EXECUTE_STATEMENT,
e.getErrorCode());
} catch (Exception e) {
- return onNpeOrUnexpectedException(
- e, OperationType.EXECUTE_STATEMENT,
TSStatusCode.EXECUTE_STATEMENT_ERROR);
+ return onQueryException(
+ e, OperationType.EXECUTE_STATEMENT.getName(),
TSStatusCode.EXECUTE_STATEMENT_ERROR);
} finally {
SESSION_MANAGER.updateIdleTime();
}
@@ -2986,8 +2995,8 @@ public class ClientRPCServiceImpl implements
IClientRPCServiceWithHandler {
} catch (IoTDBException e) {
return onIoTDBException(e, OperationType.INSERT_STRING_RECORD,
e.getErrorCode());
} catch (Exception e) {
- return onNpeOrUnexpectedException(
- e, OperationType.INSERT_STRING_RECORD,
TSStatusCode.EXECUTE_STATEMENT_ERROR);
+ return onQueryException(
+ e, OperationType.INSERT_STRING_RECORD.getName(),
TSStatusCode.EXECUTE_STATEMENT_ERROR);
} finally {
CommonUtils.addStatementExecutionLatency(
OperationType.INSERT_STRING_RECORD, StatementType.INSERT.name(),
System.nanoTime() - t1);
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableDeviceSchemaFetcher.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableDeviceSchemaFetcher.java
index 0c17810684a..117699854e1 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableDeviceSchemaFetcher.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/relational/metadata/fetcher/TableDeviceSchemaFetcher.java
@@ -20,6 +20,7 @@
package org.apache.iotdb.db.queryengine.plan.relational.metadata.fetcher;
import org.apache.iotdb.commons.exception.IoTDBException;
+import org.apache.iotdb.commons.exception.IoTDBRuntimeException;
import org.apache.iotdb.commons.schema.column.ColumnHeader;
import org.apache.iotdb.commons.schema.filter.SchemaFilter;
import org.apache.iotdb.commons.schema.filter.impl.singlechild.IdFilter;
@@ -42,6 +43,7 @@ import
org.apache.iotdb.db.queryengine.plan.relational.sql.ast.Expression;
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.FetchDevice;
import org.apache.iotdb.db.queryengine.plan.relational.sql.ast.ShowDevice;
import org.apache.iotdb.db.queryengine.plan.relational.sql.parser.SqlParser;
+import org.apache.iotdb.db.queryengine.plan.scheduler.AsyncSendPlanNodeHandler;
import org.apache.iotdb.db.schemaengine.table.DataNodeTableCache;
import org.apache.iotdb.rpc.TSStatusCode;
@@ -135,7 +137,10 @@ public class TableDeviceSchemaFetcher {
tsBlock = coordinator.getQueryExecution(queryId).getBatchResult();
} catch (final IoTDBException e) {
t = e;
- throw new RuntimeException("Fetch Table Device Schema failed. ", e);
+ throw AsyncSendPlanNodeHandler.needRetry(e)
+ ? new IoTDBRuntimeException(
+ e.getCause(),
TSStatusCode.SYNC_CONNECTION_ERROR.getStatusCode())
+ : new RuntimeException("Fetch Table Device Schema failed. ", e);
}
if (!tsBlock.isPresent() || tsBlock.get().isEmpty()) {
break;
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 a98194fccc4..2d2e85eef44 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
@@ -96,7 +96,7 @@ public class AsyncSendPlanNodeHandler implements
AsyncMethodCallback<TSendBatchP
}
}
- private boolean needRetry(Exception e) {
+ public static boolean needRetry(Exception e) {
Throwable rootCause = ExceptionUtils.getRootCause(e);
// 1. connection broken it means that the remote node may go offline
// 2. or the method call is time out
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/ErrorHandlingUtils.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/ErrorHandlingUtils.java
index 49a8086d635..0a0d6f921d5 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/ErrorHandlingUtils.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/utils/ErrorHandlingUtils.java
@@ -114,7 +114,8 @@ public class ErrorHandlingUtils {
|| status.getCode() ==
TSStatusCode.COLUMN_NOT_EXISTS.getStatusCode()
|| status.getCode() ==
TSStatusCode.COLUMN_ALREADY_EXISTS.getStatusCode()
|| status.getCode() ==
TSStatusCode.UDF_LOAD_CLASS_ERROR.getStatusCode()
- || status.getCode() ==
TSStatusCode.PLAN_FAILED_NETWORK_PARTITION.getStatusCode()) {
+ || status.getCode() ==
TSStatusCode.PLAN_FAILED_NETWORK_PARTITION.getStatusCode()
+ || status.getCode() ==
TSStatusCode.SYNC_CONNECTION_ERROR.getStatusCode()) {
LOGGER.info(message);
} else {
LOGGER.warn(message, e);
diff --git
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/StatusUtils.java
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/StatusUtils.java
index 9a3a0b767b2..cd355b34d8c 100644
---
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/StatusUtils.java
+++
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/StatusUtils.java
@@ -66,6 +66,7 @@ public class StatusUtils {
NEED_RETRY.add(TSStatusCode.LACK_PARTITION_ALLOCATION.getStatusCode());
NEED_RETRY.add(TSStatusCode.NO_ENOUGH_DATANODE.getStatusCode());
NEED_RETRY.add(TSStatusCode.TOO_MANY_CONCURRENT_QUERIES_ERROR.getStatusCode());
+ NEED_RETRY.add(TSStatusCode.SYNC_CONNECTION_ERROR.getStatusCode());
}
/**
@@ -242,4 +243,8 @@ public class StatusUtils {
return NEED_RETRY.contains(statusCode)
|| (COMMON_CONFIG.isRetryForUnknownErrors() &&
UNKNOWN_ERRORS.contains(statusCode));
}
+
+ public static boolean isUnknownError(int statusCode) {
+ return UNKNOWN_ERRORS.contains(statusCode);
+ }
}