diff --git a/src/observer/report/ob_tablet_table_updater.cpp b/src/observer/report/ob_tablet_table_updater.cpp index e45b71ef1a..a227030dff 100644 --- a/src/observer/report/ob_tablet_table_updater.cpp +++ b/src/observer/report/ob_tablet_table_updater.cpp @@ -496,7 +496,8 @@ int ObTabletTableUpdater::batch_process_tasks( update_tablet_checksums, update_tablet_tasks, remove_tablet_tasks))) { - LOG_ERROR("generate_tasks failed", KR(ret), "batch_tasks count", batch_tasks.count(), + //There is a situation where there are too many tablet holds and cannot be obtained + LOG_WARN("generate_tasks failed", KR(ret), "batch_tasks count", batch_tasks.count(), "update_tablet_replicas", update_tablet_replicas.count(), "remove_tablet_replicas", remove_tablet_replicas.count(), "update_tablet_checksums", update_tablet_checksums.count(), diff --git a/src/rootserver/ob_ddl_service.cpp b/src/rootserver/ob_ddl_service.cpp index bb9db61fca..7be38fa1ce 100755 --- a/src/rootserver/ob_ddl_service.cpp +++ b/src/rootserver/ob_ddl_service.cpp @@ -22325,14 +22325,15 @@ int ObDDLService::standby_create_root_key( LOG_WARN("invalid argument", KR(ret), K(tenant_id), K(arg)); } else { obrpc::RootKeyType key_type = obrpc::RootKeyType::INVALID; - RootKeyValue root_key; - if (OB_FAIL(get_root_key_from_primary(arg, tenant_id, key_type, root_key))) { + common::ObString root_key; + ObArenaAllocator allocator("root_key"); + + if (OB_FAIL(get_root_key_from_primary(arg, tenant_id, key_type, root_key, allocator))) { LOG_WARN("failed to get root key", KR(ret), K(arg), K(tenant_id)); } else { obrpc::ObRootKeyArg root_key_arg; obrpc::ObRootKeyResult dummy_result; - ObString key_value_str(root_key.ptr()); - if (OB_FAIL(root_key_arg.init(tenant_id, key_type, key_value_str))) { + if (OB_FAIL(root_key_arg.init(tenant_id, key_type, root_key))) { LOG_WARN("failed to init root key arg", KR(ret), K(tenant_id), K(key_type), K(root_key)); } else if (OB_FAIL(notify_root_key(*rpc_proxy_, root_key_arg, addrs, dummy_result))) { LOG_WARN("fail to notify root key", K(ret), K(root_key_arg)); @@ -22344,7 +22345,8 @@ int ObDDLService::standby_create_root_key( int ObDDLService::get_root_key_from_primary(const obrpc::ObCreateTenantArg &arg, const uint64_t tenant_id, obrpc::RootKeyType &key_type, - RootKeyValue &key_value) + common::ObString &key_value, + common::ObIAllocator &allocator) { int ret = OB_SUCCESS; if (OB_FAIL(check_inner_stat())) { @@ -22368,7 +22370,7 @@ int ObDDLService::get_root_key_from_primary(const obrpc::ObCreateTenantArg &arg, LOG_WARN("failed to init for get", KR(ret), K(primary_tenant_id)); } if (FAILEDx(get_root_key_from_obs(cluster_id, *rpc_proxy_, root_key_arg, - addr_list, key_type, key_value))) { + addr_list, key_type, key_value, allocator))) { LOG_WARN("failed to get root key from obs", KR(ret), K(cluster_id), K(root_key_arg), K(addr_list)); } @@ -22413,7 +22415,8 @@ int ObDDLService::get_root_key_from_obs( const obrpc::ObRootKeyArg &arg, const common::ObIArray &addrs, obrpc::RootKeyType &key_type, - RootKeyValue &key_value) + common::ObString &key_value, + common::ObIAllocator &allocator) { int ret = OB_SUCCESS; key_type = obrpc::RootKeyType::INVALID; @@ -22465,12 +22468,13 @@ int ObDDLService::get_root_key_from_obs( if (OB_UNLIKELY(obrpc::RootKeyType::INVALID != key_type)) { ret = OB_ERR_UNEXPECTED; LOG_WARN("root key type is conflict", KR(ret), K(key_type), KPC(rpc_result)); - } else if (OB_FAIL(key_value.assign(rpc_result->root_key_))) { + } else if (OB_FAIL(deep_copy_ob_string(allocator, rpc_result->root_key_, key_value))) { LOG_WARN("failed to assign result", KR(ret), KPC(rpc_result)); - } else { + } + if (OB_SUCC(ret)) { key_type = rpc_result->key_type_; } - } else if (OB_UNLIKELY(0 != key_value.str().compare(rpc_result->root_key_))) { + } else if (OB_UNLIKELY(0 != key_value.compare(rpc_result->root_key_))) { ret = OB_ERR_UNEXPECTED; LOG_WARN("root key is conflict", KR(ret), K(key_value), KPC(rpc_result)); } diff --git a/src/rootserver/ob_ddl_service.h b/src/rootserver/ob_ddl_service.h index 050426ac21..b1603bab89 100644 --- a/src/rootserver/ob_ddl_service.h +++ b/src/rootserver/ob_ddl_service.h @@ -99,7 +99,6 @@ class ObDDLService { public: typedef std::pair LSTabletID; - typedef ObFixedLengthString RootKeyValue; public: friend class ObTableGroupHelp; friend class ObStandbyClusterSchemaProcessor; @@ -1924,14 +1923,16 @@ public: int check_need_create_root_key(const obrpc::ObCreateTenantArg &arg, bool &need_create); int get_root_key_from_primary(const obrpc::ObCreateTenantArg &arg, const uint64_t tenant_id, obrpc::RootKeyType &key_type, - RootKeyValue &key_value); + common::ObString &key_value, + common::ObIAllocator &allocator); static int get_root_key_from_obs( const uint64_t &cluster_id, obrpc::ObSrvRpcProxy &rpc_proxy, const obrpc::ObRootKeyArg &arg, const common::ObIArray &addrs, obrpc::RootKeyType &key_type, - RootKeyValue &key_value); + common::ObString &key_value, + common::ObIAllocator &allocator); int standby_create_root_key( const uint64_t tenant_id, const obrpc::ObCreateTenantArg &arg,