fix get root key error

This commit is contained in:
maosy
2023-09-09 10:48:13 +00:00
committed by ob-robot
parent 7695689b0a
commit c4e12acbc6
3 changed files with 20 additions and 14 deletions

View File

@ -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(),

View File

@ -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<common::ObAddr> &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));
}

View File

@ -99,7 +99,6 @@ class ObDDLService
{
public:
typedef std::pair<share::ObLSID, common::ObTabletID> LSTabletID;
typedef ObFixedLengthString<OB_ROOT_KEY_LEN + 1> 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<common::ObAddr> &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,