fix: remove config serialize lock, and add a serialize func without check size
This commit is contained in:
@ -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));
|
||||
|
@ -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));
|
||||
|
@ -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));
|
||||
|
@ -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));
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
Reference in New Issue
Block a user