From 1ed632898b034ad04b7e2e3ae19e9c1ea5e032a4 Mon Sep 17 00:00:00 2001 From: eeff <33566201+eeff@users.noreply.github.com> Date: Tue, 22 Aug 2023 18:09:08 +0800 Subject: [PATCH] fix(template): add/validate tags in template instantiation --- src/core/manager_internal.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/core/manager_internal.c b/src/core/manager_internal.c index 8477fbac..8afce51a 100644 --- a/src/core/manager_internal.c +++ b/src/core/manager_internal.c @@ -505,14 +505,31 @@ static int add_template_group(neu_group_t *grp, void *data) return NEU_ERR_EINTERNAL; } + ret = neu_adapter_driver_try_add_tag(driver, name, utarray_eltptr(tags, 0), + utarray_len(tags)); + if (0 != ret) { + utarray_free(tags); + return ret; + } + utarray_foreach(tags, neu_datatag_t *, tag) { + // this invocation is not necessary since we validate when adding tags + // we keep it here as an act of defensive programming + ret = neu_adapter_driver_validate_tag(driver, name, tag); + if (0 != ret) { + break; + } + ret = neu_adapter_driver_add_tag(driver, name, tag); if (0 != ret) { break; } } + // we do not call neu_adapter_driver_try_del_tag here, + // relying on neu_adapter_driver_uninit to delete the tags + utarray_free(tags); return ret; } @@ -545,6 +562,7 @@ int neu_manager_instantiate_template(neu_manager_t * manager, end: if (0 != ret) { + // this will call neu_adapter_driver_try_del_tag to cleanup neu_adapter_uninit(adapter); neu_manager_del_node(manager, req->node); }