diff --git a/src/observer/omt/ob_tenant_config_mgr.cpp b/src/observer/omt/ob_tenant_config_mgr.cpp index 43c778d347..dfa757211e 100644 --- a/src/observer/omt/ob_tenant_config_mgr.cpp +++ b/src/observer/omt/ob_tenant_config_mgr.cpp @@ -90,7 +90,7 @@ int64_t TenantConfigInfo::to_string(char *buf, const int64_t buf_len) const } ObTenantConfigMgr::ObTenantConfigMgr() - : inited_(false), self_(), sql_proxy_(nullptr), rwlock_(ObLatchIds::CONFIG_LOCK), + : rwlock_(ObLatchIds::CONFIG_LOCK), inited_(false), self_(), sql_proxy_(nullptr), config_map_(), config_version_map_(), sys_config_mgr_(nullptr), version_has_refreshed_(false), update_tenant_config_cb_() { diff --git a/src/observer/omt/ob_tenant_config_mgr.h b/src/observer/omt/ob_tenant_config_mgr.h index 31de609216..8ea0309ee3 100644 --- a/src/observer/omt/ob_tenant_config_mgr.h +++ b/src/observer/omt/ob_tenant_config_mgr.h @@ -162,7 +162,8 @@ public: } return id; } - + // protect config_map_ + mutable common::DRWLock rwlock_; OB_UNIS_VERSION(1); private: @@ -171,8 +172,6 @@ private: bool inited_; common::ObAddr self_; common::ObMySQLProxy *sql_proxy_; - // protect config_map_ - mutable common::DRWLock rwlock_; // 租户配置项的映射 TenantConfigMap config_map_; TenantConfigVersionMap config_version_map_; diff --git a/src/share/config/ob_config_manager.cpp b/src/share/config/ob_config_manager.cpp index e18b2e94b5..b07de8f9fa 100644 --- a/src/share/config/ob_config_manager.cpp +++ b/src/share/config/ob_config_manager.cpp @@ -345,13 +345,16 @@ int ObConfigManager::update_local(int64_t expected_version) LOG_ERROR("Read server config failed", K(ret)); } else if (OB_FAIL(reload_config())) { LOG_WARN("Reload configuration failed", K(ret)); - } else if (OB_FAIL(dump2file())) { - LOG_WARN("Dump to file failed", K_(dump_path), K(ret)); } else { - GCONF.cluster.set_dumped_version(GCONF.cluster.version()); - LOG_INFO("Reload server config successfully!"); - ret = config_backup(); - } + DRWLock::RDLockGuard guard(OTC_MGR.rwlock_); // need protect tenant config because it will also serialize tenant config + if (OB_FAIL(dump2file())) { + LOG_WARN("Dump to file failed", K_(dump_path), K(ret)); + } else { + GCONF.cluster.set_dumped_version(GCONF.cluster.version()); + LOG_INFO("Reload server config successfully!"); + ret = config_backup(); + } + } server_config_.print(); } else { LOG_WARN("Read system config from inner table error", K(ret));