From 563b9152bc8621b3502a2c166986a055d93c5537 Mon Sep 17 00:00:00 2001 From: fengzero Date: Wed, 19 Jul 2023 06:38:01 +0000 Subject: [PATCH] fix(driver): if the state of the node was stopped before restart, stop the node --- include/neuron/adapter.h | 4 ++-- src/adapter/adapter.c | 6 +++--- src/adapter/adapter_internal.h | 2 +- src/core/manager.c | 6 +++++- src/core/manager_internal.c | 5 +++-- src/core/manager_internal.h | 3 ++- src/core/storage.c | 5 ++--- 7 files changed, 18 insertions(+), 13 deletions(-) diff --git a/include/neuron/adapter.h b/include/neuron/adapter.h index 11bb6430..5c15518f 100644 --- a/include/neuron/adapter.h +++ b/include/neuron/adapter.h @@ -207,8 +207,8 @@ typedef struct neu_resp_error { } neu_resp_error_t; typedef struct { - char node[NEU_NODE_NAME_LEN]; - bool auto_start; + char node[NEU_NODE_NAME_LEN]; + neu_node_running_state_e state; } neu_req_node_init_t, neu_req_node_uninit_t, neu_resp_node_uninit_t; typedef struct neu_req_add_plugin { diff --git a/src/adapter/adapter.c b/src/adapter/adapter.c index 21683725..9d537670 100644 --- a/src/adapter/adapter.c +++ b/src/adapter/adapter.c @@ -187,7 +187,7 @@ neu_adapter_t *neu_adapter_create(neu_adapter_info_t *info) return adapter; } -void neu_adapter_init(neu_adapter_t *adapter, bool auto_start) +void neu_adapter_init(neu_adapter_t *adapter, neu_node_running_state_e state) { neu_reqresp_head_t header = { .type = NEU_REQ_NODE_INIT }; neu_req_node_init_t init = { 0 }; @@ -197,8 +197,8 @@ void neu_adapter_init(neu_adapter_t *adapter, bool auto_start) strcpy(header.receiver, "manager"); strcpy(init.node, adapter->name); - init.auto_start = auto_start; - init_msg = neu_msg_gen(&header, &init); + init.state = state; + init_msg = neu_msg_gen(&header, &init); nng_sendmsg(adapter->sock, init_msg, 0); } diff --git a/src/adapter/adapter_internal.h b/src/adapter/adapter_internal.h index 27c9418b..f80fae9d 100644 --- a/src/adapter/adapter_internal.h +++ b/src/adapter/adapter_internal.h @@ -64,7 +64,7 @@ typedef struct adapter_msg_handler { } adapter_msg_handler_t; neu_adapter_t *neu_adapter_create(neu_adapter_info_t *info); -void neu_adapter_init(neu_adapter_t *adapter, bool auto_start); +void neu_adapter_init(neu_adapter_t *adapter, neu_node_running_state_e state); int neu_adapter_start(neu_adapter_t *adapter); int neu_adapter_start_single(neu_adapter_t *adapter); diff --git a/src/core/manager.c b/src/core/manager.c index 9b14b591..b3c05a9d 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -267,10 +267,14 @@ static int manager_loop(enum neu_event_io_type type, int fd, void *usr_data) neu_node_manager_update(manager->node_manager, init->node, pipe); - if (init->auto_start) { + if (init->state == NEU_NODE_RUNNING_STATE_STOPPED || + init->state == NEU_NODE_RUNNING_STATE_RUNNING) { neu_adapter_t *adapter = neu_node_manager_find(manager->node_manager, init->node); neu_adapter_start(adapter); + if (init->state == NEU_NODE_RUNNING_STATE_STOPPED) { + neu_adapter_stop(adapter); + } } nlog_notice("bind node %s to pipe(%d)", init->node, pipe.id); diff --git a/src/core/manager_internal.c b/src/core/manager_internal.c index 0100eb5d..9a56e486 100644 --- a/src/core/manager_internal.c +++ b/src/core/manager_internal.c @@ -43,7 +43,8 @@ UT_array *neu_manager_get_plugins(neu_manager_t *manager) } int neu_manager_add_node(neu_manager_t *manager, const char *node_name, - const char *plugin_name, bool start) + const char * plugin_name, + neu_node_running_state_e state) { neu_adapter_t * adapter = NULL; neu_plugin_instance_t instance = { 0 }; @@ -77,7 +78,7 @@ int neu_manager_add_node(neu_manager_t *manager, const char *node_name, adapter = neu_adapter_create(&adapter_info); neu_node_manager_add(manager->node_manager, adapter); - neu_adapter_init(adapter, start); + neu_adapter_init(adapter, state); return NEU_ERR_SUCCESS; } diff --git a/src/core/manager_internal.h b/src/core/manager_internal.h index c5381565..ac7e7af4 100644 --- a/src/core/manager_internal.h +++ b/src/core/manager_internal.h @@ -52,7 +52,8 @@ int neu_manager_del_plugin(neu_manager_t *manager, const char *plugin); UT_array *neu_manager_get_plugins(neu_manager_t *manager); int neu_manager_add_node(neu_manager_t *manager, const char *node_name, - const char *plugin_name, bool start); + const char * plugin_name, + neu_node_running_state_e state); int neu_manager_del_node(neu_manager_t *manager, const char *node_name); UT_array *neu_manager_get_nodes(neu_manager_t *manager, neu_node_type_e type, const char *plugin, const char *node); diff --git a/src/core/storage.c b/src/core/storage.c index 822ff812..a6687b32 100644 --- a/src/core/storage.c +++ b/src/core/storage.c @@ -118,9 +118,8 @@ int manager_load_node(neu_manager_t *manager) utarray_foreach(node_infos, neu_persist_node_info_t *, node_info) { - rv = neu_manager_add_node( - manager, node_info->name, node_info->plugin_name, - node_info->state == NEU_NODE_RUNNING_STATE_RUNNING); + rv = neu_manager_add_node(manager, node_info->name, + node_info->plugin_name, node_info->state); const char *ok_or_err = (0 == rv) ? "success" : "fail"; nlog_notice("load adapter %s type:%d, name:%s plugin:%s state:%d", ok_or_err, node_info->type, node_info->name,