bug fix: db_id displayed by SQL audit and plan stat is inconsistent.

This commit is contained in:
obdev 2024-02-09 06:58:58 +00:00 committed by ob-robot
parent 1b95cb059a
commit 8bc44950fe
8 changed files with 16 additions and 14 deletions

View File

@ -1205,8 +1205,8 @@ const uint64_t OB_PUBLIC_SCHEMA_ID = OB_MIN_INNER_DATABASE_ID + 5;
const uint64_t OB_ORA_SYS_DATABASE_ID = OB_MIN_INNER_DATABASE_ID + 6;
const uint64_t OB_ORA_LBACSYS_DATABASE_ID = OB_MIN_INNER_DATABASE_ID + 7;
const uint64_t OB_ORA_AUDITOR_DATABASE_ID = OB_MIN_INNER_DATABASE_ID + 8;
// not actual database, only for using and creating outlines without specified database
const uint64_t OB_OUTLINE_DEFAULT_DATABASE_ID = OB_MIN_INNER_DATABASE_ID + 9;
// use only if the 'use database' command is not executed.
const uint64_t OB_MOCK_DEFAULT_DATABASE_ID = OB_MIN_INNER_DATABASE_ID + 9;
const uint64_t OB_CTE_DATABASE_ID = OB_MIN_INNER_DATABASE_ID + 10;
const uint64_t OB_MAX_INNER_DATABASE_ID = 202000;
@ -1216,7 +1216,7 @@ const char* const OB_MYSQL_SCHEMA_NAME = "mysql";
const char* const OB_RECYCLEBIN_SCHEMA_NAME = "__recyclebin"; //hidden
const char* const OB_PUBLIC_SCHEMA_NAME = "__public"; //hidden
const char* const OB_ORA_SYS_SCHEMA_NAME = "SYS";
const char* const OB_OUTLINE_DEFAULT_DATABASE_NAME = "__outline_default_db";
const char* const OB_MOCK_DEFAULT_DATABASE_NAME = "__outline_default_db";
const char* const OB_TEST_SCHEMA_NAME = "test";
OB_INLINE bool is_oceanbase_sys_database_id(const uint64_t database_id)
@ -1251,7 +1251,7 @@ OB_INLINE bool is_public_database_id(const uint64_t database_id)
OB_INLINE bool is_outline_database_id(const uint64_t database_id)
{
return OB_OUTLINE_DEFAULT_DATABASE_ID == database_id;
return OB_MOCK_DEFAULT_DATABASE_ID == database_id;
}
OB_INLINE bool is_inner_db(const uint64_t db_id)

View File

