执行resetall指令:Sapp重启后发送resetall状态通知SCE清空流表
This commit is contained in:
@@ -28,7 +28,11 @@ static void *worker_thread_cycle(void *arg)
|
||||
LOG_INFO("%s: worker thread %d recv %03d packets from endpoint", LOG_TAG_SCE, thread_ctx->thread_index, n_packet_recv);
|
||||
}
|
||||
|
||||
// TODO reset session_table
|
||||
if (__atomic_fetch_add(&thread_ctx->session_table_need_reset, 0, __ATOMIC_RELAXED) > 0)
|
||||
{
|
||||
session_table_reset(thread_ctx->session_table);
|
||||
__atomic_fetch_and(&thread_ctx->session_table_need_reset, 0, __ATOMIC_RELAXED);
|
||||
}
|
||||
}
|
||||
|
||||
LOG_ERROR("%s: worker thread %d exiting", LOG_TAG_SCE, thread_ctx->thread_index);
|
||||
@@ -53,6 +57,8 @@ int main(int argc, char **argv)
|
||||
ctx->work_threads[i].ref_io = ctx->io;
|
||||
ctx->work_threads[i].ref_metrics = ctx->metrics;
|
||||
ctx->work_threads[i].ref_enforcer = ctx->enforcer;
|
||||
ctx->work_threads[i].ref_sce_ctx = ctx;
|
||||
ctx->work_threads[i].session_table_need_reset = 0;
|
||||
}
|
||||
|
||||
for (int i = 0; i < ctx->nr_worker_threads; i++)
|
||||
|
||||
@@ -1186,12 +1186,17 @@ static int handle_session_resetall(struct metadata *meta, struct ctrl_pkt_parser
|
||||
{
|
||||
struct thread_ctx *thread = (struct thread_ctx *)ctx;
|
||||
struct global_metrics *g_metrics = thread->ref_metrics;
|
||||
struct sce_ctx *sce_ctx = thread->ref_sce_ctx;
|
||||
|
||||
LOG_ERROR("%s: session %lu notification clears all session tables !!!", LOG_TAG_PKTIO, meta->session_id);
|
||||
|
||||
__atomic_fetch_and(&g_metrics->session_nums, 0, __ATOMIC_RELAXED);
|
||||
|
||||
// TODO reset all session_table
|
||||
for (int i = 0; i < sce_ctx->nr_worker_threads; i++)
|
||||
{
|
||||
struct thread_ctx *thread_ctx = &sce_ctx->work_threads[i];
|
||||
__atomic_fetch_add(&thread_ctx->session_table_need_reset, 1, __ATOMIC_RELAXED);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user