diff --git a/be/src/common/config.cpp b/be/src/common/config.cpp index cf4ec79f07..d090b3a451 100644 --- a/be/src/common/config.cpp +++ b/be/src/common/config.cpp @@ -1230,6 +1230,9 @@ DEFINE_mBool(skip_loading_stale_rowset_meta, "false"); DEFINE_Bool(enable_file_logger, "true"); +// The time out milliseconds for remote fetch schema RPC, default 60s +DEFINE_mInt64(fetch_remote_schema_rpc_timeout_ms, "60000"); + // clang-format off #ifdef BE_TEST // test s3 diff --git a/be/src/common/config.h b/be/src/common/config.h index 55bee9e17c..61e0e2673b 100644 --- a/be/src/common/config.h +++ b/be/src/common/config.h @@ -1313,6 +1313,8 @@ DECLARE_mBool(skip_loading_stale_rowset_meta); // Disable this option will no longer use file to record log. // Only works when starting BE with --console. DECLARE_Bool(enable_file_logger); +// The time out milliseconds for remote fetch schema RPC +DECLARE_mInt64(fetch_remote_schema_rpc_timeout_ms); #ifdef BE_TEST // test s3 diff --git a/be/src/service/internal_service.cpp b/be/src/service/internal_service.cpp index f9f788a118..76c86218bb 100644 --- a/be/src/service/internal_service.cpp +++ b/be/src/service/internal_service.cpp @@ -1084,6 +1084,7 @@ void PInternalServiceImpl::fetch_remote_tablet_schema(google::protobuf::RpcContr ExecEnv::GetInstance()->brpc_internal_client_cache()->get_client( host, brpc_port)); rpc_contexts[i].cid = rpc_contexts[i].cntl.call_id(); + rpc_contexts[i].cntl.set_timeout_ms(config::fetch_remote_schema_rpc_timeout_ms); stub->fetch_remote_tablet_schema(&rpc_contexts[i].cntl, &remote_request, &rpc_contexts[i].response, brpc::DoNothing()); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/common/util/FetchRemoteTabletSchemaUtil.java b/fe/fe-core/src/main/java/org/apache/doris/common/util/FetchRemoteTabletSchemaUtil.java index 808b4b2a55..db9700f744 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/common/util/FetchRemoteTabletSchemaUtil.java +++ b/fe/fe-core/src/main/java/org/apache/doris/common/util/FetchRemoteTabletSchemaUtil.java @@ -32,6 +32,7 @@ import org.apache.doris.proto.InternalService.PFetchRemoteSchemaResponse; import org.apache.doris.proto.InternalService.PTabletsLocation; import org.apache.doris.proto.OlapFile.ColumnPB; import org.apache.doris.proto.OlapFile.TabletSchemaPB; +import org.apache.doris.qe.ConnectContext; import org.apache.doris.rpc.BackendServiceProxy; import org.apache.doris.rpc.RpcException; import org.apache.doris.system.Backend; @@ -116,7 +117,8 @@ public class FetchRemoteTabletSchemaUtil { .fetchRemoteTabletSchemaAsync(be.getBrpcAddress(), request); PFetchRemoteSchemaResponse response = null; try { - response = future.get(60, TimeUnit.SECONDS); + response = future.get( + ConnectContext.get().getSessionVariable().fetchRemoteSchemaTimeoutSeconds, TimeUnit.SECONDS); TStatusCode code = TStatusCode.findByValue(response.getStatus().getStatusCode()); String errMsg; if (code != TStatusCode.OK) { diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java index 376e58222a..471d7cd086 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java +++ b/fe/fe-core/src/main/java/org/apache/doris/qe/SessionVariable.java @@ -571,6 +571,8 @@ public class SessionVariable implements Serializable, Writable { public static final String LIMIT_ROWS_FOR_SINGLE_INSTANCE = "limit_rows_for_single_instance"; + public static final String FETCH_REMOTE_SCHEMA_TIMEOUT_SECONDS = "fetch_remote_schema_timeout_seconds"; + // CLOUD_VARIABLES_BEGIN public static final String CLOUD_CLUSTER = "cloud_cluster"; public static final String DISABLE_EMPTY_PARTITION_PRUNE = "disable_empty_partition_prune"; @@ -1783,6 +1785,10 @@ public class SessionVariable implements Serializable, Writable { @VariableMgr.VarAttr(name = MIN_REVOCABLE_MEM, fuzzy = true) public long minRevocableMem = 32 * 1024 * 1024; + // fetch remote schema rpc timeout + @VariableMgr.VarAttr(name = FETCH_REMOTE_SCHEMA_TIMEOUT_SECONDS, fuzzy = true) + public long fetchRemoteSchemaTimeoutSeconds = 120; + @VariableMgr.VarAttr( name = ENABLE_JOIN_SPILL, description = {"控制是否启用join算子落盘。默认为 false。",