summaryrefslogtreecommitdiff
path: root/infra/packet_manager
diff options
context:
space:
mode:
authorluwenpeng <[email protected]>2024-10-09 10:01:20 +0800
committerluwenpeng <[email protected]>2024-10-09 10:02:42 +0800
commit0f082d975ec067e268d868b0855083caaeff9522 (patch)
tree7bcecc3aa50aa0a2941361797bdedbdf6e0af9a4 /infra/packet_manager
parentd9d9b4728dbb9b8c4aaef17a41067eb173744cb9 (diff)
stellar registers packet_manager as a module; session_manager registers polling callback
Diffstat (limited to 'infra/packet_manager')
-rw-r--r--infra/packet_manager/CMakeLists.txt2
-rw-r--r--infra/packet_manager/packet_manager.c59
2 files changed, 56 insertions, 5 deletions
diff --git a/infra/packet_manager/CMakeLists.txt b/infra/packet_manager/CMakeLists.txt
index 24cae44..9b9c132 100644
--- a/infra/packet_manager/CMakeLists.txt
+++ b/infra/packet_manager/CMakeLists.txt
@@ -11,6 +11,6 @@ target_include_directories(packet_manager PUBLIC ${CMAKE_SOURCE_DIR}/deps/uthash
target_include_directories(packet_manager PUBLIC ${CMAKE_SOURCE_DIR}/deps/logger)
target_include_directories(packet_manager PUBLIC ${CMAKE_SOURCE_DIR}/include)
target_include_directories(packet_manager PUBLIC ${CMAKE_SOURCE_DIR}/infra)
-target_link_libraries(packet_manager tuple logger dablooms mq exdata)
+target_link_libraries(packet_manager tuple logger dablooms mq exdata module_manager)
add_subdirectory(test) \ No newline at end of file
diff --git a/infra/packet_manager/packet_manager.c b/infra/packet_manager/packet_manager.c
index 2c422d3..d9e5305 100644
--- a/infra/packet_manager/packet_manager.c
+++ b/infra/packet_manager/packet_manager.c
@@ -1,7 +1,9 @@
#include <assert.h>
-#include "utils.h"
#include "stellar/mq.h"
+#include "stellar/module_manager.h"
+
+#include "utils.h"
#include "packet_internal.h"
#include "packet_manager_internal.h"
@@ -272,11 +274,14 @@ void packet_manager_free(struct packet_manager *pkt_mgr)
{
if (pkt_mgr)
{
- for (uint16_t i = 0; i < pkt_mgr->cfg->nr_worker_thread; i++)
+ if (pkt_mgr->cfg)
{
- if (pkt_mgr->runtime[i])
+ for (uint16_t i = 0; i < pkt_mgr->cfg->nr_worker_thread; i++)
{
- packet_manager_runtime_free(pkt_mgr->runtime[i]);
+ if (pkt_mgr->runtime[i])
+ {
+ packet_manager_runtime_free(pkt_mgr->runtime[i]);
+ }
}
}
@@ -300,6 +305,9 @@ int packet_manager_subscribe(struct packet_manager *pkt_mgr, enum packet_stage s
void packet_manager_init(struct packet_manager *pkt_mgr, uint16_t thread_id, struct mq_runtime *mq_rt)
{
+ assert(pkt_mgr);
+ assert(thread_id < pkt_mgr->cfg->nr_worker_thread);
+ assert(mq_rt);
struct packet_manager_runtime *runtime = pkt_mgr->runtime[thread_id];
runtime->mq = mq_rt;
@@ -432,3 +440,46 @@ void packet_manager_print_stat(struct packet_manager *pkt_mgr, uint16_t thread_i
runtime->stat.queue[i].pkts_schedule);
}
}
+
+/******************************************************************************
+ * packet manager module
+ ******************************************************************************/
+
+struct stellar_module *packet_manager_on_init(struct stellar_module_manager *mod_mgr)
+{
+ assert(mod_mgr);
+ struct mq_schema *mq_schema = stellar_module_manager_get_mq_schema(mod_mgr);
+ assert(mq_schema);
+ const char *toml_file = stellar_module_manager_get_toml_path(mod_mgr);
+ assert(toml_file);
+
+ struct packet_manager *pkt_mgr = packet_manager_new(mq_schema, toml_file);
+ if (pkt_mgr == NULL)
+ {
+ return NULL;
+ }
+
+ struct stellar_module *pkt_mgr_mod = stellar_module_new(PACKET_MANAGER_MODULE_NAME, NULL);
+ if (pkt_mgr_mod == NULL)
+ {
+ PACKET_MANAGER_LOG_ERROR("failed to create packet_manager");
+ packet_manager_free(pkt_mgr);
+ return NULL;
+ }
+ stellar_module_set_ctx(pkt_mgr_mod, pkt_mgr);
+
+ PACKET_MANAGER_LOG_INFO("packet_manager initialized");
+ return pkt_mgr_mod;
+}
+
+void packet_manager_on_exit(struct stellar_module_manager *mod_mgr __attribute__((unused)), struct stellar_module *mod)
+{
+ if (mod)
+ {
+ struct packet_manager *pkt_mgr = stellar_module_get_ctx(mod);
+
+ packet_manager_free(pkt_mgr);
+ stellar_module_free(mod);
+ PACKET_MANAGER_LOG_INFO("packet_manager exited");
+ }
+} \ No newline at end of file