From c01f6650be4c56a717ffb39886fa1e3131264d7f Mon Sep 17 00:00:00 2001 From: tushicheng <18829573815@163.com> Date: Mon, 4 Nov 2024 13:44:03 +0000 Subject: [PATCH] Fix errors of no unity build related to common_realloc. --- .../src/lib/alloc/ob_tenant_ctx_allocator.cpp | 8 +++--- .../src/lib/alloc/ob_tenant_ctx_allocator.h | 18 ++++++++++--- deps/oblib/src/lib/alloc/object_mgr.cpp | 2 +- .../src/lib/allocator/ob_allocator_v2.cpp | 26 ++++++++++++++++--- 4 files changed, 42 insertions(+), 12 deletions(-) diff --git a/deps/oblib/src/lib/alloc/ob_tenant_ctx_allocator.cpp b/deps/oblib/src/lib/alloc/ob_tenant_ctx_allocator.cpp index 99cfe081a..65f9cc089 100644 --- a/deps/oblib/src/lib/alloc/ob_tenant_ctx_allocator.cpp +++ b/deps/oblib/src/lib/alloc/ob_tenant_ctx_allocator.cpp @@ -35,9 +35,9 @@ void *ObTenantCtxAllocator::alloc(const int64_t size, const ObMemAttr &attr) abort_unless(attr.ctx_id_ == ctx_id_); void *ptr = NULL; if (OB_LIKELY(ObSubCtxIds::MAX_SUB_CTX_ID == attr.sub_ctx_id_)) { - ptr = common_realloc(NULL, size, attr, *this, obj_mgr_); + ptr = inner_common_realloc(NULL, size, attr, *this, obj_mgr_); } else if (OB_UNLIKELY(attr.sub_ctx_id_ < ObSubCtxIds::MAX_SUB_CTX_ID)) { - ptr = common_realloc(NULL, size, attr, *this, obj_mgrs_[attr.sub_ctx_id_]); + ptr = inner_common_realloc(NULL, size, attr, *this, obj_mgrs_[attr.sub_ctx_id_]); } else { LIB_LOG_RET(WARN, OB_ERR_UNEXPECTED, "allocate memory with unexpected sub_ctx_id"); } @@ -53,7 +53,7 @@ int64_t ObTenantCtxAllocator::get_obj_hold(void *ptr) void* ObTenantCtxAllocator::realloc(const void *ptr, const int64_t size, const ObMemAttr &attr) { - void *nptr = common_realloc(ptr, size, attr, *this, obj_mgr_); + void *nptr = inner_common_realloc(ptr, size, attr, *this, obj_mgr_); return nptr; } @@ -468,7 +468,7 @@ void ObTenantCtxAllocator::on_free(AObject &obj) } template -void* ObTenantCtxAllocator::common_realloc(const void *ptr, const int64_t size, +void* ObTenantCtxAllocator::inner_common_realloc(const void *ptr, const int64_t size, const ObMemAttr &attr, ObTenantCtxAllocator& ta, T &allocator) { diff --git a/deps/oblib/src/lib/alloc/ob_tenant_ctx_allocator.h b/deps/oblib/src/lib/alloc/ob_tenant_ctx_allocator.h index 380313e89..a33db4870 100644 --- a/deps/oblib/src/lib/alloc/ob_tenant_ctx_allocator.h +++ b/deps/oblib/src/lib/alloc/ob_tenant_ctx_allocator.h @@ -32,6 +32,12 @@ struct LabelItem; } namespace lib { +class IObjectMgr +{ +public: + virtual AObject *realloc_object(AObject *obj, const uint64_t size, const ObMemAttr &attr) = 0; + virtual void free_object(AObject *obj) = 0; +}; class ObTenantCtxAllocator : public common::ObIAllocator, private common::ObLink @@ -299,16 +305,22 @@ private: } return ret; } +public: + static void* common_realloc(const void *ptr, const int64_t size, + const ObMemAttr &attr, ObTenantCtxAllocator& ta, + IObjectMgr &mgr) + { + return inner_common_realloc(ptr, size, attr, ta, mgr); + } + static void common_free(void *ptr); private: static void on_alloc(AObject& obj, const ObMemAttr& attr); static void on_free(AObject& obj); -public: template - static void* common_realloc(const void *ptr, const int64_t size, + static void* inner_common_realloc(const void *ptr, const int64_t size, const ObMemAttr &attr, ObTenantCtxAllocator& ta, T &allocator); - static void common_free(void *ptr); private: ObTenantResourceMgrHandle resource_handle_; diff --git a/deps/oblib/src/lib/alloc/object_mgr.cpp b/deps/oblib/src/lib/alloc/object_mgr.cpp index 8293c5698..e1bb4458e 100644 --- a/deps/oblib/src/lib/alloc/object_mgr.cpp +++ b/deps/oblib/src/lib/alloc/object_mgr.cpp @@ -244,7 +244,7 @@ SubObjectMgr *ObjectMgr::create_sub_mgr() attr.label_ = common::ObModIds::OB_TENANT_CTX_ALLOCATOR; attr.ctx_id_ = ObCtxIds::DEFAULT_CTX_ID; attr.ignore_version_ = true; - class SubObjectMgrWrapper { + class SubObjectMgrWrapper : public IObjectMgr { public: SubObjectMgrWrapper(SubObjectMgr& sub_mgr) : sub_mgr_(sub_mgr) diff --git a/deps/oblib/src/lib/allocator/ob_allocator_v2.cpp b/deps/oblib/src/lib/allocator/ob_allocator_v2.cpp index 751e74439..4c0e576b8 100644 --- a/deps/oblib/src/lib/allocator/ob_allocator_v2.cpp +++ b/deps/oblib/src/lib/allocator/ob_allocator_v2.cpp @@ -36,15 +36,33 @@ void *ObAllocator::alloc(const int64_t size, const ObMemAttr &attr) } auto ta = lib::ObMallocAllocator::get_instance()->get_tenant_ctx_allocator(inner_attr.tenant_id_, inner_attr.ctx_id_); + ObjectSet *os = NULL; if (OB_LIKELY(NULL != ta)) { - ptr = ObTenantCtxAllocator::common_realloc(NULL, size, inner_attr, *(ta.ref_allocator()), os_); + os = &os_; } else if (FORCE_MALLOC_FOR_ABSENT_TENANT()) { inner_attr.tenant_id_ = OB_SERVER_TENANT_ID; ta = lib::ObMallocAllocator::get_instance()->get_tenant_ctx_allocator(inner_attr.tenant_id_, inner_attr.ctx_id_); - if (NULL != ta) { - ptr = ObTenantCtxAllocator::common_realloc(NULL, size, inner_attr, *(ta.ref_allocator()), nos_); - } + os = &nos_; + } + if (NULL != ta) { + class Wrapper : public lib::IObjectMgr { + public: + Wrapper(ObjectSet &os) + : os_(os) + {} + AObject *realloc_object(AObject *obj, const uint64_t size, const ObMemAttr &attr) + { + return os_.realloc_object(obj, size, attr); + } + void free_object(AObject *obj) + { + os_.free_object(obj); + } + private: + ObjectSet& os_; + } os_wrapper(*os); + ptr = ObTenantCtxAllocator::common_realloc(NULL, size, inner_attr, *(ta.ref_allocator()), os_wrapper); } } return ptr;