限制缓存在内存的配置文件内容的版本数量,以适应全增量模式的配置下发
This commit is contained in:
@@ -66,7 +66,7 @@ void config_version_node_cleanup(struct version_list_node *vernode)
|
||||
free(vernode);
|
||||
}
|
||||
|
||||
void config_version_handle_cleanup(struct version_list_handle *version)
|
||||
void config_version_handle_free(struct version_list_handle *version)
|
||||
{
|
||||
struct version_list_node *vernode;
|
||||
|
||||
@@ -75,6 +75,7 @@ void config_version_handle_cleanup(struct version_list_handle *version)
|
||||
TAILQ_REMOVE(&version->version_head, vernode, version_node);
|
||||
config_version_node_cleanup(vernode);
|
||||
}
|
||||
delete version->version2node;
|
||||
free(version);
|
||||
}
|
||||
|
||||
@@ -83,10 +84,27 @@ struct version_list_handle *config_version_handle_new(void)
|
||||
struct version_list_handle *handle;
|
||||
|
||||
handle = (struct version_list_handle *)calloc(1, sizeof(struct version_list_handle));
|
||||
handle->version2node = new map<int64_t, struct version_list_node*>;
|
||||
TAILQ_INIT(&handle->version_head);
|
||||
return handle;
|
||||
}
|
||||
|
||||
void config_version_node_free_content(struct version_list_node *vernode)
|
||||
{
|
||||
struct table_list_node *tablenode;
|
||||
struct cont_frag_node *fragnode;
|
||||
|
||||
TAILQ_FOREACH(tablenode, &vernode->table_head, table_node)
|
||||
{
|
||||
while(NULL != (fragnode = TAILQ_FIRST(&tablenode->frag_head)))
|
||||
{
|
||||
TAILQ_REMOVE(&tablenode->frag_head, fragnode, frag_node);
|
||||
config_frag_node_cleanup(fragnode);
|
||||
}
|
||||
}
|
||||
vernode->cont_in_disk = 1;
|
||||
}
|
||||
|
||||
static void doris_common_timer_start(struct event *time_event)
|
||||
{
|
||||
struct timeval tv;
|
||||
@@ -106,7 +124,7 @@ static void cfgver_delay_destroy_timer_cb(int fd, short kind, void *userp)
|
||||
doris_common_timer_start(&delay_event->timer_event);
|
||||
return;
|
||||
}
|
||||
config_version_handle_cleanup(handle);
|
||||
config_version_handle_free(handle);
|
||||
free(delay_event);
|
||||
}
|
||||
|
||||
@@ -262,6 +280,7 @@ void doris_config_mem_version_finish(struct doris_instance *instance, void *user
|
||||
struct confile_save *save=(struct confile_save *)userdata;
|
||||
struct version_list_handle *cur_version;
|
||||
struct version_list_handle *tmplist;
|
||||
struct version_list_handle *cfgver_handle;
|
||||
|
||||
cJSON_AddItemToObject(save->cur_vernode->metajson, "configs", save->cur_vernode->arrayjson);
|
||||
save->cur_vernode->arrayjson = NULL;
|
||||
@@ -276,7 +295,10 @@ void doris_config_mem_version_finish(struct doris_instance *instance, void *user
|
||||
{
|
||||
cur_version = config_version_handle_new();
|
||||
cur_version->latest_version = save->cur_vernode->version;
|
||||
cur_version->version_num = 1;
|
||||
TAILQ_INSERT_TAIL(&cur_version->version_head, save->cur_vernode, version_node);
|
||||
cur_version->oldest_vernode = TAILQ_FIRST(&cur_version->version_head);
|
||||
cur_version->version2node->insert(make_pair(cur_version->latest_version, save->cur_vernode));
|
||||
|
||||
pthread_rwlock_wrlock(&save->business->rwlock);
|
||||
tmplist = save->business->cfgver_head;
|
||||
@@ -285,10 +307,26 @@ void doris_config_mem_version_finish(struct doris_instance *instance, void *user
|
||||
cfgver_handle_delay_destroy(save, save->evbase, tmplist);
|
||||
}
|
||||
else
|
||||
{
|
||||
{
|
||||
pthread_rwlock_wrlock(&save->business->rwlock);
|
||||
TAILQ_INSERT_TAIL(&save->business->cfgver_head->version_head, save->cur_vernode, version_node);
|
||||
save->business->cfgver_head->latest_version = save->cur_vernode->version;
|
||||
cfgver_handle = save->business->cfgver_head;
|
||||
TAILQ_INSERT_TAIL(&cfgver_handle->version_head, save->cur_vernode, version_node);
|
||||
cfgver_handle->latest_version = save->cur_vernode->version;
|
||||
cfgver_handle->version2node->insert(make_pair(save->cur_vernode->version, save->cur_vernode));
|
||||
if(cfgver_handle->oldest_vernode == NULL)
|
||||
{
|
||||
cfgver_handle->oldest_vernode = TAILQ_FIRST(&cfgver_handle->version_head);
|
||||
}
|
||||
/*<2A><><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E0BBBA>N<EFBFBD><4E><EFBFBD>汾<EFBFBD><E6B1BE>Ԫ<EFBFBD><D4AA>Ϣȫ<CFA2><C8AB><EFBFBD><EFBFBD>*/
|
||||
if(save->business->cache_max_versions!=0 && cfgver_handle->version_num>=save->business->cache_max_versions)
|
||||
{
|
||||
config_version_node_free_content(cfgver_handle->oldest_vernode);
|
||||
cfgver_handle->oldest_vernode = TAILQ_NEXT(cfgver_handle->oldest_vernode, version_node);
|
||||
}
|
||||
else
|
||||
{
|
||||
cfgver_handle->version_num += 1;
|
||||
}
|
||||
pthread_rwlock_unlock(&save->business->rwlock);
|
||||
}
|
||||
save->cur_vernode = NULL;
|
||||
@@ -509,13 +547,8 @@ void doris_config_localmem_cfgfile_finish(struct doris_instance *instance, const
|
||||
|
||||
/*<2A>ޱ<EFBFBD><DEB1><EFBFBD>ϵ<EFBFBD>к<EFBFBD><D0BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>ص<EFBFBD>*/
|
||||
void doris_config_version_start(struct doris_instance *instance, cJSON *meta, void *userdata)
|
||||
{
|
||||
struct confile_save *save=(struct confile_save *)userdata;
|
||||
{
|
||||
doris_config_common_version_start((struct confile_save *)userdata, meta);
|
||||
if(save->business->write_file_sw)
|
||||
{
|
||||
doris_config_file_version_start(instance, meta, userdata);
|
||||
doris_config_common_version_start((struct confile_save *)userdata, meta);
|
||||
doris_config_file_version_start(instance, meta, userdata);
|
||||
if(g_doris_server_info.server_role_sw)
|
||||
{
|
||||
@@ -524,12 +557,7 @@ void doris_config_version_start(struct doris_instance *instance, cJSON *meta, vo
|
||||
}
|
||||
|
||||
void doris_config_version_finish(struct doris_instance *instance, void *userdata)
|
||||
{
|
||||
struct confile_save *save=(struct confile_save *)userdata;
|
||||
|
||||
if(save->business->write_file_sw)
|
||||
{
|
||||
doris_config_file_version_finish(instance, userdata);
|
||||
{
|
||||
doris_config_file_version_finish(instance, userdata);
|
||||
if(g_doris_server_info.server_role_sw)
|
||||
{
|
||||
@@ -539,13 +567,8 @@ void doris_config_version_finish(struct doris_instance *instance, void *userdata
|
||||
}
|
||||
|
||||
void doris_config_version_error(struct doris_instance *instance, void *userdata)
|
||||
{
|
||||
struct confile_save *save=(struct confile_save *)userdata;
|
||||
{
|
||||
doris_config_common_version_error((struct confile_save *)userdata);
|
||||
if(save->business->write_file_sw)
|
||||
{
|
||||
doris_config_file_version_error(instance, userdata);
|
||||
doris_config_common_version_error((struct confile_save *)userdata);
|
||||
doris_config_file_version_error(instance, userdata);
|
||||
if(g_doris_server_info.server_role_sw)
|
||||
{
|
||||
@@ -558,10 +581,7 @@ void doris_config_cfgfile_start(struct doris_instance *instance,
|
||||
{
|
||||
struct confile_save *save=(struct confile_save *)userdata;
|
||||
|
||||
doris_config_common_cfgfile_start((struct confile_save *)userdata, meta->cfgnum);
|
||||
if(save->business->write_file_sw)
|
||||
{
|
||||
doris_config_file_cfgfile_start(instance, meta, localpath, userdata);
|
||||
doris_config_common_cfgfile_start((struct confile_save *)userdata, meta->cfgnum);
|
||||
doris_config_file_cfgfile_start(instance, meta, localpath, userdata);
|
||||
if(g_doris_server_info.server_role_sw)
|
||||
{
|
||||
@@ -570,12 +590,7 @@ void doris_config_cfgfile_start(struct doris_instance *instance,
|
||||
}
|
||||
|
||||
void doris_config_cfgfile_update(struct doris_instance *instance, const char *data, size_t len, void *userdata)
|
||||
{
|
||||
struct confile_save *save=(struct confile_save *)userdata;
|
||||
|
||||
if(save->business->write_file_sw)
|
||||
{
|
||||
doris_config_file_cfgfile_update(instance, data, len, userdata);
|
||||
{
|
||||
doris_config_file_cfgfile_update(instance, data, len, userdata);
|
||||
if(g_doris_server_info.server_role_sw)
|
||||
{
|
||||
@@ -584,13 +599,8 @@ void doris_config_cfgfile_update(struct doris_instance *instance, const char *da
|
||||
}
|
||||
|
||||
void doris_config_cfgfile_finish(struct doris_instance *instance, const char *md5, void *userdata)
|
||||
{
|
||||
struct confile_save *save=(struct confile_save *)userdata;
|
||||
{
|
||||
doris_config_common_cfgfile_finish((struct confile_save *)userdata);
|
||||
if(save->business->write_file_sw)
|
||||
{
|
||||
doris_config_file_cfgfile_finish(instance, userdata);
|
||||
doris_config_common_cfgfile_finish((struct confile_save *)userdata);
|
||||
doris_config_file_cfgfile_finish(instance, userdata);
|
||||
if(g_doris_server_info.server_role_sw)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user