From fa21dcaa1fe1633454ad3bc4d0ed3012899438a9 Mon Sep 17 00:00:00 2001 From: fengzero Date: Fri, 12 Jun 2026 03:35:41 +0000 Subject: [PATCH] refactor check tag --- plugins/restful/datatag_handle.c | 9 ---- src/adapter/adapter.c | 74 +++++++--------------------- src/adapter/driver/driver.c | 13 ++--- src/adapter/driver/driver_internal.h | 5 +- 4 files changed, 26 insertions(+), 75 deletions(-) diff --git a/plugins/restful/datatag_handle.c b/plugins/restful/datatag_handle.c index df9dbdd6..9d6fef90 100644 --- a/plugins/restful/datatag_handle.c +++ b/plugins/restful/datatag_handle.c @@ -46,15 +46,6 @@ void handle_add_tags(nng_aio *aio) header.otel_trace_type = NEU_OTEL_TRACE_TYPE_REST_COMM; neu_resp_add_tag_t add_resp = { 0 }; - for (int i = 0; i < req->n_tag; i++) { - for (int k = 0; k < i; k++) { - if (strcmp(req->tags[i].name, req->tags[k].name) == 0) { - neu_resp_add_tag_result(&add_resp, i, - NEU_ERR_TAG_NAME_CONFLICT); - } - } - } - for (int i = 0; i < req->n_tag; i++) { if (req->tags[i].type == NEU_TYPE_STRING || req->tags[i].type == NEU_TYPE_BOOL || diff --git a/src/adapter/adapter.c b/src/adapter/adapter.c index f4c67355..e454fa9d 100644 --- a/src/adapter/adapter.c +++ b/src/adapter/adapter.c @@ -1569,18 +1569,27 @@ static int adapter_loop(enum neu_event_io_type type, int fd, void *usr_data) break; } case NEU_REQ_ADD_TAG: { - neu_req_add_tag_t *cmd = (neu_req_add_tag_t *) &header[1]; - neu_resp_add_tag_t resp = { 0 }; - uint16_t added_count = 0; + neu_req_add_tag_t *cmd = (neu_req_add_tag_t *) &header[1]; + neu_resp_add_tag_t resp = { 0 }; if (adapter->module->type == NEU_NA_TYPE_DRIVER) { for (int i = 0; i < cmd->n_tag; i++) { + for (int k = 0; k < i; k++) { + if (strcmp(cmd->tags[i].name, cmd->tags[k].name) == 0) { + neu_resp_add_tag_result(&resp, i, + NEU_ERR_TAG_NAME_CONFLICT); + } + } int ret = neu_adapter_driver_validate_tag( (neu_adapter_driver_t *) adapter, cmd->group, &cmd->tags[i]); - if (ret == 0) { - added_count += 1; - } else { + if (ret != 0) { + neu_resp_add_tag_result(&resp, i, ret); + } + ret = neu_adapter_driver_check_tag( + (neu_adapter_driver_t *) adapter, cmd->group, + &cmd->tags[i]); + if (ret != 0) { neu_resp_add_tag_result(&resp, i, ret); } } @@ -1589,47 +1598,14 @@ static int adapter_loop(enum neu_event_io_type type, int fd, void *usr_data) neu_resp_add_tag_result(&resp, 0, NEU_ERR_GROUP_NOT_ALLOW); } - resp.index = added_count; - if (resp.results != NULL && utarray_len(resp.results) > 0) { - neu_resp_tag_op_result_t *first = - (neu_resp_tag_op_result_t *) utarray_eltptr(resp.results, 0); - resp.error = first->error; - for (uint16_t i = 0; i < cmd->n_tag; i++) { - neu_tag_fini(&cmd->tags[i]); - } - neu_msg_exchange(header); - header->type = NEU_RESP_ADD_TAG; - free(cmd->tags); - reply(adapter, header, &resp); - break; - } - - resp.error = - neu_adapter_driver_check_tags((neu_adapter_driver_t *) adapter, - cmd->group, cmd->tags, cmd->n_tag); - if (resp.error != 0) { - for (uint16_t i = 0; i < cmd->n_tag; i++) { - neu_tag_fini(&cmd->tags[i]); - } - neu_msg_exchange(header); - resp.index = resp.error - 1; - resp.error = NEU_ERR_TAG_NAME_CONFLICT; - neu_resp_add_tag_result(&resp, resp.index, resp.error); - header->type = NEU_RESP_ADD_TAG; - free(cmd->tags); - reply(adapter, header, &resp); - break; - } - resp.error = neu_adapter_driver_try_add_tag((neu_adapter_driver_t *) adapter, cmd->group, cmd->tags, cmd->n_tag); - if (resp.error != 0) { + if (resp.error != 0 || utarray_len(resp.results) > 0) { for (uint16_t i = 0; i < cmd->n_tag; i++) { neu_tag_fini(&cmd->tags[i]); } resp.index = 0; - neu_resp_add_tag_result(&resp, 0, resp.error); neu_msg_exchange(header); header->type = NEU_RESP_ADD_TAG; free(cmd->tags); @@ -1637,24 +1613,12 @@ static int adapter_loop(enum neu_event_io_type type, int fd, void *usr_data) break; } - added_count = 0; for (int i = 0; i < cmd->n_tag; i++) { - int ret = neu_adapter_driver_add_tag( - (neu_adapter_driver_t *) adapter, cmd->group, &cmd->tags[i], - NEU_DEFAULT_GROUP_INTERVAL); - if (ret != 0) { - neu_adapter_driver_try_del_tag((neu_adapter_driver_t *) adapter, - cmd->n_tag - i); - added_count = i; - resp.error = ret; - neu_resp_add_tag_result(&resp, i, ret); - break; - } - added_count += 1; + neu_adapter_driver_add_tag((neu_adapter_driver_t *) adapter, + cmd->group, &cmd->tags[i], + NEU_DEFAULT_GROUP_INTERVAL); } - resp.index = added_count; - for (uint16_t i = resp.index; i < cmd->n_tag; i++) { neu_tag_fini(&cmd->tags[i]); } diff --git a/src/adapter/driver/driver.c b/src/adapter/driver/driver.c index 77febb6a..b7c795c1 100644 --- a/src/adapter/driver/driver.c +++ b/src/adapter/driver/driver.c @@ -2232,9 +2232,8 @@ int neu_adapter_driver_validate_tag(neu_adapter_driver_t *driver, return NEU_ERR_SUCCESS; } -int neu_adapter_driver_check_tags(neu_adapter_driver_t *driver, - const char *group, neu_datatag_t *tags, - int n_tag) +int neu_adapter_driver_check_tag(neu_adapter_driver_t *driver, + const char *group, neu_datatag_t *tag) { int ret = NEU_ERR_SUCCESS; group_t *find = NULL; @@ -2243,11 +2242,9 @@ int neu_adapter_driver_check_tags(neu_adapter_driver_t *driver, return ret; } - for (int i = 0; i < n_tag; i++) { - ret = neu_group_check_name(find->group, tags[i].name); - if (ret != NEU_ERR_SUCCESS) { - return i + 1; - } + ret = neu_group_check_name(find->group, tag->name); + if (ret != NEU_ERR_SUCCESS) { + return NEU_ERR_TAG_NAME_CONFLICT; } return ret; diff --git a/src/adapter/driver/driver_internal.h b/src/adapter/driver/driver_internal.h index 3ea31e2d..1e068405 100644 --- a/src/adapter/driver/driver_internal.h +++ b/src/adapter/driver/driver_internal.h @@ -72,9 +72,8 @@ int neu_adapter_driver_load_tag(neu_adapter_driver_t *driver, const char *group, int neu_adapter_driver_validate_tag(neu_adapter_driver_t *driver, const char *group, neu_datatag_t *tag); -int neu_adapter_driver_check_tags(neu_adapter_driver_t *driver, - const char *group, neu_datatag_t *tags, - int n_tag); +int neu_adapter_driver_check_tag(neu_adapter_driver_t *driver, + const char *group, neu_datatag_t *tag); int neu_adapter_driver_add_tag(neu_adapter_driver_t *driver, const char *group, neu_datatag_t *tag, uint16_t interval); int neu_adapter_driver_del_tag(neu_adapter_driver_t *driver, const char *group,