add test case: overload evict tcp (old/new) session

This commit is contained in:
luwenpeng
2024-01-26 14:13:54 +08:00
parent 5ba0e4bb3b
commit 6050d15e29
21 changed files with 424 additions and 145 deletions

View File

@@ -43,6 +43,11 @@ struct session_manager
uint64_t udp_active_sess_num;
uint64_t udp_closing_sess_num;
uint64_t tcp_overload_evict_old_sess_num;
uint64_t tcp_overload_evict_new_sess_num;
uint64_t udp_overload_evict_old_sess_num;
uint64_t udp_overload_evict_new_sess_num;
// packet filter status
uint64_t npkts_miss_l4_proto; // fast forward
@@ -196,6 +201,19 @@ static int session_manager_check_config(struct session_manager_config *config)
return -1;
}
// session overload
if (config->tcp_overload_evict_old_sess != 0 && config->tcp_overload_evict_old_sess != 1)
{
SESSION_LOG_ERROR("invalid tcp overload evict old session, support range: 0-1");
return -1;
}
if (config->udp_overload_evict_old_sess != 0 && config->udp_overload_evict_old_sess != 1)
{
SESSION_LOG_ERROR("invalid udp overload evict old session, support range: 0-1");
return -1;
}
// TCP timeout config
if (config->tcp_timeout_init < 1 || config->tcp_timeout_init > 60)
{
@@ -797,11 +815,27 @@ static struct session *session_manager_new_tcp_session(struct session_manager *m
return NULL;
}
if (mgr->tcp_sess_num == mgr->config.max_tcp_session_num - 1)
if (mgr->tcp_sess_num >= mgr->config.max_tcp_session_num - 1)
{
struct session *evicted_sess = session_table_find_least_recently_unused_session(mgr->tcp_sess_table);
assert(evicted_sess);
session_manager_evicte_session(mgr, evicted_sess);
if (mgr->config.tcp_overload_evict_old_sess)
{
struct session *evicted_sess = session_table_find_least_recently_unused_session(mgr->tcp_sess_table);
assert(evicted_sess);
session_manager_evicte_session(mgr, evicted_sess);
mgr->tcp_overload_evict_old_sess_num++;
}
else
{
if (mgr->tcp_sess_num >= mgr->config.max_tcp_session_num)
{
mgr->tcp_overload_evict_new_sess_num++;
return NULL;
}
else
{
// continue;
}
}
}
struct session *sess = session_pool_alloc(mgr->sess_pool);
@@ -828,11 +862,27 @@ static struct session *session_manager_new_udp_session(struct session_manager *m
return NULL;
}
if (mgr->udp_sess_num == mgr->config.max_udp_session_num - 1)
if (mgr->udp_sess_num >= mgr->config.max_udp_session_num - 1)
{
struct session *evicted_sess = session_table_find_least_recently_unused_session(mgr->udp_sess_table);
assert(evicted_sess);
session_manager_evicte_session(mgr, evicted_sess);
if (mgr->config.udp_overload_evict_old_sess)
{
struct session *evicted_sess = session_table_find_least_recently_unused_session(mgr->udp_sess_table);
assert(evicted_sess);
session_manager_evicte_session(mgr, evicted_sess);
mgr->udp_overload_evict_old_sess_num++;
}
else
{
if (mgr->udp_sess_num >= mgr->config.max_udp_session_num)
{
mgr->udp_overload_evict_new_sess_num++;
return NULL;
}
else
{
// continue;
}
}
}
struct session *sess = session_pool_alloc(mgr->sess_pool);
@@ -1186,11 +1236,16 @@ void session_manager_get_session_counter(struct session_manager *mgr, struct ses
out->udp_opening_sess_num = mgr->udp_opening_sess_num;
out->udp_active_sess_num = mgr->udp_active_sess_num;
out->udp_closing_sess_num = mgr->udp_closing_sess_num;
out->tcp_overload_evict_old_sess_num = mgr->tcp_overload_evict_old_sess_num;
out->tcp_overload_evict_new_sess_num = mgr->tcp_overload_evict_new_sess_num;
out->udp_overload_evict_old_sess_num = mgr->udp_overload_evict_old_sess_num;
out->udp_overload_evict_new_sess_num = mgr->udp_overload_evict_new_sess_num;
}
void session_manager_print_status(struct session_manager *mgr)
{
printf("session status:\n");
printf("session manager status:\n");
printf("tcp session number : %lu\n", mgr->tcp_sess_num);
printf(" opening number : %lu\n", mgr->tcp_opening_sess_num);
@@ -1200,6 +1255,12 @@ void session_manager_print_status(struct session_manager *mgr)
printf(" opening number : %lu\n", mgr->udp_opening_sess_num);
printf(" active number : %lu\n", mgr->udp_active_sess_num);
printf(" closing number : %lu\n", mgr->udp_closing_sess_num);
printf("tcp overload evict : \n");
printf(" old session number: %lu\n", mgr->tcp_overload_evict_old_sess_num);
printf(" new session number: %lu\n", mgr->tcp_overload_evict_new_sess_num);
printf("udp overload evict : \n");
printf(" old session number: %lu\n", mgr->udp_overload_evict_old_sess_num);
printf(" new session number: %lu\n", mgr->udp_overload_evict_new_sess_num);
printf("packet status:\n");
printf(" miss l4 proto : %lu (bypass)\n", mgr->npkts_miss_l4_proto);