[FEAT MERGE] implement mysql dblink and read consistency

Co-authored-by: xianyu-w <707512433@qq.com>
Co-authored-by: sdc <njucssdc@gmail.com>
Co-authored-by: seuwebber <webber_code@163.com>
This commit is contained in:
cqliang1995
2023-05-09 18:32:03 +00:00
committed by ob-robot
parent 38b78ad442
commit 4108e781d4
132 changed files with 2726 additions and 818 deletions

View File

@ -964,12 +964,100 @@ int ObUpgradeFor4200Processor::post_upgrade()
int ret = OB_SUCCESS;
if (OB_FAIL(check_inner_stat())) {
LOG_WARN("fail to check inner stat", KR(ret));
} else if (OB_FAIL(post_upgrade_for_grant_create_database_link_priv())) {
LOG_WARN("grant create database link failed", K(ret));
} else if (OB_FAIL(post_upgrade_for_grant_drop_database_link_priv())) {
LOG_WARN("grant drop database link failed", K(ret));
} else if (OB_FAIL(post_upgrade_for_heartbeat_and_server_zone_op_service())) {
LOG_WARN("post upgrade for heartbeat and server zone op service failed", KR(ret));
}
return ret;
}
int ObUpgradeFor4200Processor::post_upgrade_for_grant_create_database_link_priv()
{
int ret = OB_SUCCESS;
ObString sql("grant create database link on *.* to root");
int64_t start = ObTimeUtility::current_time();
int64_t affected_rows = 0;
ObSchemaGetterGuard schema_guard;
common::ObSEArray<const ObUserInfo *, 4, ModulePageAllocator, true> user_infos;
ObString root_name("root");
bool has_priv = true;
if (OB_ISNULL(schema_service_)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("unexpected null ptr", K(ret));
} else if (OB_FAIL(schema_service_->get_tenant_schema_guard(tenant_id_, schema_guard))) {
LOG_WARN("failed to get schema guard", K(ret));
} else if (OB_FAIL(schema_guard.get_user_info(tenant_id_, root_name, user_infos))) {
LOG_WARN("get root user failed", K(ret));
} else {
for (int64_t i = 0; has_priv && OB_SUCC(ret) && i < user_infos.count(); ++i) {
const ObUserInfo *user_info = user_infos.at(i);
if (OB_ISNULL(user_info)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("unexpected null ptr", K(ret));
} else {
has_priv = has_priv && (OB_PRIV_CREATE_DATABASE_LINK & user_info->get_priv_set());
}
}
if (OB_FAIL(ret) || has_priv) {
// do nothing
} else if (OB_ISNULL(sql_proxy_)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("unexpected null ptr", K(ret));
} else if (OB_FAIL(sql_proxy_->write(tenant_id_, sql.ptr(), affected_rows))) {
LOG_WARN("execute sql failed", K(ret), K(sql));
} else {
LOG_TRACE("execute sql", KR(ret), K(tenant_id_), K(sql), K(affected_rows));
}
}
LOG_INFO("set create database link priv", K(ret), K(tenant_id_), K(affected_rows), "cost", ObTimeUtility::current_time() - start);
return ret;
}
int ObUpgradeFor4200Processor::post_upgrade_for_grant_drop_database_link_priv()
{
int ret = OB_SUCCESS;
ObString sql("grant drop database link on *.* to root");
int64_t start = ObTimeUtility::current_time();
int64_t affected_rows = 0;
ObSchemaGetterGuard schema_guard;
common::ObSEArray<const ObUserInfo *, 4, ModulePageAllocator, true> user_infos;
ObString root_name("root");
bool has_priv = true;
if (OB_ISNULL(schema_service_)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("unexpected null ptr", K(ret));
} else if (OB_FAIL(schema_service_->get_tenant_schema_guard(tenant_id_, schema_guard))) {
LOG_WARN("failed to get schema guard", K(ret));
} else if (OB_FAIL(schema_guard.get_user_info(tenant_id_, root_name, user_infos))) {
LOG_WARN("get root user failed", K(ret));
} else {
for (int64_t i = 0; has_priv && OB_SUCC(ret) && i < user_infos.count(); ++i) {
const ObUserInfo *user_info = user_infos.at(i);
if (OB_ISNULL(user_info)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("unexpected null ptr", K(ret));
} else {
has_priv = has_priv && (OB_PRIV_DROP_DATABASE_LINK & user_info->get_priv_set());
}
}
if (OB_FAIL(ret) || has_priv) {
// do nothing
} else if (OB_ISNULL(sql_proxy_)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("unexpected null ptr", K(ret));
} else if (OB_FAIL(sql_proxy_->write(tenant_id_, sql.ptr(), affected_rows))) {
LOG_WARN("execute sql failed", K(ret), K(sql));
} else {
LOG_TRACE("execute sql", KR(ret), K(tenant_id_), K(sql), K(affected_rows));
}
}
LOG_INFO("set drop database link priv", K(ret), K(tenant_id_), K(affected_rows), "cost", ObTimeUtility::current_time() - start);
return ret;
}
int ObUpgradeFor4200Processor::post_upgrade_for_heartbeat_and_server_zone_op_service()
{
int ret = OB_SUCCESS;