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)))) {
|
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));
|
||||||
|
@ -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));
|
||||||
|
@ -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));
|
||||||
|
@ -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));
|
||||||
|
@ -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
|
||||||
|
@ -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;
|
||||||
|
Reference in New Issue
Block a user