From 4ab12d318f923c3fa2f3b5efae4ee9ec7eb1007e Mon Sep 17 00:00:00 2001 From: eeff <33566201+eeff@users.noreply.github.com> Date: Wed, 8 Feb 2023 18:29:45 +0800 Subject: [PATCH] feat(core): persist value when static tags are written --- src/adapter/driver/driver.c | 17 +++++++---------- src/adapter/storage.c | 10 ++++++++++ src/adapter/storage.h | 2 ++ src/base/group.c | 11 +---------- 4 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/adapter/driver/driver.c b/src/adapter/driver/driver.c index a1a100d9..5cb3b3ed 100644 --- a/src/adapter/driver/driver.c +++ b/src/adapter/driver/driver.c @@ -261,10 +261,7 @@ void neu_adapter_driver_write_tag(neu_adapter_driver_t *driver, if ((tag->attribute & NEU_ATTRIBUTE_WRITE) != NEU_ATTRIBUTE_WRITE) { driver->adapter.cb_funs.driver.write_response( &driver->adapter, req, NEU_ERR_PLUGIN_TAG_NOT_ALLOW_WRITE); - free(tag->address); - free(tag->name); - free(tag->description); - free(tag); + neu_tag_free(tag); return; } if (tag->type == NEU_TYPE_FLOAT || tag->type == NEU_TYPE_DOUBLE) { @@ -398,21 +395,21 @@ void neu_adapter_driver_write_tag(neu_adapter_driver_t *driver, } if (neu_tag_attribute_test(tag, NEU_ATTRIBUTE_STATIC)) { - neu_driver_cache_add(g->driver->cache, g->name, tag->name, - cmd->value); + neu_driver_cache_update(g->driver->cache, g->name, tag->name, + global_timestamp, cmd->value); neu_tag_set_static_value(tag, &cmd->value.value); + neu_group_update_tag(g->group, tag); + adapter_storage_update_tag_value(cmd->driver, cmd->group, tag); neu_resp_error_t error = { .error = NEU_ERR_SUCCESS }; req->type = NEU_RESP_ERROR; driver->adapter.cb_funs.response(&driver->adapter, req, &error); + free(req); } else { driver->adapter.module->intf_funs->driver.write_tag( driver->adapter.plugin, (void *) req, tag, cmd->value.value); } - free(tag->address); - free(tag->name); - free(tag->description); - free(tag); + neu_tag_free(tag); } } diff --git a/src/adapter/storage.c b/src/adapter/storage.c index 4ee7d865..ff762ba6 100644 --- a/src/adapter/storage.c +++ b/src/adapter/storage.c @@ -102,6 +102,16 @@ void adapter_storage_update_tag(const char *node, const char *group, } } +void adapter_storage_update_tag_value(const char *node, const char *group, + const neu_datatag_t *tag) +{ + int rv = neu_persister_update_tag_value(node, group, tag); + if (0 != rv) { + nlog_error("fail update value tag:%s adapter:%s grp:%s", tag->name, + node, group); + } +} + void adapter_storage_del_tag(const char *node, const char *group, const char *name) { diff --git a/src/adapter/storage.h b/src/adapter/storage.h index adcbfe65..d7fd9a40 100644 --- a/src/adapter/storage.h +++ b/src/adapter/storage.h @@ -37,6 +37,8 @@ void adapter_storage_add_tags(const char *node, const char *group, const neu_datatag_t *tags, size_t n); void adapter_storage_update_tag(const char *node, const char *group, const neu_datatag_t *tag); +void adapter_storage_update_tag_value(const char *node, const char *group, + const neu_datatag_t *tag); void adapter_storage_del_tag(const char *node, const char *group, const char *name); diff --git a/src/base/group.c b/src/base/group.c index d525355c..05d447f6 100644 --- a/src/base/group.c +++ b/src/base/group.c @@ -210,16 +210,7 @@ neu_datatag_t *neu_group_find_tag(neu_group_t *group, const char *tag) HASH_FIND_STR(group->tags, tag, find); if (find != NULL) { - result = calloc(1, sizeof(neu_datatag_t)); - result->type = find->tag->type; - result->attribute = find->tag->attribute; - result->precision = find->tag->precision; - result->decimal = find->tag->decimal; - result->option = find->tag->option; - result->name = strdup(find->tag->name); - result->address = strdup(find->tag->address); - result->description = strdup(find->tag->description); - memcpy(result->meta, find->tag->meta, sizeof(find->tag->meta)); + result = neu_tag_dup(find->tag); } return result;