snowflake changes from global static variables to one instance per thread
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user