@ -61,9 +61,9 @@ int ObTenantVirtualOutlineBase::set_database_infos_and_get_value(uint64_t databa
if (OB_ISNULL(schema_guard_) || OB_ISNULL(allocator_)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("parameter is NULL", K(ret), K(schema_guard_), K(allocator_));
} else if (database_id == OB_OUTLINE_DEFAULT_DATABASE_ID) {
} else if (database_id == OB_MOCK_DEFAULT_DATABASE_ID) {
// virtual outline database
if (OB_FAIL(ob_write_string(*allocator_, OB_OUTLINE_DEFAULT_DATABASE_NAME, db_name))) {
if (OB_FAIL(ob_write_string(*allocator_, OB_MOCK_DEFAULT_DATABASE_NAME, db_name))) {
LOG_WARN("fail to write string", K(ret), K(db_schema->get_database_name_str()));
} else if (FALSE_IT(db_info.db_name_ = db_name)) {
} else if (FALSE_IT(db_info.is_recycle_ = false)) {
@ -180,7 +180,7 @@ int ObTenantVirtualOutline::fill_cells(const ObOutlineInfo *outline_info)
case DATABASE_NAME : {
DBInfo db_info;
if (is_outline_database_id(outline_info->get_database_id())) {
cells[cell_idx].set_varchar(OB_OUTLINE_DEFAULT_DATABASE_NAME);
cells[cell_idx].set_varchar(OB_MOCK_DEFAULT_DATABASE_NAME);
cells[cell_idx].set_collation_type(
ObCharset::get_default_collation(ObCharset::get_default_charset()));
} else if (OB_FAIL(database_infos_.get_refactored(outline_info->get_database_id(),

View File

@ -31869,8 +31869,8 @@ int ObDDLService::drop_outline(const obrpc::ObDropOutlineArg &arg)
uint64_t database_id = OB_INVALID_ID;
if (OB_SUCC(ret)) {
bool database_exist = false;
if (database_name == OB_OUTLINE_DEFAULT_DATABASE_NAME) {
database_id = OB_OUTLINE_DEFAULT_DATABASE_ID;
if (database_name == OB_MOCK_DEFAULT_DATABASE_NAME) {
database_id = OB_MOCK_DEFAULT_DATABASE_ID;
database_exist = true;
} else if (OB_FAIL(schema_service_->check_database_exist(tenant_id,
database_name,

View File

@ -6412,9 +6412,9 @@ int ObRootService::create_outline(const ObCreateOutlineArg &arg)
const ObDatabaseSchema *db_schema = NULL;
if (OB_FAIL(ddl_service_.get_tenant_schema_guard_with_version_in_inner_table(tenant_id, schema_guard))) {
LOG_WARN("get schema guard in inner table failed", K(ret));
} else if (database_name == OB_OUTLINE_DEFAULT_DATABASE_NAME) {
} else if (database_name == OB_MOCK_DEFAULT_DATABASE_NAME) {
// if not specify database, set default database name and database id;
outline_info.set_database_id(OB_OUTLINE_DEFAULT_DATABASE_ID);
outline_info.set_database_id(OB_MOCK_DEFAULT_DATABASE_ID);
} else if (OB_FAIL(schema_guard.get_database_schema(tenant_id, database_name, db_schema))) {
LOG_WARN("get database schema failed", K(ret));
} else if (NULL == db_schema) {

View File

@ -2511,7 +2511,7 @@ OB_INLINE int ObSql::handle_text_query(const ObString &stmt, ObSqlCtx &context,
LOG_WARN("Failed to get database id", K(ret));
} else if (FALSE_IT(context.spm_ctx_.bl_key_.db_id_ =
(database_id == OB_INVALID_ID) ?
OB_OUTLINE_DEFAULT_DATABASE_ID:
OB_MOCK_DEFAULT_DATABASE_ID:
database_id)) {
// do nothing
} else if (!use_plan_cache) {

View File

@ -2308,7 +2308,7 @@ OB_INLINE int ObPlanCache::construct_plan_cache_key(ObSQLSessionInfo &session,
int ret = OB_SUCCESS;
uint64_t database_id = OB_INVALID_ID;
session.get_database_id(database_id);
pc_key.db_id_ = (database_id == OB_INVALID_ID) ? OB_OUTLINE_DEFAULT_DATABASE_ID : database_id;
pc_key.db_id_ = (database_id == OB_INVALID_ID) ? OB_MOCK_DEFAULT_DATABASE_ID : database_id;
pc_key.namespace_ = ns;
pc_key.sys_vars_str_ = session.get_sys_var_in_pc_str();
pc_key.config_str_ = session.get_config_in_pc_str();

View File

@ -63,7 +63,7 @@ int ObOutlineResolver::resolve_outline_name(const ParseNode *node, ObString &db_
true : (mode != OB_LOWERCASE_AND_INSENSITIVE);
if (NULL == db_name_node) {
if (session_info_->get_database_name().empty()) {
db_name = OB_OUTLINE_DEFAULT_DATABASE_NAME;
db_name = OB_MOCK_DEFAULT_DATABASE_NAME;
} else {
db_name = session_info_->get_database_name();
}

View File

@ -1879,6 +1879,8 @@ const ObAuditRecordData &ObSQLSessionInfo::get_final_audit_record(
if (OB_FAIL(get_database_id(audit_record_.db_id_))) {
LOG_WARN("fail to get database id", K(ret));
} else if (audit_record_.db_id_ == OB_INVALID_ID) {
audit_record_.db_id_ = OB_MOCK_DEFAULT_DATABASE_ID;
}
} else if (EXECUTE_REMOTE == mode || EXECUTE_DIST == mode) {
audit_record_.tenant_name_ = NULL;