增加和tfe之间的保活
This commit is contained in:
@@ -7,8 +7,8 @@
|
||||
#include "uuid/uuid.h"
|
||||
#include "cjson/cJSON.h"
|
||||
#include "kni_send_logger.h"
|
||||
#include <pthread.h>
|
||||
#include <linux/if_ether.h>
|
||||
#include "tfe_mgr.h"
|
||||
|
||||
extern int g_iThreadNum;
|
||||
|
||||
@@ -19,7 +19,6 @@ struct kni_field_stat_handle *g_kni_fs_handle = NULL;
|
||||
#define HTTP_PROJECT_NAME "kni_http_tag"
|
||||
#define BURST_MAX 1
|
||||
#define STREAM_TRACEID_LEN 37
|
||||
#define TFE_COUNT_MAX 16
|
||||
#define CALLER_SAPP 0
|
||||
#define CALLER_TFE 1
|
||||
|
||||
@@ -147,6 +146,7 @@ struct kni_handle{
|
||||
uint32_t local_ipv4;
|
||||
int keepalive_replay_switch;
|
||||
void *local_logger;
|
||||
struct tfe_mgr *_tfe_mgr;
|
||||
};
|
||||
|
||||
struct traceid2pme_search_cb_args{
|
||||
@@ -222,7 +222,6 @@ static struct pme_info* pme_info_new(const struct streaminfo *stream, int thread
|
||||
void *logger = g_kni_handle->local_logger;
|
||||
struct pme_info* pmeinfo = ALLOC(struct pme_info, 1);
|
||||
pmeinfo->addr_type = (enum addr_type_t)stream->addr.addrtype;
|
||||
pmeinfo->tfe_id = g_kni_handle->tfe_count > 0 ? thread_seq % g_kni_handle->tfe_count : -1;
|
||||
uuid_t uu;
|
||||
uuid_generate_random(uu);
|
||||
uuid_unparse(uu, pmeinfo->stream_traceid);
|
||||
@@ -1009,7 +1008,13 @@ extern "C" char kni_tcpall_entry(const struct streaminfo *stream, void** pme, in
|
||||
case OP_STATE_PENDING:
|
||||
*pme = pmeinfo = pme_info_new(stream, thread_seq);
|
||||
if(pmeinfo == NULL){
|
||||
KNI_LOG_ERROR(logger, "Failed at new pmeinfo");
|
||||
KNI_LOG_ERROR(logger, "Failed at new pmeinfo, bypass and dropme");
|
||||
return APP_STATE_FAWPKT | APP_STATE_DROPME;
|
||||
}
|
||||
pmeinfo->tfe_id = tfe_mgr_alive_node_get(g_kni_handle->_tfe_mgr, thread_seq);
|
||||
if(pmeinfo->tfe_id < 0){
|
||||
KNI_LOG_ERROR(logger, "No alive tfe available, bypass and dropme");
|
||||
pme_info_destroy(pmeinfo);
|
||||
return APP_STATE_FAWPKT | APP_STATE_DROPME;
|
||||
}
|
||||
FS_operate(g_kni_fs_handle->handle, g_kni_fs_handle->fields[KNI_FIELD_PME_NEW], 0, FS_OP_ADD, 1);
|
||||
@@ -1198,7 +1203,7 @@ static long keepalive_replay_search_cb(void *data, const uchar *key, uint size,
|
||||
return 0;
|
||||
}
|
||||
|
||||
void* thread_tfe_data_receiver(void *args){
|
||||
static void* thread_tfe_data_receiver(void *args){
|
||||
void *logger = g_kni_handle->local_logger;
|
||||
struct thread_tfe_data_receiver_args *_args = (struct thread_tfe_data_receiver_args*)args;
|
||||
struct kni_marsio_handle *marsio_handle = _args->marsio_handle;
|
||||
@@ -1352,12 +1357,12 @@ static long traceid2pme_htable_search_cb(void *data, const uchar *key, uint size
|
||||
return 0;
|
||||
}
|
||||
|
||||
void* thread_tfe_cmsg_receiver(void *args){
|
||||
static void* thread_tfe_cmsg_receiver(void *args){
|
||||
struct thread_tfe_cmsg_receiver_args *_args = (struct thread_tfe_cmsg_receiver_args*)args;
|
||||
const char *profile = _args->profile;
|
||||
const char *section = "tfe_cmsg_receiver";
|
||||
void *logger = _args->logger;
|
||||
char listen_eth[INET_ADDRSTRLEN];
|
||||
char listen_eth[KNI_SYMBOL_MAX];
|
||||
uint32_t listen_ip;
|
||||
int listen_port = -1;
|
||||
char buff[KNI_MTU];
|
||||
@@ -1373,7 +1378,7 @@ void* thread_tfe_cmsg_receiver(void *args){
|
||||
KNI_LOG_ERROR(logger, "MESA_prof_load: listen_port not set, profile is %s, section is %s", profile, section);
|
||||
goto error_out;
|
||||
}
|
||||
KNI_LOG_INFO(logger, "MESA_prof_load, [%s]:\n listen_eth: %s\n listen_port: %d",
|
||||
KNI_LOG_ERROR(logger, "MESA_prof_load, [%s]:\n listen_eth: %s\n listen_port: %d",
|
||||
section, listen_eth, listen_port);
|
||||
FREE(&args);
|
||||
//create socket
|
||||
@@ -1470,7 +1475,7 @@ static struct kni_marsio_handle* kni_marsio_init(const char* profile){
|
||||
KNI_LOG_ERROR(logger, "MESA_prof_load: src_mac_addr not set, profile is %s, section is %s", profile, section);
|
||||
goto error_out;
|
||||
}
|
||||
KNI_LOG_INFO(logger, "MESA_prof_load, [%s]:\n appsym: %s\n dev_vxlan_symbol: %s\n src_mac_addr: %s",
|
||||
KNI_LOG_ERROR(logger, "MESA_prof_load, [%s]:\n appsym: %s\n dev_vxlan_symbol: %s\n src_mac_addr: %s",
|
||||
section, appsym, dev_vxlan_symbol, src_mac_addr_str);
|
||||
mr_inst = marsio_create();
|
||||
if(mr_inst == NULL){
|
||||
@@ -1516,7 +1521,7 @@ static struct kni_marsio_handle* kni_marsio_init(const char* profile){
|
||||
KNI_LOG_ERROR(logger, "MESA_prof_load: dev_eth_symbol not set, profile is %s, section is %s", profile, _section);
|
||||
goto error_out;
|
||||
}
|
||||
KNI_LOG_INFO(logger, "MESA_prof_load, [%s]:\n mac_addr: %s\n dev_eth_symbol: %s",
|
||||
KNI_LOG_ERROR(logger, "MESA_prof_load, [%s]:\n mac_addr: %s\n dev_eth_symbol: %s",
|
||||
_section, mac_addr_str, dev_eth_symbol);
|
||||
//eth_handler receive thread = tfe_data_recv_thread_num, send thread = g_iThreadNum + tfe_data_recv_thread_num
|
||||
dev_eth_handler = marsio_open_device(mr_inst, dev_eth_symbol, g_kni_handle->tfe_data_recv_thread_num, g_iThreadNum + g_kni_handle->tfe_data_recv_thread_num);
|
||||
@@ -1577,7 +1582,7 @@ static struct kni_field_stat_handle * fs_init(const char *profile){
|
||||
KNI_LOG_ERROR(logger, "MESA_prof_load: stat_path not set, profile is %s, section is %s", profile, section);
|
||||
goto error_out;
|
||||
}
|
||||
KNI_LOG_INFO(logger, "MESA_prof_load, [%s]:\n stat_path: %s\n", "field_stat", stat_path);
|
||||
KNI_LOG_ERROR(logger, "MESA_prof_load, [%s]:\n stat_path: %s\n", "field_stat", stat_path);
|
||||
handle = FS_create_handle();
|
||||
if(handle == NULL){
|
||||
KNI_LOG_ERROR(logger, "Failed at create FS_create_handle");
|
||||
@@ -1678,6 +1683,7 @@ extern "C" int kni_init(){
|
||||
int keepalive_replay_switch = -1;
|
||||
struct thread_tfe_cmsg_receiver_args *cmsg_receiver_args;
|
||||
MESA_htable_handle traceid2pme_htable = NULL, keepalive_replay_htable = NULL;
|
||||
struct tfe_mgr *_tfe_mgr = NULL;
|
||||
int ret = MESA_load_profile_string_nodef(profile, section, "log_path", log_path, sizeof(log_path));
|
||||
if(ret < 0){
|
||||
printf("MESA_prof_load: log_path not set, profile is %s, section is %s", profile, section);
|
||||
@@ -1788,6 +1794,14 @@ extern "C" int kni_init(){
|
||||
g_kni_handle->keepalive_replay_htable = keepalive_replay_htable;
|
||||
}
|
||||
|
||||
//init tfe_mgr
|
||||
_tfe_mgr = tfe_mgr_init(tfe_count, profile, local_logger);
|
||||
if(_tfe_mgr == NULL){
|
||||
KNI_LOG_ERROR(local_logger, "Failed at init tfe_mgr");
|
||||
goto error_out;
|
||||
}
|
||||
g_kni_handle->_tfe_mgr = _tfe_mgr;
|
||||
|
||||
//create thread_tfe_data_receiver
|
||||
for(int i = 0; i < g_kni_handle->tfe_data_recv_thread_num; i++){
|
||||
struct thread_tfe_data_receiver_args *args = ALLOC(struct thread_tfe_data_receiver_args, 1);
|
||||
@@ -1796,7 +1810,7 @@ extern "C" int kni_init(){
|
||||
args->thread_seq = i;
|
||||
int ret = pthread_create(&thread_id, NULL, thread_tfe_data_receiver, (void *)args);
|
||||
if(unlikely(ret != 0)){
|
||||
KNI_LOG_ERROR(local_logger, "Failed at pthread_create, thread_func is thread_tfe_data_receiver, ret is %d", ret);
|
||||
KNI_LOG_ERROR(local_logger, "Failed at pthread_create, thread_func is thread_tfe_data_receiver, errno is %d, errmsg is %s", errno, strerror(errno));
|
||||
FREE(&args);
|
||||
goto error_out;
|
||||
}
|
||||
@@ -1808,7 +1822,7 @@ extern "C" int kni_init(){
|
||||
strncpy(cmsg_receiver_args->profile, profile, strnlen(profile, sizeof(cmsg_receiver_args->profile) - 1));
|
||||
ret = pthread_create(&thread_id, NULL, thread_tfe_cmsg_receiver, (void *)cmsg_receiver_args);
|
||||
if(unlikely(ret != 0)){
|
||||
KNI_LOG_ERROR(local_logger, "Failed at pthread_create, thread_func is thread_tfe_cmsg_receiver, ret is %d", ret);
|
||||
KNI_LOG_ERROR(local_logger, "Failed at pthread_create, thread_func is thread_tfe_cmsg_receiver, errno is %d, errmsg is %s", errno, strerror(errno));
|
||||
FREE(&cmsg_receiver_args);
|
||||
goto error_out;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user