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)))) {
ret = OB_CONVERT_ERROR;
} else {
DRWLock::RDLockGuard lguard(ObConfigManager::get_serialize_lock());
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_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;
char *external_info_val = (char*)ob_malloc(external_info_val_len, "temp");
DEFER(if (external_info_val != nullptr) ob_free(external_info_val););
DRWLock::RDLockGuard lguard(ObConfigManager::get_serialize_lock());
if (OB_ISNULL(external_info_val)) {
ret = OB_ALLOCATE_MEMORY_FAILED;
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;
new_config = OB_NEW(ObTenantConfig, ObModIds::OMT, tenant_id);
if (OB_NOT_NULL(new_config)) {
DRWLock::RDLockGuard lguard(ObConfigManager::get_serialize_lock());
if(OB_FAIL(new_config->init(this))) {
LOG_WARN("new tenant config init failed", K(ret));
} 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);
} // for
if (OB_SUCC(ret)) {
DRWLock::RDLockGuard lguard(ObConfigManager::get_serialize_lock());
config->set_deleting();
if (OB_FAIL(wait(config->get_update_task()))) {
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;
char *external_info_val = (char*)ob_malloc(external_info_val_len, "temp");
DEFER(if (external_info_val != nullptr) ob_free(external_info_val););
DRWLock::RDLockGuard lguard(ObConfigManager::get_serialize_lock());
if (OB_ISNULL(external_info_val)) {
ret = OB_ALLOCATE_MEMORY_FAILED;
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 *hist_path = nullptr;
int64_t pos = 0;
DRWLock::WRLockGuard lguard(ObConfigManager::get_serialize_lock());
if (OB_ISNULL(buf = pa.alloc(OB_MAX_PACKET_LENGTH))) {
ret = OB_ALLOCATE_MEMORY_FAILED;
LOG_ERROR("ob tc malloc memory for buf failed", K(ret));

View File

@ -83,13 +83,6 @@ private:
DISALLOW_COPY_AND_ASSIGN(UpdateTask);
};
public:
static common::DRWLock &get_serialize_lock()
{
static common::DRWLock serialize_lock_;
return serialize_lock_;
}
private:
bool inited_;
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)))) {
ret = OB_CONVERT_ERROR;
} else {
DRWLock::RDLockGuard lguard(ObConfigManager::get_serialize_lock());
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_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;
ObRecordHeader header;
@ -285,8 +284,7 @@ OB_DEF_SERIALIZE(ObServerConfig)
header.data_length_ = static_cast<int32_t>(pos - data_pos);
header.data_zlength_ = header.data_length_;
if (header.data_zlength_ != expect_data_len) {
ret = OB_ERR_UNEXPECTED;
LOG_ERROR("unexpected data size", K_(header.data_zlength),
LOG_WARN("unexpected data size", K_(header.data_zlength),
K(expect_data_len));
} else {
header.data_checksum_ = ob_crc64(p_data, pos - data_pos);
@ -297,6 +295,26 @@ OB_DEF_SERIALIZE(ObServerConfig)
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)
{
int ret = OB_SUCCESS;