TSG-9700: 支持优雅退出

This commit is contained in:
liuxueli
2022-02-23 18:43:00 +08:00
parent 1979c2dabd
commit d7e4d0b62a
6 changed files with 71 additions and 8 deletions

View File

@@ -2317,10 +2317,11 @@ extern "C" int TSG_MASTER_INIT()
return 0;
}
extern "C" int TSG_MASTER_UNLOAD()
{
tsg_sendlog_destroy(g_tsg_log_instance);
tsg_statistic_destroy();
Maat_burn_feather(g_tsg_maat_feather);
g_tsg_maat_feather=NULL;
@@ -2329,6 +2330,11 @@ extern "C" int TSG_MASTER_UNLOAD()
Maat_burn_feather(g_tsg_dynamic_maat_feather);
g_tsg_dynamic_maat_feather=NULL;
}
FS_stop(&(g_tsg_para.fs2_handle));
MESA_destroy_runtime_log_handle(g_tsg_para.logger);
g_tsg_para.logger=NULL;
return 0;
}

View File

@@ -382,6 +382,8 @@ typedef struct tsg_statistic
{
int cycle;
int fs_line_id;
int thread_alive;
pthread_t stat_thread_id;
int fs_field_id[STATIS_MAX];
long long statistic_opt[_OPT_TYPE_MAX];
struct _traffic_info *traffic_info[TSG_ACTION_MAX+1];
@@ -390,6 +392,8 @@ typedef struct tsg_statistic
}tsg_statis_para_t;
int tsg_statistic_init(const char *conffile, void *logger);
void tsg_statistic_destroy(void);
int tsg_gtp_signaling_hash_init(const char* conffile, void *logger);
int set_struct_project(const struct streaminfo *a_stream, int project_id, void *data);

View File

@@ -820,7 +820,7 @@ static int parse_answer_records(struct dns_user_region *user_region_records, cJS
}
answer_type=get_dns_qtype(a_item->valuestring, strlen(a_item->valuestring));
switch(answer_type==-1)
if(answer_type==-1)
{
continue;
}

View File

@@ -1648,6 +1648,48 @@ struct tsg_log_instance_t *tsg_sendlog_init(const char *conffile)
return _instance;
}
void tsg_sendlog_destroy(struct tsg_log_instance_t * instance)
{
for(int i=0; i<instance->max_service; i++)
{
if(instance->topic_rkt[i]==NULL)
{
continue;
}
rd_kafka_topic_destroy(instance->topic_rkt[i]);
}
rd_kafka_destroy_flags(instance->kafka_handle, 4);
rd_kafka_destroy(instance->kafka_handle);
MESA_destroy_runtime_log_handle(instance->logger);
instance->logger=NULL;
free(instance->topic_rkt);
instance->topic_rkt=NULL;
free(instance->service2topic);
instance->service2topic=NULL;
free(instance);
instance=NULL;
/*
int ret=0,count=0;
while(1)
{
ret=rd_kafka_wait_destroyed(1000);
if(ret==0)
{
break;
}
count++;
}
*/
return ;
}
int tsg_send_log(struct tsg_log_instance_t *instance, struct TLD_handle_t *handle, tsg_log_t *log_msg, int thread_id)
{

View File

@@ -176,6 +176,7 @@ struct tsg_log_instance_t
char *log_field_id2name(struct tsg_log_instance_t *instance, tsg_log_field_id_t id);
struct tsg_log_instance_t *tsg_sendlog_init(const char *filename);
void tsg_sendlog_destroy(struct tsg_log_instance_t * instance);
#endif

View File

@@ -213,7 +213,7 @@ static void *tsg_statistic_thread(void *arg)
FS_start(g_tsg_statis_para.fs2_handle);
while(1)
while(g_tsg_statis_para.thread_alive)
{
memset(&policy_traffic_info, 0, sizeof(policy_traffic_info));
memset(&total_traffic_info, 0, sizeof(total_traffic_info));
@@ -370,6 +370,7 @@ int tsg_statistic_init(const char *conffile, void *logger)
MESA_load_profile_int_def(conffile, "STATISTIC", "PROMETHEUS", &output_prometheus, 1);
g_tsg_statis_para.fs2_handle=FS_create_handle();
g_tsg_statis_para.thread_alive=1;
value=1;//Rewrite
FS_set_para(g_tsg_statis_para.fs2_handle, PRINT_MODE, &value, sizeof(value));
@@ -460,9 +461,18 @@ int tsg_statistic_init(const char *conffile, void *logger)
g_tsg_statis_para.fs_line_id=FS_register(g_tsg_statis_para.fs2_handle, FS_STYLE_LINE, FS_CALC_CURRENT, (const char *)"TRAFFIC");
pthread_t stat_thread_t;
pthread_create(&stat_thread_t, NULL, tsg_statistic_thread, NULL);
pthread_create(&g_tsg_statis_para.stat_thread_id, NULL, tsg_statistic_thread, NULL);
return 0;
}
void tsg_statistic_destroy(void)
{
pthread_cancel(g_tsg_statis_para.stat_thread_id);
g_tsg_statis_para.thread_alive=0;
sleep(g_tsg_statis_para.cycle);
FS_stop(&(g_tsg_statis_para.fs2_handle));
return ;
}