支持多业务系统的配置并发进行同步
This commit is contained in:
@@ -16,6 +16,7 @@
|
||||
|
||||
struct scanner_timer_priv
|
||||
{
|
||||
struct doris_business *business;
|
||||
struct doris_callbacks doris_cbs;
|
||||
struct doris_arguments doris_args;
|
||||
struct doris_idxfile_scanner *scanner;
|
||||
@@ -24,45 +25,16 @@ struct scanner_timer_priv
|
||||
|
||||
extern struct doris_global_info g_doris_server_info;
|
||||
|
||||
|
||||
void doris_worker_statistic_timer_cb(int fd, short kind, void *userp)
|
||||
{
|
||||
struct worker_statistic_info *statistic = (struct worker_statistic_info *)userp;
|
||||
struct timeval tv;
|
||||
struct doris_srv_statistics incr_statistic;
|
||||
long long *plast_statistic = (long long*)&statistic->statistic_last;
|
||||
long long *pnow_statistic = (long long*)&statistic->statistic;
|
||||
long long *pinc_statistic = (long long*)&incr_statistic;
|
||||
|
||||
for(u_int32_t i=0; i<sizeof(struct doris_srv_statistics)/sizeof(long long); i++)
|
||||
{
|
||||
pinc_statistic[i] = pnow_statistic[i] - plast_statistic[i];
|
||||
}
|
||||
statistic->statistic_last = statistic->statistic;
|
||||
|
||||
for(u_int32_t i=0; i<DRS_FSSTAT_FIELD_NUM; i++)
|
||||
{
|
||||
FS_operate(g_doris_server_info.fsstat_handle, g_doris_server_info.fsstat_field[i], 0, FS_OP_ADD, incr_statistic.field[i]);
|
||||
}
|
||||
for(u_int32_t i=0; i<DRS_FSSTAT_STATUS_NUM; i++)
|
||||
{
|
||||
FS_operate(g_doris_server_info.fsstat_handle, g_doris_server_info.fsstat_status[i], 0, FS_OP_ADD, incr_statistic.status[i]);
|
||||
}
|
||||
tv.tv_sec = g_doris_server_info.fsstat_period;
|
||||
tv.tv_usec = 0;
|
||||
event_add(&statistic->timer_statistic, &tv);
|
||||
}
|
||||
|
||||
void config_frag_node_cleanup(struct confile_save *save, struct cont_frag_node *fragnode)
|
||||
void config_frag_node_cleanup(struct cont_frag_node *fragnode)
|
||||
{
|
||||
if(fragnode == NULL) return;
|
||||
|
||||
save->statistic.statistic.status[DRS_FSSTAT_MEMORY_USED] -= fragnode->totalsize;
|
||||
FS_operate(g_doris_server_info.fsstat_handle, g_doris_server_info.fsstat_status[DRS_FSSTAT_MEMORY_USED], 0, FS_OP_SUB, fragnode->totalsize);
|
||||
free(fragnode->content);
|
||||
free(fragnode);
|
||||
}
|
||||
|
||||
void config_table_node_cleanup(struct confile_save *save, struct table_list_node *table_node)
|
||||
void config_table_node_cleanup(struct table_list_node *table_node)
|
||||
{
|
||||
struct cont_frag_node *fragnode;
|
||||
|
||||
@@ -71,12 +43,12 @@ void config_table_node_cleanup(struct confile_save *save, struct table_list_node
|
||||
while(NULL != (fragnode = TAILQ_FIRST(&table_node->frag_head)))
|
||||
{
|
||||
TAILQ_REMOVE(&table_node->frag_head, fragnode, frag_node);
|
||||
config_frag_node_cleanup(save, fragnode);
|
||||
config_frag_node_cleanup(fragnode);
|
||||
}
|
||||
free(table_node);
|
||||
}
|
||||
|
||||
void config_version_node_cleanup(struct confile_save *save, struct version_list_node *vernode)
|
||||
void config_version_node_cleanup(struct version_list_node *vernode)
|
||||
{
|
||||
struct table_list_node *tablenode;
|
||||
|
||||
@@ -85,7 +57,7 @@ void config_version_node_cleanup(struct confile_save *save, struct version_list_
|
||||
while(NULL != (tablenode = TAILQ_FIRST(&vernode->table_head)))
|
||||
{
|
||||
TAILQ_REMOVE(&vernode->table_head, tablenode, table_node);
|
||||
config_table_node_cleanup(save, tablenode);
|
||||
config_table_node_cleanup(tablenode);
|
||||
}
|
||||
free(vernode->metacont);
|
||||
cJSON_Delete(vernode->metajson);
|
||||
@@ -94,14 +66,14 @@ void config_version_node_cleanup(struct confile_save *save, struct version_list_
|
||||
free(vernode);
|
||||
}
|
||||
|
||||
void config_version_handle_cleanup(struct confile_save *save, struct version_list_handle *version)
|
||||
void config_version_handle_cleanup(struct version_list_handle *version)
|
||||
{
|
||||
struct version_list_node *vernode;
|
||||
|
||||
while(NULL != (vernode = TAILQ_FIRST(&version->version_head)))
|
||||
{
|
||||
TAILQ_REMOVE(&version->version_head, vernode, version_node);
|
||||
config_version_node_cleanup(save, vernode);
|
||||
config_version_node_cleanup(vernode);
|
||||
}
|
||||
free(version);
|
||||
}
|
||||
@@ -134,7 +106,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(delay_event->save, handle);
|
||||
config_version_handle_cleanup(handle);
|
||||
free(delay_event);
|
||||
}
|
||||
|
||||
@@ -144,7 +116,6 @@ static void cfgver_handle_delay_destroy(struct confile_save *save, struct event_
|
||||
|
||||
delay_event = (struct common_timer_event *)malloc(sizeof(struct common_timer_event));
|
||||
delay_event->data = version;
|
||||
delay_event->save = save;
|
||||
evtimer_assign(&delay_event->timer_event, evbase, cfgver_delay_destroy_timer_cb, delay_event);
|
||||
doris_common_timer_start(&delay_event->timer_event);
|
||||
}
|
||||
@@ -156,16 +127,20 @@ void doris_config_file_version_start(struct doris_instance *instance, cJSON *met
|
||||
|
||||
if(save->type == CFG_UPDATE_TYPE_FULL)
|
||||
{
|
||||
snprintf(save->inc_index_path, 512, "%s/inc/index/full_config_index.%010lu", g_doris_server_info.store_path_root, save->version);
|
||||
snprintf(save->tmp_index_path, 512, "%s/inc/full_config_index.%010lu.ing", g_doris_server_info.store_path_root, save->version);
|
||||
snprintf(save->full_index_path, 512, "%s/full/index/full_config_index.%010lu", g_doris_server_info.store_path_root, save->version);
|
||||
snprintf(save->inc_index_path, 512, "%s/inc/index/full_config_index.%010lu", save->business->store_path_root, save->version);
|
||||
snprintf(save->tmp_index_path, 512, "%s/inc/full_config_index.%010lu.ing", save->business->store_path_root, save->version);
|
||||
snprintf(save->full_index_path, 512, "%s/full/index/full_config_index.%010lu", save->business->store_path_root, save->version);
|
||||
}
|
||||
else
|
||||
{
|
||||
snprintf(save->inc_index_path, 512, "%s/inc/index/inc_config_index.%010lu", g_doris_server_info.store_path_root, save->version);
|
||||
snprintf(save->tmp_index_path, 512, "%s/inc/full_config_index.%010lu.ing", g_doris_server_info.store_path_root, save->version);
|
||||
snprintf(save->inc_index_path, 512, "%s/inc/index/inc_config_index.%010lu", save->business->store_path_root, save->version);
|
||||
snprintf(save->tmp_index_path, 512, "%s/inc/full_config_index.%010lu.ing", save->business->store_path_root, save->version);
|
||||
}
|
||||
if(NULL==(save->fp_idx_file = fopen(save->tmp_index_path, "w+")))
|
||||
{
|
||||
MESA_RUNTIME_LOGV3(g_doris_server_info.log_runtime, RLOG_LV_FATAL, "business: %s, fopen %s failed: %s", save->business->bizname, save->tmp_index_path, strerror(errno));
|
||||
assert(0);
|
||||
}
|
||||
save->fp_idx_file = fopen(save->tmp_index_path, "w+");
|
||||
}
|
||||
|
||||
void doris_config_file_version_finish(struct doris_instance *instance, void *userdata)
|
||||
@@ -175,18 +150,18 @@ void doris_config_file_version_finish(struct doris_instance *instance, void *use
|
||||
fclose(save->fp_idx_file);
|
||||
if(rename(save->tmp_index_path, save->inc_index_path))
|
||||
{
|
||||
MESA_RUNTIME_LOGV3(g_doris_server_info.log_runtime, RLOG_LV_FATAL, "business: %s, rename %s to %s failed: %s", save->business->bizname, save->tmp_index_path, save->inc_index_path, strerror(errno));
|
||||
assert(0);
|
||||
MESA_RUNTIME_LOGV3(g_doris_server_info.log_runtime, RLOG_LV_FATAL, "rename %s to %s failed: %s", save->tmp_index_path, save->inc_index_path, strerror(errno));
|
||||
}
|
||||
if(save->type == CFG_UPDATE_TYPE_FULL)
|
||||
{
|
||||
if(link(save->inc_index_path, save->full_index_path) && errno!=EEXIST) //<2F><><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD>
|
||||
{
|
||||
MESA_RUNTIME_LOGV3(g_doris_server_info.log_runtime, RLOG_LV_FATAL, "business: %s, rename %s to %s failed: %s", save->business->bizname, save->tmp_index_path, save->inc_index_path, strerror(errno));
|
||||
assert(0);
|
||||
MESA_RUNTIME_LOGV3(g_doris_server_info.log_runtime, RLOG_LV_FATAL, "rename %s to %s failed: %s", save->tmp_index_path, save->inc_index_path, strerror(errno));
|
||||
}
|
||||
}
|
||||
MESA_RUNTIME_LOGV3(g_doris_server_info.log_runtime, RLOG_LV_INFO, "Version %lu write finished, index file: %s", save->version, save->inc_index_path);
|
||||
MESA_RUNTIME_LOGV3(g_doris_server_info.log_runtime, RLOG_LV_INFO, "business: %s, Version %lu write finished, index file: %s", save->business->bizname, save->version, save->inc_index_path);
|
||||
}
|
||||
|
||||
void doris_config_file_version_error(struct doris_instance *instance, void *userdata)
|
||||
@@ -203,7 +178,7 @@ void doris_config_file_version_error(struct doris_instance *instance, void *user
|
||||
fclose(save->fp_cfg_file);
|
||||
remove(save->cfg_file_path);
|
||||
}
|
||||
MESA_RUNTIME_LOGV3(g_doris_server_info.log_runtime, RLOG_LV_FATAL, "Version %llu error, rolling back...", save->version);
|
||||
MESA_RUNTIME_LOGV3(g_doris_server_info.log_runtime, RLOG_LV_FATAL, "business: %s, Version %llu error, rolling back...", save->business->bizname, save->version);
|
||||
}
|
||||
|
||||
void doris_config_file_cfgfile_start(struct doris_instance *instance, const char *tablename, size_t size, u_int32_t cfgnum, void *userdata)
|
||||
@@ -217,7 +192,7 @@ void doris_config_file_cfgfile_start(struct doris_instance *instance, const char
|
||||
type = (save->type == CFG_UPDATE_TYPE_FULL)?"full":"inc";
|
||||
now = time(NULL);
|
||||
localtm = localtime_r(&now, &savetime);
|
||||
snprintf(dir, 256, "%s/%s/%04d-%02d-%02d", g_doris_server_info.store_path_root, type, localtm->tm_year+1900, localtm->tm_mon+1, localtm->tm_mday);
|
||||
snprintf(dir, 256, "%s/%s/%04d-%02d-%02d", save->business->store_path_root, type, localtm->tm_year+1900, localtm->tm_mon+1, localtm->tm_mday);
|
||||
if(access(dir, F_OK))
|
||||
{
|
||||
doris_mkdir_according_path(dir);
|
||||
@@ -225,8 +200,15 @@ void doris_config_file_cfgfile_start(struct doris_instance *instance, const char
|
||||
snprintf(save->cfg_file_path, 256, "%s/%s.%010lu", dir, tablename, save->version);
|
||||
fprintf(save->fp_idx_file, "%s\t%u\t%s\n", tablename, cfgnum, save->cfg_file_path);
|
||||
|
||||
save->fp_cfg_file = fopen(save->cfg_file_path, "w+");
|
||||
MESA_RUNTIME_LOGV3(g_doris_server_info.log_runtime, RLOG_LV_INFO, "File %s start writing...", save->cfg_file_path);
|
||||
if(NULL == (save->fp_cfg_file = fopen(save->cfg_file_path, "w+")))
|
||||
{
|
||||
MESA_RUNTIME_LOGV3(g_doris_server_info.log_runtime, RLOG_LV_FATAL, "business: %s, fopen %s failed: %s", save->business->bizname, save->cfg_file_path, strerror(errno));
|
||||
assert(0);
|
||||
}
|
||||
else
|
||||
{
|
||||
MESA_RUNTIME_LOGV3(g_doris_server_info.log_runtime, RLOG_LV_INFO, "business: %s, File %s start writing...", save->business->bizname, save->cfg_file_path);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -236,7 +218,11 @@ void doris_config_file_cfgfile_update(struct doris_instance *instance, const cha
|
||||
size_t writen_len;
|
||||
|
||||
writen_len = fwrite(data, 1, len, save->fp_cfg_file);
|
||||
assert(writen_len==len);
|
||||
if(writen_len != len)
|
||||
{
|
||||
MESA_RUNTIME_LOGV3(g_doris_server_info.log_runtime, RLOG_LV_FATAL, "business: %s, fwrite %s failed: %s", save->business->bizname, save->cfg_file_path, strerror(errno));
|
||||
assert(0);
|
||||
}
|
||||
}
|
||||
|
||||
void doris_config_file_cfgfile_finish(struct doris_instance *instance, void *userdata)
|
||||
@@ -244,7 +230,7 @@ void doris_config_file_cfgfile_finish(struct doris_instance *instance, void *use
|
||||
struct confile_save *save=(struct confile_save *)userdata;
|
||||
fclose(save->fp_cfg_file);
|
||||
|
||||
MESA_RUNTIME_LOGV3(g_doris_server_info.log_runtime, RLOG_LV_INFO, "File %s write finished", save->cfg_file_path);
|
||||
MESA_RUNTIME_LOGV3(g_doris_server_info.log_runtime, RLOG_LV_INFO, "business: %s, File %s write finished", save->business->bizname, save->cfg_file_path);
|
||||
}
|
||||
|
||||
/*memϵ<6D>к<EFBFBD><D0BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>*/
|
||||
@@ -277,24 +263,26 @@ void doris_config_mem_version_finish(struct doris_instance *instance, void *user
|
||||
cJSON_Delete(save->cur_vernode->metajson);
|
||||
save->cur_vernode->metajson = NULL;
|
||||
|
||||
MESA_RUNTIME_LOGV3(g_doris_server_info.log_runtime, RLOG_LV_FATAL, "Version %lu mem finished, info: %s", save->version, save->cur_vernode->metacont);
|
||||
MESA_RUNTIME_LOGV3(g_doris_server_info.log_runtime, RLOG_LV_FATAL, "business: %s, Version %lu mem finished, info: %s", save->business->bizname, save->version, save->cur_vernode->metacont);
|
||||
|
||||
if(save->cur_vernode->cfg_type==CFG_UPDATE_TYPE_FULL && g_doris_server_info.cfgver_head->latest_version!=0)
|
||||
if(save->cur_vernode->cfg_type==CFG_UPDATE_TYPE_FULL && save->business->cfgver_head->latest_version!=0)
|
||||
{
|
||||
cur_version = config_version_handle_new();
|
||||
cur_version->latest_version = save->cur_vernode->version;
|
||||
TAILQ_INSERT_TAIL(&cur_version->version_head, save->cur_vernode, version_node);
|
||||
|
||||
pthread_rwlock_wrlock(&g_doris_server_info.rwlock);
|
||||
tmplist = g_doris_server_info.cfgver_head;
|
||||
g_doris_server_info.cfgver_head = cur_version;
|
||||
pthread_rwlock_unlock(&g_doris_server_info.rwlock);
|
||||
pthread_rwlock_wrlock(&save->business->rwlock);
|
||||
tmplist = save->business->cfgver_head;
|
||||
save->business->cfgver_head = cur_version;
|
||||
pthread_rwlock_unlock(&save->business->rwlock);
|
||||
cfgver_handle_delay_destroy(save, save->evbase, tmplist);
|
||||
}
|
||||
else
|
||||
{
|
||||
TAILQ_INSERT_TAIL(&g_doris_server_info.cfgver_head->version_head, save->cur_vernode, version_node);
|
||||
g_doris_server_info.cfgver_head->latest_version = save->cur_vernode->version;
|
||||
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;
|
||||
pthread_rwlock_unlock(&save->business->rwlock);
|
||||
}
|
||||
save->cur_vernode = NULL;
|
||||
}
|
||||
@@ -303,9 +291,9 @@ void doris_config_mem_version_error(struct doris_instance *instance, void *userd
|
||||
{
|
||||
struct confile_save *save=(struct confile_save *)userdata;
|
||||
|
||||
config_frag_node_cleanup(save, save->cur_frag);
|
||||
config_table_node_cleanup(save, save->cur_table);
|
||||
config_version_node_cleanup(save, save->cur_vernode);
|
||||
config_frag_node_cleanup(save->cur_frag);
|
||||
config_table_node_cleanup(save->cur_table);
|
||||
config_version_node_cleanup(save->cur_vernode);
|
||||
save->cur_frag = NULL;
|
||||
save->cur_table = NULL;
|
||||
save->cur_vernode = NULL;
|
||||
@@ -325,7 +313,7 @@ void doris_config_mem_cfgfile_start(struct doris_instance *instance, const char
|
||||
save->cur_table->filesize = size;
|
||||
TAILQ_INIT(&save->cur_table->frag_head);
|
||||
|
||||
MESA_RUNTIME_LOGV3(g_doris_server_info.log_runtime, RLOG_LV_INFO, "table %s.%010llu start loading to memory...", tablename, save->version);
|
||||
MESA_RUNTIME_LOGV3(g_doris_server_info.log_runtime, RLOG_LV_INFO, "business: %s, table %s.%010llu start loading to memory...", save->business->bizname, tablename, save->version);
|
||||
}
|
||||
|
||||
void doris_config_mem_cfgfile_update(struct doris_instance *instance, const char *data, size_t len, void *userdata)
|
||||
@@ -333,7 +321,7 @@ void doris_config_mem_cfgfile_update(struct doris_instance *instance, const char
|
||||
struct confile_save *save=(struct confile_save *)userdata;
|
||||
size_t cache_len, offset=0;
|
||||
|
||||
save->statistic.statistic.status[DRS_FSSTAT_MEMORY_USED] += len;
|
||||
FS_operate(g_doris_server_info.fsstat_handle, g_doris_server_info.fsstat_status[DRS_FSSTAT_MEMORY_USED], 0, FS_OP_ADD, len);
|
||||
while(len > 0)
|
||||
{
|
||||
if(save->cur_frag == NULL)
|
||||
@@ -389,7 +377,7 @@ void doris_config_mem_cfgfile_finish(struct doris_instance *instance, const char
|
||||
}
|
||||
assert(save->cur_table->cur_totallen == save->cur_table->filesize);
|
||||
TAILQ_INSERT_TAIL(&save->cur_vernode->table_head, save->cur_table, table_node);
|
||||
MESA_RUNTIME_LOGV3(g_doris_server_info.log_runtime, RLOG_LV_INFO, "table %s.%010llu load to memory finished", save->cur_table->tablename, save->version);
|
||||
MESA_RUNTIME_LOGV3(g_doris_server_info.log_runtime, RLOG_LV_INFO, "business: %s, table %s.%010llu load to memory finished", save->business->bizname, save->cur_table->tablename, save->version);
|
||||
save->cur_table = NULL;
|
||||
}
|
||||
|
||||
@@ -404,47 +392,49 @@ void doris_config_common_version_start(struct confile_save *save, cJSON *meta)
|
||||
save->type = sub->valueint;
|
||||
assert(save->type==CFG_UPDATE_TYPE_FULL || save->type==CFG_UPDATE_TYPE_INC);
|
||||
save->version_cfgnum = 0;
|
||||
MESA_RUNTIME_LOGV3(g_doris_server_info.log_runtime, RLOG_LV_INFO, "Version %lu start updating...", save->version);
|
||||
MESA_RUNTIME_LOGV3(g_doris_server_info.log_runtime, RLOG_LV_INFO, "business: %s, Version %lu start updating...", save->business->bizname, save->version);
|
||||
}
|
||||
|
||||
void doris_config_common_version_finish(struct confile_save *save)
|
||||
{
|
||||
if(save->type == CFG_UPDATE_TYPE_FULL)
|
||||
{
|
||||
save->statistic.statistic.status[DRS_FSSTAT_CUR_FULL_VERSION] = save->version;
|
||||
save->statistic.statistic.status[DRS_FSSTAT_CONFIG_TOTAL_NUM] = save->version_cfgnum;
|
||||
save->statistic.statistic.field[DRS_FSSTAT_RECV_FULL_VER] += 1;
|
||||
save->business->total_cfgnum = save->version_cfgnum;
|
||||
FS_operate(g_doris_server_info.fsstat_handle, save->business->fs_lineid, g_doris_server_info.fsstat_column[DRS_FSCLM_CUR_FULL_VERSION], FS_OP_SET, save->version);
|
||||
FS_operate(g_doris_server_info.fsstat_handle, save->business->fs_lineid, g_doris_server_info.fsstat_column[DRS_FSCLM_CONFIG_TOTAL_NUM], FS_OP_SET, save->version_cfgnum);
|
||||
FS_operate(g_doris_server_info.fsstat_handle, save->business->fs_lineid, g_doris_server_info.fsstat_column[DRS_FSCLM_RECV_FULL_VER], FS_OP_ADD, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
save->statistic.statistic.status[DRS_FSSTAT_CUR_INC_VERSION] = save->version;
|
||||
save->statistic.statistic.status[DRS_FSSTAT_CONFIG_TOTAL_NUM] += save->version_cfgnum;
|
||||
save->statistic.statistic.field[DRS_FSSTAT_RECV_INC_VER] += 1;
|
||||
save->business->total_cfgnum += save->version_cfgnum;
|
||||
FS_operate(g_doris_server_info.fsstat_handle, save->business->fs_lineid, g_doris_server_info.fsstat_column[DRS_FSCLM_CUR_INC_VERSION], FS_OP_SET, save->version);
|
||||
FS_operate(g_doris_server_info.fsstat_handle, save->business->fs_lineid, g_doris_server_info.fsstat_column[DRS_FSCLM_CONFIG_TOTAL_NUM], FS_OP_ADD, save->version_cfgnum);
|
||||
FS_operate(g_doris_server_info.fsstat_handle, save->business->fs_lineid, g_doris_server_info.fsstat_column[DRS_FSCLM_RECV_INC_VER], FS_OP_ADD, 1);
|
||||
}
|
||||
MESA_Monitor_operation(g_doris_server_info.monitor, g_doris_server_info.mm_latest_ver, MONITOR_VALUE_SET, save->version);
|
||||
MESA_Monitor_operation(g_doris_server_info.monitor, g_doris_server_info.mm_total_cfgnum, MONITOR_VALUE_SET,
|
||||
save->statistic.statistic.status[DRS_FSSTAT_CONFIG_TOTAL_NUM]);
|
||||
MESA_Monitor_set_status_code(g_doris_server_info.monitor, MONITOR_STATUS_OP_CLEAR, MONITOR_STATUS_VERSION_ERR, NULL, NULL);
|
||||
MESA_RUNTIME_LOGV3(g_doris_server_info.log_runtime, RLOG_LV_INFO, "Version %lu update finished", save->version);
|
||||
MESA_Monitor_operation(g_doris_server_info.monitor, save->business->mm_latest_ver, MONITOR_VALUE_SET, save->version);
|
||||
MESA_Monitor_operation(g_doris_server_info.monitor, save->business->mm_total_cfgnum, MONITOR_VALUE_SET, save->business->total_cfgnum);
|
||||
MESA_Monitor_set_status_code(g_doris_server_info.monitor, MONITOR_STATUS_OP_CLEAR, save->business->mm_status_codeid, NULL, NULL);
|
||||
MESA_RUNTIME_LOGV3(g_doris_server_info.log_runtime, RLOG_LV_INFO, "business: %s, Version %lu update finished", save->business->bizname, save->version);
|
||||
|
||||
}
|
||||
|
||||
void doris_config_common_version_error(struct confile_save *save)
|
||||
{
|
||||
{
|
||||
FS_operate(g_doris_server_info.fsstat_handle, g_doris_server_info.fsstat_field[DRS_FSSTAT_RECV_ERR_VER], 0, FS_OP_ADD, 1);
|
||||
//Grafana+Promethues<65><73>չʾ<D5B9>ڲ<EFBFBD><DAB2>쳣״̬
|
||||
//Grafana+Promethues<65><73>չʾ<D5B9>ڲ<EFBFBD><DAB2>쳣״̬
|
||||
MESA_Monitor_set_status_code(g_doris_server_info.monitor, MONITOR_STATUS_OP_SET, save->business->mm_status_codeid,
|
||||
"Version receive error", "Receive config file error, please check producer");
|
||||
}
|
||||
|
||||
void doris_config_common_cfgfile_start(struct confile_save *save, u_int32_t cfgnum)
|
||||
{
|
||||
save->version_cfgnum += cfgnum;
|
||||
save->version_cfgnum += cfgnum;
|
||||
FS_operate(g_doris_server_info.fsstat_handle, g_doris_server_info.fsstat_field[DRS_FSSTAT_RECV_START_FILES], 0, FS_OP_ADD, 1);
|
||||
}
|
||||
|
||||
void doris_config_common_cfgfile_finish(struct confile_save *save)
|
||||
{
|
||||
{
|
||||
FS_operate(g_doris_server_info.fsstat_handle, g_doris_server_info.fsstat_field[DRS_FSSTAT_RECV_CMPLT_FILES], 0, FS_OP_ADD, 1);
|
||||
FS_operate(g_doris_server_info.fsstat_handle, save->business->fs_lineid, g_doris_server_info.fsstat_column[DRS_FSCLM_RECV_FILES], FS_OP_ADD, 1);
|
||||
}
|
||||
|
||||
@@ -504,8 +494,10 @@ 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);
|
||||
doris_config_common_version_start((struct confile_save *)userdata, meta);
|
||||
if(save->business->write_file_sw)
|
||||
{
|
||||
doris_config_file_version_start(instance, meta, userdata);
|
||||
@@ -517,7 +509,9 @@ 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);
|
||||
@@ -530,8 +524,10 @@ 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);
|
||||
doris_config_common_version_error((struct confile_save *)userdata);
|
||||
if(save->business->write_file_sw)
|
||||
{
|
||||
doris_config_file_version_error(instance, userdata);
|
||||
@@ -543,8 +539,10 @@ void doris_config_version_error(struct doris_instance *instance, void *userdata)
|
||||
}
|
||||
|
||||
void doris_config_cfgfile_start(struct doris_instance *instance, const char *tablename, size_t size, u_int32_t cfgnum, void *userdata)
|
||||
{
|
||||
struct confile_save *save=(struct confile_save *)userdata;
|
||||
|
||||
doris_config_common_cfgfile_start((struct confile_save *)userdata, cfgnum);
|
||||
doris_config_common_cfgfile_start((struct confile_save *)userdata, cfgnum);
|
||||
if(save->business->write_file_sw)
|
||||
{
|
||||
doris_config_file_cfgfile_start(instance, tablename, size, cfgnum, userdata);
|
||||
@@ -556,7 +554,9 @@ void doris_config_cfgfile_start(struct doris_instance *instance, const char *tab
|
||||
}
|
||||
|
||||
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);
|
||||
@@ -568,8 +568,10 @@ 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);
|
||||
doris_config_common_cfgfile_finish((struct confile_save *)userdata);
|
||||
if(save->business->write_file_sw)
|
||||
{
|
||||
doris_config_file_cfgfile_finish(instance, userdata);
|
||||
@@ -581,16 +583,15 @@ void doris_config_cfgfile_finish(struct doris_instance *instance, const char *md
|
||||
}
|
||||
|
||||
void* thread_doris_client_recv_cfg(void *arg)
|
||||
{
|
||||
struct event_base *manage_evbase=(struct event_base *)arg, *client_evbase;
|
||||
{
|
||||
struct doris_business *business=(struct doris_business *)arg;
|
||||
struct event_base *client_evbase;
|
||||
struct doris_instance *instance;
|
||||
struct doris_callbacks doris_cbs;
|
||||
struct doris_callbacks doris_cbs;
|
||||
struct doris_arguments doris_args;
|
||||
struct doris_idxfile_scanner *scanner;
|
||||
enum DORIS_UPDATE_TYPE update_type;
|
||||
struct confile_save save;
|
||||
char stored_path[512];
|
||||
char stored_path[512];
|
||||
|
||||
prctl(PR_SET_NAME, "client_recv");
|
||||
@@ -599,6 +600,7 @@ void* thread_doris_client_recv_cfg(void *arg)
|
||||
|
||||
memset(&save, 0, sizeof(struct confile_save));
|
||||
save.source_from = RECV_WAY_IDX_FILE;
|
||||
save.evbase = client_evbase;
|
||||
save.business = business;
|
||||
|
||||
scanner = doris_index_file_scanner(0);
|
||||
@@ -611,10 +613,10 @@ void* thread_doris_client_recv_cfg(void *arg)
|
||||
doris_cbs.cfgfile_update = doris_config_localmem_cfgfile_update;
|
||||
doris_cbs.cfgfile_finish = doris_config_localmem_cfgfile_finish;
|
||||
doris_cbs.userdata = &save;
|
||||
|
||||
|
||||
snprintf(stored_path, 512, "%s/full/index", business->store_path_root);
|
||||
update_type = doris_index_file_traverse(scanner, stored_path, &doris_cbs, NULL, g_doris_server_info.log_runtime);
|
||||
assert(update_type!=CFG_UPDATE_TYPE_ERR);
|
||||
assert(update_type!=CFG_UPDATE_TYPE_ERR);
|
||||
snprintf(stored_path, 512, "%s/inc/index", business->store_path_root);
|
||||
do {
|
||||
update_type = doris_index_file_traverse(scanner, stored_path, &doris_cbs, NULL, g_doris_server_info.log_runtime);
|
||||
@@ -630,24 +632,15 @@ void* thread_doris_client_recv_cfg(void *arg)
|
||||
doris_cbs.cfgfile_update = doris_config_cfgfile_update;
|
||||
doris_cbs.cfgfile_finish = doris_config_cfgfile_finish;
|
||||
|
||||
save.source_from = RECV_WAY_DRS_CLIENT;
|
||||
memset(&doris_args, 0, sizeof(struct doris_arguments));
|
||||
doris_args.current_version = scanner->cur_version;
|
||||
param = doris_parameter_new(NIRVANA_CONFIG_FILE, manage_evbase, &doris_cbs, &doris_args, g_doris_server_info.log_runtime);
|
||||
if(param == NULL)
|
||||
{
|
||||
assert(0);return NULL;
|
||||
}
|
||||
|
||||
doris_args.current_version = scanner->cur_version;
|
||||
sprintf(doris_args.bizname, "%s", business->bizname);
|
||||
instance = doris_instance_new(business->param, client_evbase, &doris_cbs, &doris_args, g_doris_server_info.log_runtime);
|
||||
if(instance == NULL)
|
||||
{
|
||||
assert(0);return NULL;
|
||||
}
|
||||
|
||||
evtimer_assign(&save.statistic.timer_statistic, client_evbase, doris_worker_statistic_timer_cb, &save.statistic);
|
||||
tv.tv_sec = g_doris_server_info.fsstat_period;
|
||||
tv.tv_usec = 0;
|
||||
evtimer_add(&save.statistic.timer_statistic, &tv);
|
||||
|
||||
event_base_dispatch(client_evbase);
|
||||
printf("Libevent dispath error, should not run here.\n");
|
||||
@@ -661,7 +654,7 @@ static void doris_scanner_timer_cb(int fd, short kind, void *userp)
|
||||
enum DORIS_UPDATE_TYPE update_type;
|
||||
struct timeval tv;
|
||||
|
||||
do {
|
||||
do {
|
||||
update_type = doris_index_file_traverse(timer_priv->scanner, timer_priv->business->recv_path_inc,
|
||||
&timer_priv->doris_cbs, NULL, g_doris_server_info.log_runtime);
|
||||
}while(update_type != CFG_UPDATE_TYPE_NONE);
|
||||
@@ -672,6 +665,7 @@ static void doris_scanner_timer_cb(int fd, short kind, void *userp)
|
||||
}
|
||||
|
||||
void* thread_index_file_recv_cfg(void *arg)
|
||||
{
|
||||
struct doris_business *business=(struct doris_business *)arg;
|
||||
struct event_base *client_evbase;
|
||||
struct confile_save save;
|
||||
@@ -688,8 +682,10 @@ void* thread_index_file_recv_cfg(void *arg)
|
||||
client_evbase = event_base_new();
|
||||
|
||||
save.source_from = RECV_WAY_IDX_FILE;
|
||||
save.evbase = client_evbase;
|
||||
save.business = business;
|
||||
|
||||
timer_priv.scanner = doris_index_file_scanner(0);
|
||||
timer_priv.business = business;
|
||||
|
||||
/*Retaive latest config to memory from Stored configs*/
|
||||
@@ -700,10 +696,10 @@ void* thread_index_file_recv_cfg(void *arg)
|
||||
timer_priv.doris_cbs.cfgfile_update = doris_config_localmem_cfgfile_update;
|
||||
timer_priv.doris_cbs.cfgfile_finish = doris_config_localmem_cfgfile_finish;
|
||||
timer_priv.doris_cbs.userdata = &save;
|
||||
|
||||
|
||||
snprintf(stored_path, 512, "%s/full/index", business->store_path_root);
|
||||
update_type = doris_index_file_traverse(timer_priv.scanner, stored_path, &timer_priv.doris_cbs, NULL, g_doris_server_info.log_runtime);
|
||||
assert(update_type!=CFG_UPDATE_TYPE_ERR);
|
||||
assert(update_type!=CFG_UPDATE_TYPE_ERR);
|
||||
snprintf(stored_path, 512, "%s/inc/index", business->store_path_root);
|
||||
do{
|
||||
update_type = doris_index_file_traverse(timer_priv.scanner, stored_path, &timer_priv.doris_cbs, NULL, g_doris_server_info.log_runtime);
|
||||
@@ -718,7 +714,7 @@ void* thread_index_file_recv_cfg(void *arg)
|
||||
timer_priv.doris_cbs.cfgfile_start = doris_config_cfgfile_start;
|
||||
timer_priv.doris_cbs.cfgfile_update = doris_config_cfgfile_update;
|
||||
timer_priv.doris_cbs.cfgfile_finish = doris_config_cfgfile_finish;
|
||||
|
||||
|
||||
update_type = doris_index_file_traverse(timer_priv.scanner, business->recv_path_full,
|
||||
&timer_priv.doris_cbs, NULL, g_doris_server_info.log_runtime);
|
||||
assert(update_type!=CFG_UPDATE_TYPE_ERR);
|
||||
@@ -733,11 +729,6 @@ void* thread_index_file_recv_cfg(void *arg)
|
||||
tv.tv_usec = 0;
|
||||
evtimer_assign(&timer_priv.timer_scanner, client_evbase, doris_scanner_timer_cb, &timer_priv);
|
||||
evtimer_add(&timer_priv.timer_scanner, &tv);
|
||||
|
||||
evtimer_assign(&save.statistic.timer_statistic, client_evbase, doris_worker_statistic_timer_cb, &save.statistic);
|
||||
tv.tv_sec = g_doris_server_info.fsstat_period;
|
||||
tv.tv_usec = 0;
|
||||
evtimer_add(&save.statistic.timer_statistic, &tv);
|
||||
|
||||
event_base_dispatch(client_evbase);
|
||||
printf("Libevent dispath error, should not run here.\n");
|
||||
|
||||
Reference in New Issue
Block a user