diff --git a/src/observer/omt/ob_tenant_config.cpp b/src/observer/omt/ob_tenant_config.cpp index c20363c4ab87ee461768a1f744d429221146a99d..2711544ed86e6ae091307915cc594103b60daa49 100644 --- a/src/observer/omt/ob_tenant_config.cpp +++ b/src/observer/omt/ob_tenant_config.cpp @@ -37,7 +37,7 @@ ObTenantConfig::ObTenantConfig(uint64_t tenant_id) : tenant_id_(tenant_id), current_version_(1), mutex_(), update_task_(), system_config_(), config_mgr_(nullptr), - lock_(ObLatchIds::CONFIG_LOCK), is_deleting_(false) + lock_(), is_deleting_(false) { } @@ -55,7 +55,7 @@ int ObTenantConfig::init(ObTenantConfigMgr *config_mgr) void ObTenantConfig::print() const { - DRWLock::RDLockGuard guard(lock_); + ObLatchRGuard rd_guard(const_cast(lock_), ObLatchIds::CONFIG_LOCK); OB_LOG(INFO, "===================== * begin tenant config report * =====================", K(tenant_id_)); ObConfigContainer::const_iterator it = container_.begin(); for (; it != container_.end(); ++it) { @@ -71,7 +71,7 @@ void ObTenantConfig::print() const int ObTenantConfig::check_all() const { int ret = OB_SUCCESS; - DRWLock::RDLockGuard guard(lock_); + ObLatchRGuard rd_guard(const_cast(lock_), ObLatchIds::CONFIG_LOCK); ObConfigContainer::const_iterator it = container_.begin(); for (; OB_SUCC(ret) && it != container_.end(); ++it) { if (OB_ISNULL(it->second)) { @@ -90,32 +90,31 @@ int ObTenantConfig::check_all() const int ObTenantConfig::rdlock() { - return lock_.rdlock() == OB_SUCCESS ? OB_SUCCESS : OB_EAGAIN; + return lock_.rdlock(ObLatchIds::CONFIG_LOCK) == OB_SUCCESS + ? OB_SUCCESS : OB_EAGAIN; } int ObTenantConfig::wrlock() { - return lock_.wrlock() == OB_SUCCESS ? OB_SUCCESS : OB_EAGAIN; + return lock_.wrlock(ObLatchIds::CONFIG_LOCK) == OB_SUCCESS + ? OB_SUCCESS : OB_EAGAIN; } int ObTenantConfig::try_rdlock() { - return lock_.try_rdlock() == OB_SUCCESS ? OB_SUCCESS : OB_EAGAIN; + return lock_.try_rdlock(ObLatchIds::CONFIG_LOCK) == OB_SUCCESS + ? OB_SUCCESS : OB_EAGAIN; } int ObTenantConfig::try_wrlock() { - return lock_.try_wrlock() == OB_SUCCESS ? OB_SUCCESS : OB_EAGAIN; + return lock_.try_wrlock(ObLatchIds::CONFIG_LOCK) == OB_SUCCESS + ? OB_SUCCESS : OB_EAGAIN; } int ObTenantConfig::unlock() { - return lock_.rdunlock() == OB_SUCCESS ? OB_SUCCESS : OB_EAGAIN; -} - -int ObTenantConfig::wrunlock() -{ - return lock_.wrunlock() == OB_SUCCESS ? OB_SUCCESS : OB_EAGAIN; + return lock_.unlock() == OB_SUCCESS ? OB_SUCCESS : OB_EAGAIN; } int ObTenantConfig::read_config() @@ -125,7 +124,7 @@ int ObTenantConfig::read_config() ObAddr server; char local_ip[OB_MAX_SERVER_ADDR_SIZE] = ""; DRWLock::RDLockGuard lguard(ObConfigManager::get_serialize_lock()); - DRWLock::WRLockGuard guard(lock_); + ObLatchWGuard wr_guard(lock_, ObLatchIds::CONFIG_LOCK); server = GCTX.self_addr(); if (OB_UNLIKELY(true != server.ip_to_string(local_ip, sizeof(local_ip)))) { ret = OB_CONVERT_ERROR; @@ -366,7 +365,7 @@ int ObTenantConfig::add_extra_config(char *config_str, char *saveptr = NULL; char *token = NULL; DRWLock::RDLockGuard lguard(ObConfigManager::get_serialize_lock()); - DRWLock::WRLockGuard guard(lock_); + ObLatchWGuard wr_guard(lock_, ObLatchIds::CONFIG_LOCK); token = STRTOK_R(config_str, ",\n", &saveptr); while (OB_SUCC(ret) && OB_LIKELY(NULL != token)) { char *saveptr_one = NULL; @@ -424,7 +423,7 @@ OB_DEF_SERIALIZE(ObTenantConfig) int ret = OB_SUCCESS; int64_t expect_data_len = get_serialize_size_(); int64_t saved_pos = pos; - DRWLock::RDLockGuard guard(lock_); + ObLatchRGuard rd_guard(const_cast(lock_), ObLatchIds::CONFIG_LOCK); if (OB_FAIL(databuff_printf(buf, buf_len, pos, "[%lu]\n", tenant_id_))) { } else { ret = ObCommonConfig::serialize(buf, buf_len, pos); @@ -442,7 +441,7 @@ OB_DEF_SERIALIZE(ObTenantConfig) OB_DEF_DESERIALIZE(ObTenantConfig) { int ret = OB_SUCCESS; - DRWLock::WRLockGuard guard(lock_); + ObLatchWGuard wr_guard(lock_, ObLatchIds::CONFIG_LOCK); if ('[' != *(buf + pos)) { ret = OB_INVALID_DATA; LOG_ERROR("invalid tenant config", K(ret)); @@ -485,7 +484,7 @@ OB_DEF_SERIALIZE_SIZE(ObTenantConfig) int64_t len = 0, tmp_pos = 0; int ret = OB_SUCCESS; char tenant_str[100] = {'\0'}; - DRWLock::RDLockGuard guard(lock_); + ObLatchRGuard rd_guard(const_cast(lock_), ObLatchIds::CONFIG_LOCK); if (OB_FAIL(databuff_printf(tenant_str, 100, tmp_pos, "[%lu]\n", tenant_id_))) { LOG_WARN("write data buff failed", K(ret)); } else { diff --git a/src/observer/omt/ob_tenant_config.h b/src/observer/omt/ob_tenant_config.h index 344a5762f02373e83b897998b619b03ed732e535..b48c9697803a69eafea613969fd78a8dd6a580ff 100644 --- a/src/observer/omt/ob_tenant_config.h +++ b/src/observer/omt/ob_tenant_config.h @@ -17,7 +17,6 @@ #include "share/config/ob_system_config.h" #include "share/config/ob_common_config.h" #include "share/config/ob_config_helper.h" -#include "lib/lock/ob_drw_lock.h" namespace oceanbase { @@ -80,7 +79,6 @@ public: int try_rdlock(); int try_wrlock(); int unlock(); - int wrunlock(); int read_config(); uint64_t get_tenant_id() const { return tenant_id_; } @@ -102,7 +100,7 @@ private: common::ObSystemConfig system_config_; ObTenantConfigMgr *config_mgr_; // protect this object from being deleted in OTC_MGR.del_tenant_config - mutable common::DRWLock lock_; + common::ObLatch lock_; bool is_deleting_; public: diff --git a/src/observer/omt/ob_tenant_config_mgr.cpp b/src/observer/omt/ob_tenant_config_mgr.cpp index 28fb21e05d7c0a323a285c6b7fc0f5b52a8f301d..a169c275926a2b0abc5c8d776f9fb6468f6a005d 100644 --- a/src/observer/omt/ob_tenant_config_mgr.cpp +++ b/src/observer/omt/ob_tenant_config_mgr.cpp @@ -314,7 +314,7 @@ int ObTenantConfigMgr::del_tenant_config(uint64_t tenant_id) LOG_INFO("tenant config deleted", K(tenant_id), K(ret)); } if (OB_FAIL(ret)) { - config->wrunlock(); + config->unlock(); } } }