From b148d16cd5d07e75bae95519a595b1ea3cebca52 Mon Sep 17 00:00:00 2001 From: hanr881 <1741282579@qq.com> Date: Thu, 2 Jan 2025 19:45:37 +0000 Subject: [PATCH] [CP] to issue<2024122500106636323>:fix 4016 when hit disk cache of system package --- src/pl/ob_pl_compile.cpp | 5 +++-- src/pl/ob_pl_persistent.cpp | 9 ++++++--- src/pl/ob_pl_persistent.h | 10 +++++++--- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/pl/ob_pl_compile.cpp b/src/pl/ob_pl_compile.cpp index 090ba45a6..0d619a626 100644 --- a/src/pl/ob_pl_compile.cpp +++ b/src/pl/ob_pl_compile.cpp @@ -499,7 +499,7 @@ int ObPLCompiler::compile( lib::ObMallocHookAttrGuard malloc_guard(lib::ObMemAttr(MTL_ID(), GET_PL_MOD_STRING(OB_PL_CODE_GEN))); ObRoutinePersistentInfo::ObPLOperation op = ObRoutinePersistentInfo::ObPLOperation::NONE; ObRoutinePersistentInfo routine_storage( - MTL_ID(), routine.get_database_id(), session_info_.get_database_id(), func_ast.get_id()); + MTL_ID(), routine.get_database_id(), session_info_.get_database_id(), func_ast.get_id(), routine.get_tenant_id()); bool exist_same_name_obj_with_public_synonym = false; OZ (ObRoutinePersistentInfo::has_same_name_dependency_with_public_synonym(schema_guard_, func_ast.get_dependency_table(), @@ -776,7 +776,8 @@ int ObPLCompiler::generate_package(const ObString &exec_env, ObPLPackageAST &pac ObRoutinePersistentInfo routine_storage(MTL_ID(), session_info_.get_database_id(), session_info_.get_database_id(), - package.get_id()); + package.get_id(), + get_tenant_id_by_object_id(package.get_id())); ObRoutinePersistentInfo::ObPLOperation op = ObRoutinePersistentInfo::ObPLOperation::NONE; bool exist_same_name_obj_with_public_synonym = false; OZ (ObRoutinePersistentInfo::has_same_name_dependency_with_public_synonym(schema_guard_, diff --git a/src/pl/ob_pl_persistent.cpp b/src/pl/ob_pl_persistent.cpp index afa8e9f8a..8773ce6dc 100644 --- a/src/pl/ob_pl_persistent.cpp +++ b/src/pl/ob_pl_persistent.cpp @@ -569,8 +569,11 @@ int ObRoutinePersistentInfo::read_dll_from_disk(ObSQLSessionInfo *session_info, if (OB_SUCC(ret)) { bool match = false; int64_t tenant_schema_version = OB_INVALID_VERSION; - if (OB_FAIL(schema_guard.get_schema_version(tenant_id_, tenant_schema_version))) { - LOG_WARN("fail to get schema version"); + if (OB_INVALID_ID == tenant_id_belongs_) { + ret = OB_ERR_UNEXPECTED; + LOG_WARN("unexpected tenant id", K(ret)); + } else if (OB_FAIL(schema_guard.get_schema_version(tenant_id_belongs_, tenant_schema_version))) { + LOG_WARN("fail to get schema version", K(ret), K(tenant_id_belongs_)); } else if (merge_version == tenant_schema_version) { match = true; op = ObRoutinePersistentInfo::ObPLOperation::NONE; @@ -592,7 +595,7 @@ int ObRoutinePersistentInfo::read_dll_from_disk(ObSQLSessionInfo *session_info, int8_t level = 0; int16_t id = 0; if (OB_FAIL(decode_dll(*session_info, schema_guard, exec_env, unit_ast, unit, binary.ptr(), binary.length(), pos, level, id))) { - LOG_WARN("fail to decode dll", K(ret), K(level), K(id)); + LOG_WARN("fail to decode dll", K(ret), K(level), K(id), K(merge_version), K(tenant_schema_version)); } else if (0 != level || 0 != id) { ret = OB_ERR_UNEXPECTED; LOG_WARN("fail to decode dll", K(ret), K(level), K(id)); diff --git a/src/pl/ob_pl_persistent.h b/src/pl/ob_pl_persistent.h index 764fda6f2..2f116190a 100644 --- a/src/pl/ob_pl_persistent.h +++ b/src/pl/ob_pl_persistent.h @@ -80,12 +80,14 @@ public: #else arch_type_(ARCH_TYPE_DEF[ObPLArchType::OB_X86_ARCH_TYPE]), #endif - allocator_(ObMemAttr(MTL_ID() == OB_INVALID_TENANT_ID ? OB_SYS_TENANT_ID : MTL_ID(), GET_PL_MOD_STRING(OB_PL_JIT))) + allocator_(ObMemAttr(MTL_ID() == OB_INVALID_TENANT_ID ? OB_SYS_TENANT_ID : MTL_ID(), GET_PL_MOD_STRING(OB_PL_JIT))), + tenant_id_belongs_(OB_INVALID_ID) {} ObRoutinePersistentInfo(uint64_t tenant_id, uint64_t database_id, uint64_t compile_db_id, - uint64_t key_id) + uint64_t key_id, + uint64_t tenant_id_belongs) : tenant_id_(tenant_id), database_id_(database_id), compile_db_id_(compile_db_id), @@ -95,7 +97,8 @@ public: #else arch_type_(ARCH_TYPE_DEF[ObPLArchType::OB_X86_ARCH_TYPE]), #endif - allocator_(ObMemAttr(tenant_id_, GET_PL_MOD_STRING(OB_PL_JIT))) + allocator_(ObMemAttr(tenant_id_, GET_PL_MOD_STRING(OB_PL_JIT))), + tenant_id_belongs_(tenant_id_belongs) {} int64_t get_head_size() { return 1 + 1 + 2 + 2;/* 8bit flags + 8bit level + 8bit id + 8bit nums*/ } @@ -166,6 +169,7 @@ private: ObString arch_type_; ObArenaAllocator allocator_; + uint64_t tenant_id_belongs_; }; }