diff --git a/src/adapter/adapter.c b/src/adapter/adapter.c index 3150a64d..ee07971f 100644 --- a/src/adapter/adapter.c +++ b/src/adapter/adapter.c @@ -235,6 +235,30 @@ static int persister_singleton_load_plugins(neu_adapter_t *adapter) return rv; } +static int persister_singleton_load_setting(neu_adapter_t *adapter, + const char * adapter_name, + neu_node_id_t node_id) +{ + neu_persister_t *persister = persister_singleton_get(); + const char * setting = NULL; + int rv = + neu_persister_load_adapter_setting(persister, adapter_name, &setting); + if (0 != rv) { + log_error("%s ignore fail load setting of adapter: %s", adapter->name, + adapter_name); + return 0; // ignore this error, may be no setting ever set + } + + rv = neu_manager_adapter_set_setting(adapter->manager, node_id, setting); + const char *ok_or_err = (0 == rv) ? "success" : "fail"; + log_info("%s %s set setting of %s %s", adapter->name, ok_or_err, + adapter_name, setting); + + free((char *) setting); + + return rv; +} + static int persister_singleton_load_data(neu_adapter_t *adapter) { vector_t * adapter_infos = NULL; @@ -262,7 +286,8 @@ static int persister_singleton_load_data(neu_adapter_t *adapter) .plugin_name = adapter_info->plugin_name, }; - rv = neu_manager_add_node(adapter->manager, &add_node_cmd, NULL); + neu_node_id_t node_id = 0; + rv = neu_manager_add_node(adapter->manager, &add_node_cmd, &node_id); const char *ok_or_err = (0 == rv) ? "success" : "fail"; log_info("%s load adapter %s type:%d, name:%s plugin:%s", adapter->name, ok_or_err, adapter_info->type, adapter_info->name, @@ -270,7 +295,13 @@ static int persister_singleton_load_data(neu_adapter_t *adapter) if (0 != rv) { goto error_add_adapters; } - // TODO: node setting + + rv = persister_singleton_load_setting(adapter, adapter_info->name, + node_id); + if (0 != rv) { + goto error_add_adapters; + } + // TODO: start node according to state } diff --git a/src/persist/persist.c b/src/persist/persist.c index 44541cac..a41d5adc 100644 --- a/src/persist/persist.c +++ b/src/persist/persist.c @@ -742,6 +742,29 @@ int neu_persister_store_adapter_setting(neu_persister_t *persister, return rv; } +int neu_persister_load_adapter_setting(neu_persister_t * persister, + const char * adapter_name, + const char **const setting) +{ + char path[PATH_MAX_SIZE] = { 0 }; + + int n = persister_adapter_dir(path, sizeof(path), persister, adapter_name); + if (sizeof(path) == n) { + log_error("persister path too long: %s", path); + return -1; + } + + n = path_cat(path, n, sizeof(path), "settings.json"); + if (sizeof(path) == n) { + log_error("persister path too long: %s", path); + return -1; + } + + int rv = read_file_string(path, (char **) setting); + + return rv; +} + int neu_persister_delete_adapter_setting(neu_persister_t *persister, const char * adapter_name) {