fix: remove config serialize lock, and add a serialize func without check size

This commit is contained in:
obdev
2023-02-09 16:52:14 +00:00
committed by ob-robot
parent 76724ef91f
commit 1ba15d49c9
6 changed files with 22 additions and 17 deletions

View File

@ -129,7 +129,6 @@ int ObTenantConfig::read_config()
if (OB_UNLIKELY(true != server.ip_to_string(local_ip, sizeof(local_ip)))) { if (OB_UNLIKELY(true != server.ip_to_string(local_ip, sizeof(local_ip)))) {
ret = OB_CONVERT_ERROR; ret = OB_CONVERT_ERROR;
} else { } else {
DRWLock::RDLockGuard lguard(ObConfigManager::get_serialize_lock());
key.set_varchar(ObString::make_string("svr_type"), print_server_role(get_server_type())); key.set_varchar(ObString::make_string("svr_type"), print_server_role(get_server_type()));
key.set_int(ObString::make_string("svr_port"), GCONF.rpc_port); key.set_int(ObString::make_string("svr_port"), GCONF.rpc_port);
key.set_varchar(ObString::make_string("svr_ip"), local_ip); key.set_varchar(ObString::make_string("svr_ip"), local_ip);
@ -401,7 +400,6 @@ int ObTenantConfig::add_extra_config(const char *config_str,
const int external_info_val_len = value_len / 2 + 1 + 1; const int external_info_val_len = value_len / 2 + 1 + 1;
char *external_info_val = (char*)ob_malloc(external_info_val_len, "temp"); char *external_info_val = (char*)ob_malloc(external_info_val_len, "temp");
DEFER(if (external_info_val != nullptr) ob_free(external_info_val);); DEFER(if (external_info_val != nullptr) ob_free(external_info_val););
DRWLock::RDLockGuard lguard(ObConfigManager::get_serialize_lock());
if (OB_ISNULL(external_info_val)) { if (OB_ISNULL(external_info_val)) {
ret = OB_ALLOCATE_MEMORY_FAILED; ret = OB_ALLOCATE_MEMORY_FAILED;
LOG_WARN("failed to alloc", K(ret)); LOG_WARN("failed to alloc", K(ret));

View File

@ -277,7 +277,6 @@ int ObTenantConfigMgr::add_tenant_config(uint64_t tenant_id)
ObTenantConfig *new_config = nullptr; ObTenantConfig *new_config = nullptr;
new_config = OB_NEW(ObTenantConfig, ObModIds::OMT, tenant_id); new_config = OB_NEW(ObTenantConfig, ObModIds::OMT, tenant_id);
if (OB_NOT_NULL(new_config)) { if (OB_NOT_NULL(new_config)) {
DRWLock::RDLockGuard lguard(ObConfigManager::get_serialize_lock());
if(OB_FAIL(new_config->init(this))) { if(OB_FAIL(new_config->init(this))) {
LOG_WARN("new tenant config init failed", K(ret)); LOG_WARN("new tenant config init failed", K(ret));
} else if (OB_FAIL(config_map_.set_refactored(ObTenantID(tenant_id), } else if (OB_FAIL(config_map_.set_refactored(ObTenantID(tenant_id),
@ -320,7 +319,6 @@ int ObTenantConfigMgr::del_tenant_config(uint64_t tenant_id)
ob_usleep(TIME_SLICE_PERIOD); ob_usleep(TIME_SLICE_PERIOD);
} // for } // for
if (OB_SUCC(ret)) { if (OB_SUCC(ret)) {
DRWLock::RDLockGuard lguard(ObConfigManager::get_serialize_lock());
config->set_deleting(); config->set_deleting();
if (OB_FAIL(wait(config->get_update_task()))) { if (OB_FAIL(wait(config->get_update_task()))) {
LOG_WARN("wait tenant config update task failed", K(ret), K(tenant_id)); LOG_WARN("wait tenant config update task failed", K(ret), K(tenant_id));

View File

@ -335,7 +335,6 @@ int ObCommonConfig::add_extra_config(const char *config_str,
const int external_info_val_len = value_len / 2 + 1 + 1; const int external_info_val_len = value_len / 2 + 1 + 1;
char *external_info_val = (char*)ob_malloc(external_info_val_len, "temp"); char *external_info_val = (char*)ob_malloc(external_info_val_len, "temp");
DEFER(if (external_info_val != nullptr) ob_free(external_info_val);); DEFER(if (external_info_val != nullptr) ob_free(external_info_val););
DRWLock::RDLockGuard lguard(ObConfigManager::get_serialize_lock());
if (OB_ISNULL(external_info_val)) { if (OB_ISNULL(external_info_val)) {
ret = OB_ALLOCATE_MEMORY_FAILED; ret = OB_ALLOCATE_MEMORY_FAILED;
LOG_ERROR("failed to alloc", K(ret)); LOG_ERROR("failed to alloc", K(ret));

View File

@ -208,7 +208,6 @@ int ObConfigManager::dump2file(const char* path) const
char *tmp_path = nullptr; char *tmp_path = nullptr;
char *hist_path = nullptr; char *hist_path = nullptr;
int64_t pos = 0; int64_t pos = 0;
DRWLock::WRLockGuard lguard(ObConfigManager::get_serialize_lock());
if (OB_ISNULL(buf = pa.alloc(OB_MAX_PACKET_LENGTH))) { if (OB_ISNULL(buf = pa.alloc(OB_MAX_PACKET_LENGTH))) {
ret = OB_ALLOCATE_MEMORY_FAILED; ret = OB_ALLOCATE_MEMORY_FAILED;
LOG_ERROR("ob tc malloc memory for buf failed", K(ret)); LOG_ERROR("ob tc malloc memory for buf failed", K(ret));

View File

@ -83,13 +83,6 @@ private:
DISALLOW_COPY_AND_ASSIGN(UpdateTask); DISALLOW_COPY_AND_ASSIGN(UpdateTask);
}; };
public:
static common::DRWLock &get_serialize_lock()
{
static common::DRWLock serialize_lock_;
return serialize_lock_;
}
private: private:
bool inited_; bool inited_;
bool init_config_load_; // https://work.aone.alibaba-inc.com/issue/28094065 bool init_config_load_; // https://work.aone.alibaba-inc.com/issue/28094065

View File

@ -92,7 +92,6 @@ int ObServerConfig::read_config()
if (OB_UNLIKELY(true != self_addr_.ip_to_string(local_ip, sizeof(local_ip)))) { if (OB_UNLIKELY(true != self_addr_.ip_to_string(local_ip, sizeof(local_ip)))) {
ret = OB_CONVERT_ERROR; ret = OB_CONVERT_ERROR;
} else { } else {
DRWLock::RDLockGuard lguard(ObConfigManager::get_serialize_lock());
key.set_varchar(ObString::make_string("svr_type"), print_server_role(get_server_type())); key.set_varchar(ObString::make_string("svr_type"), print_server_role(get_server_type()));
key.set_int(ObString::make_string("svr_port"), rpc_port); key.set_int(ObString::make_string("svr_port"), rpc_port);
key.set_varchar(ObString::make_string("svr_ip"), local_ip); key.set_varchar(ObString::make_string("svr_ip"), local_ip);
@ -261,7 +260,7 @@ void ObServerMemoryConfig::set_server_memory_limit(int64_t memory_limit)
} }
} }
OB_DEF_SERIALIZE(ObServerConfig) int ObServerConfig::serialize_(char *buf, const int64_t buf_len, int64_t &pos) const
{ {
int ret = OB_SUCCESS; int ret = OB_SUCCESS;
ObRecordHeader header; ObRecordHeader header;
@ -285,8 +284,7 @@ OB_DEF_SERIALIZE(ObServerConfig)
header.data_length_ = static_cast<int32_t>(pos - data_pos); header.data_length_ = static_cast<int32_t>(pos - data_pos);
header.data_zlength_ = header.data_length_; header.data_zlength_ = header.data_length_;
if (header.data_zlength_ != expect_data_len) { if (header.data_zlength_ != expect_data_len) {
ret = OB_ERR_UNEXPECTED; LOG_WARN("unexpected data size", K_(header.data_zlength),
LOG_ERROR("unexpected data size", K_(header.data_zlength),
K(expect_data_len)); K(expect_data_len));
} else { } else {
header.data_checksum_ = ob_crc64(p_data, pos - data_pos); header.data_checksum_ = ob_crc64(p_data, pos - data_pos);
@ -297,6 +295,26 @@ OB_DEF_SERIALIZE(ObServerConfig)
return ret; return ret;
} }
int ObServerConfig::serialize(char *buf, const int64_t buf_len, int64_t &pos) const
{
int ret = OB_SUCCESS;
SERIALIZE_HEADER(UNIS_VERSION);
if (OB_SUCC(ret)) {
int64_t size_nbytes = NS_::OB_SERIALIZE_SIZE_NEED_BYTES;
int64_t pos_bak = (pos += size_nbytes);
if (OB_FAIL(serialize_(buf, buf_len, pos))) {
LOG_WARN("ObServerConfig serialize fail", K(ret));
}
int64_t serial_size = pos - pos_bak;
int64_t tmp_pos = 0;
if (OB_SUCC(ret)) {
ret = NS_::encode_fixed_bytes_i64(buf + pos_bak - size_nbytes,
size_nbytes, tmp_pos, serial_size);
}
}
return ret;
}
OB_DEF_DESERIALIZE(ObServerConfig) OB_DEF_DESERIALIZE(ObServerConfig)
{ {
int ret = OB_SUCCESS; int ret = OB_SUCCESS;