From 0e2d11322a993debf784d601e0866ec812fce065 Mon Sep 17 00:00:00 2001 From: eeff <33566201+eeff@users.noreply.github.com> Date: Fri, 14 Apr 2023 16:48:25 +0800 Subject: [PATCH] feat(core): manager fulfill del template tags requests --- include/neuron/adapter.h | 9 +++++++++ src/core/manager.c | 17 +++++++++++++++++ src/core/manager_internal.c | 24 ++++++++++++++++++++++++ src/core/manager_internal.h | 2 ++ 4 files changed, 52 insertions(+) diff --git a/include/neuron/adapter.h b/include/neuron/adapter.h index 1c3ef13f..064a9eca 100644 --- a/include/neuron/adapter.h +++ b/include/neuron/adapter.h @@ -529,6 +529,15 @@ typedef struct { char ** tags; } neu_req_del_template_tag_t; +static inline void +neu_req_del_template_tag_fini(neu_req_del_template_tag_t *req) +{ + for (uint16_t i = 0; i < req->n_tag; ++i) { + free(req->tags[i]); + } + free(req->tags); +} + typedef struct neu_req_get_template_tag { char tmpl[NEU_TEMPLATE_NAME_LEN]; char group[NEU_GROUP_NAME_LEN]; diff --git a/src/core/manager.c b/src/core/manager.c index 5a8c3b43..2156b5ae 100644 --- a/src/core/manager.c +++ b/src/core/manager.c @@ -415,6 +415,23 @@ static int manager_loop(enum neu_event_io_type type, int fd, void *usr_data) reply(manager, header, &resp); break; } + case NEU_REQ_DEL_TEMPLATE_TAG: { + neu_req_del_template_tag_t *cmd = + (neu_req_del_template_tag_t *) &header[1]; + neu_resp_error_t resp = { 0 }; + + resp.error = neu_manager_del_template_tags(manager, cmd); + if (0 == resp.error) { + // TODO: storage + } + + neu_req_del_template_tag_fini(cmd); + + header->type = NEU_RESP_ERROR; + strcpy(header->receiver, header->sender); + reply(manager, header, &resp); + break; + } case NEU_REQ_ADD_NODE: { neu_req_add_node_t *cmd = (neu_req_add_node_t *) &header[1]; int error = diff --git a/src/core/manager_internal.c b/src/core/manager_internal.c index e356fe9b..ca13a290 100644 --- a/src/core/manager_internal.c +++ b/src/core/manager_internal.c @@ -291,6 +291,30 @@ int neu_manager_update_template_tags(neu_manager_t * manager, return ret; } +int neu_manager_del_template_tags(neu_manager_t * manager, + neu_req_del_template_tag_t *req) +{ + neu_template_t *tmpl = + neu_template_manager_find(manager->template_manager, req->tmpl); + if (NULL == tmpl) { + return NEU_ERR_TEMPLATE_NOT_FOUND; + } + + neu_group_t *grp = neu_template_get_group(tmpl, req->group); + if (NULL == grp) { + return NEU_ERR_GROUP_NOT_EXIST; + } + + int i = 0; + for (; i < req->n_tag; ++i) { + // the only possible error is that the tag does not exist + // in which case we just ignore and continue + neu_group_del_tag(grp, req->tags[i]); + } + + return 0; +} + UT_array *neu_manager_get_driver_group(neu_manager_t *manager) { UT_array *drivers = diff --git a/src/core/manager_internal.h b/src/core/manager_internal.h index 2680ab1d..598983bb 100644 --- a/src/core/manager_internal.h +++ b/src/core/manager_internal.h @@ -71,6 +71,8 @@ int neu_manager_add_template_tags(neu_manager_t * manager, int neu_manager_update_template_tags(neu_manager_t * manager, neu_req_add_template_tag_t *req, uint16_t * index_p); +int neu_manager_del_template_tags(neu_manager_t * manager, + neu_req_del_template_tag_t *req); UT_array *neu_manager_get_driver_group(neu_manager_t *manager);