Fix root inspection error

This commit is contained in:
tino247
2023-03-02 19:13:28 +00:00
committed by ob-robot
parent 10902c8c01
commit 1ce10fdb94
6 changed files with 143 additions and 22 deletions

View File

@ -17,6 +17,7 @@
#include "lib/time/ob_time_utility.h"
#include "lib/oblog/ob_log_module.h"
#include "share/ob_cluster_version.h" // for GET_MIN_DATA_VERSION
#include "lib/mysqlclient/ob_isql_client.h"
namespace oceanbase
{
using namespace common;
@ -112,5 +113,82 @@ int ObShareUtil::generate_arb_replica_num(
}
return ret;
}
int ObShareUtil::fetch_current_cluster_version(
common::ObISQLClient &client,
uint64_t &cluster_version)
{
int ret = OB_SUCCESS;
ObSqlString sql;
sqlclient::ObMySQLResult *result = NULL;
SMART_VAR(ObMySQLProxy::MySQLResult, res) {
if (OB_FAIL(sql.assign_fmt(
"select value from %s where name = '%s'",
OB_ALL_SYS_PARAMETER_TNAME, "min_observer_version"))) {
LOG_WARN("fail to assign fmt", KR(ret), K(sql));
} else if (OB_FAIL(client.read(res, OB_SYS_TENANT_ID, sql.ptr()))) {
LOG_WARN("execute sql failed", KR(ret), K(sql));
} else if (OB_ISNULL(result = res.get_result())) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("fail to get result", KR(ret));
} else if (OB_FAIL(result->next())) {
if (OB_ITER_END == ret) {
ret = OB_ENTRY_NOT_EXIST;
LOG_WARN("min_observer_version not exist, may be in bootstrap stage", KR(ret));
} else {
LOG_WARN("fail to get next", KR(ret));
}
} else {
ObString value;
EXTRACT_VARCHAR_FIELD_MYSQL(*result, "value", value);
if (FAILEDx(ObClusterVersion::get_version(value, cluster_version))) {
LOG_WARN("fail to get version", KR(ret), K(value));
}
}
} // end SMART_VAR
return ret;
}
int ObShareUtil::fetch_current_data_version(
common::ObISQLClient &client,
const uint64_t tenant_id,
uint64_t &data_version)
{
int ret = OB_SUCCESS;
ObSqlString sql;
sqlclient::ObMySQLResult *result = NULL;
const uint64_t exec_tenant_id = gen_meta_tenant_id(tenant_id);
SMART_VAR(ObMySQLProxy::MySQLResult, res) {
if (OB_UNLIKELY(OB_INVALID_TENANT_ID == tenant_id
|| OB_INVALID_TENANT_ID == exec_tenant_id)) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("tenant_id is invalid", KR(ret), K(tenant_id), K(exec_tenant_id));
} else if (OB_FAIL(sql.assign_fmt(
"select value from %s where name = '%s'",
OB_TENANT_PARAMETER_TNAME, "compatible"))) {
LOG_WARN("fail to assign fmt", KR(ret), K(tenant_id), K(sql));
} else if (OB_FAIL(client.read(res, exec_tenant_id, sql.ptr()))) {
LOG_WARN("execute sql failed", KR(ret), K(tenant_id), K(sql));
} else if (OB_ISNULL(result = res.get_result())) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("fail to get result", KR(ret), K(tenant_id));
} else if (OB_FAIL(result->next())) {
if (OB_ITER_END == ret) {
ret = OB_ENTRY_NOT_EXIST;
LOG_WARN("compatible not exist, create tenant process may be doing or failed ",
KR(ret), K(tenant_id));
} else {
LOG_WARN("fail to get next", KR(ret), K(tenant_id));
}
} else {
ObString value;
EXTRACT_VARCHAR_FIELD_MYSQL(*result, "value", value);
if (FAILEDx(ObClusterVersion::get_version(value, data_version))) {
LOG_WARN("fail to get version", KR(ret), K(value));
}
}
} // end SMART_VAR
return ret;
}
} //end namespace share
} //end namespace oceanbase