snowflake changes from global static variables to one instance per thread

This commit is contained in:
luwenpeng
2024-08-23 15:21:07 +08:00
parent 3014e0feef
commit 6808e6ba29
30 changed files with 420 additions and 167 deletions

View File

@@ -6,7 +6,6 @@
#include "utils.h"
#include "packet_helper.h"
#include "packet_filter.h"
#include "snowflake.h"
#include "session_private.h"
#include "session_pool.h"
#include "session_table.h"
@@ -37,6 +36,7 @@ struct session_manager
* because the function is called by pluin and has no time input.
*/
uint64_t now_ms;
session_id_generate_fn id_generator;
};
#define EVICTE_SESSION_BURST (RX_BURST_MAX)
@@ -535,7 +535,15 @@ static void session_update(struct session_manager *mgr, struct session *sess, en
{
if (session_get_current_state(sess) == SESSION_STATE_INIT)
{
session_set_id(sess, snowflake_id_generate(mgr->now_ms / 1000));
if (mgr->id_generator)
{
uint64_t sess_id = mgr->id_generator(mgr->now_ms / 1000);
session_set_id(sess, sess_id);
}
else
{
session_set_id(sess, 0);
}
enum packet_direction pkt_dir = packet_get_direction(pkt);
if (dir == FLOW_DIRECTION_C2S)
{
@@ -974,6 +982,11 @@ void session_manager_free(struct session_manager *mgr)
}
}
void session_manager_set_session_id_generator(struct session_manager *mgr, session_id_generate_fn generator)
{
mgr->id_generator = generator;
}
void session_manager_record_duplicated_packet(struct session_manager *mgr, const struct packet *pkt)
{
if (mgr->opts.duplicated_packet_filter_enable)