mirror of
https://github.com/emqx/neuron.git
synced 2026-10-29 07:06:32 +08:00
feat(persistence): migrate setting persistence to sqlite
This commit is contained in:
@@ -26,7 +26,7 @@
|
||||
void adapter_storage_setting(neu_persister_t *persister, const char *node,
|
||||
const char *setting)
|
||||
{
|
||||
neu_persister_store_adapter_setting(persister, node, setting);
|
||||
neu_persister_store_node_setting(persister, node, setting);
|
||||
}
|
||||
|
||||
void adapter_storage_add_group(neu_persister_t *persister, const char *node,
|
||||
@@ -70,8 +70,8 @@ void adapter_storage_tag(neu_persister_t *persister, neu_adapter_t *adapter,
|
||||
int adapter_load_setting(neu_persister_t *persister, const char *node,
|
||||
char **setting)
|
||||
{
|
||||
int rv = neu_persister_load_adapter_setting(persister, node,
|
||||
(const char **) setting);
|
||||
int rv = neu_persister_load_node_setting(persister, node,
|
||||
(const char **) setting);
|
||||
if (0 != rv) {
|
||||
nlog_info("load %s setting fail", node);
|
||||
return -1;
|
||||
|
||||
+46
-45
@@ -1077,60 +1077,61 @@ int neu_persister_delete_group_config(neu_persister_t *persister,
|
||||
return rv;
|
||||
}
|
||||
|
||||
int neu_persister_store_adapter_setting(neu_persister_t *persister,
|
||||
const char * adapter_name,
|
||||
const char * setting)
|
||||
int neu_persister_store_node_setting(neu_persister_t *persister,
|
||||
const char *node_name, const char *setting)
|
||||
{
|
||||
char path[PATH_MAX_SIZE] = { 0 };
|
||||
return neu_persister_sql_exec(
|
||||
persister,
|
||||
"INSERT OR REPLACE INTO settings (node_name, setting) VALUES (%Q, %Q)",
|
||||
node_name, setting);
|
||||
}
|
||||
|
||||
int n = persister_adapter_dir(path, sizeof(path), persister, adapter_name);
|
||||
if (sizeof(path) == n) {
|
||||
nlog_error("persister path too long: %s", path);
|
||||
return -1;
|
||||
}
|
||||
if (0 != create_dir(path)) {
|
||||
nlog_error("persister failed to create dir: %s", path);
|
||||
return -1;
|
||||
int neu_persister_load_node_setting(neu_persister_t * persister,
|
||||
const char * node_name,
|
||||
const char **const setting)
|
||||
{
|
||||
int rv = 0;
|
||||
sqlite3_stmt *stmt = NULL;
|
||||
const char * query = "SELECT setting FROM settings WHERE node_name=?";
|
||||
|
||||
if (SQLITE_OK !=
|
||||
sqlite3_prepare_v2(persister->db, query, -1, &stmt, NULL)) {
|
||||
nlog_error("prepare `%s` with `%s` fail: %s", query, node_name,
|
||||
sqlite3_errmsg(persister->db));
|
||||
return NEU_ERR_EINTERNAL;
|
||||
}
|
||||
|
||||
n = path_cat(path, n, sizeof(path), "settings.json");
|
||||
if (sizeof(path) == n) {
|
||||
nlog_error("persister path too long: %s", path);
|
||||
return -1;
|
||||
if (SQLITE_OK != sqlite3_bind_text(stmt, 1, node_name, -1, NULL)) {
|
||||
nlog_error("bind `%s` with `%s` fail: %s", query, node_name,
|
||||
sqlite3_errmsg(persister->db));
|
||||
rv = NEU_ERR_EINTERNAL;
|
||||
goto end;
|
||||
}
|
||||
|
||||
int rv = write_file_string(path, setting);
|
||||
if (SQLITE_ROW != sqlite3_step(stmt)) {
|
||||
nlog_warn("SQL `%s` with `%s` fail: %s", query, node_name,
|
||||
sqlite3_errmsg(persister->db));
|
||||
rv = NEU_ERR_EINTERNAL;
|
||||
goto end;
|
||||
}
|
||||
|
||||
char *s = strdup((char *) sqlite3_column_text(stmt, 0));
|
||||
if (NULL == s) {
|
||||
nlog_error("strdup fail");
|
||||
rv = NEU_ERR_EINTERNAL;
|
||||
goto end;
|
||||
}
|
||||
|
||||
*setting = s;
|
||||
|
||||
end:
|
||||
sqlite3_finalize(stmt);
|
||||
return rv;
|
||||
}
|
||||
|
||||
int neu_persister_load_adapter_setting(neu_persister_t * persister,
|
||||
const char * adapter_name,
|
||||
const char **const setting)
|
||||
int neu_persister_delete_node_setting(neu_persister_t *persister,
|
||||
const char * node_name)
|
||||
{
|
||||
char path[PATH_MAX_SIZE] = { 0 };
|
||||
|
||||
int n = persister_adapter_dir(path, sizeof(path), persister, adapter_name);
|
||||
if (sizeof(path) == n) {
|
||||
nlog_error("persister path too long: %s", path);
|
||||
return -1;
|
||||
}
|
||||
|
||||
n = path_cat(path, n, sizeof(path), "settings.json");
|
||||
if (sizeof(path) == n) {
|
||||
nlog_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)
|
||||
{
|
||||
(void) persister;
|
||||
(void) adapter_name;
|
||||
return 0;
|
||||
return neu_persister_sql_exec(
|
||||
persister, "DELETE FROM settings WHERE node_name=%Q", node_name);
|
||||
}
|
||||
|
||||
+15
-15
@@ -241,33 +241,33 @@ int neu_persister_delete_group_config(neu_persister_t *persister,
|
||||
const char * group_config_name);
|
||||
|
||||
/**
|
||||
* Persist adapter setting.
|
||||
* Persist node setting.
|
||||
* @param persister persiter object.
|
||||
* @param adapter_name name of the adapter who owns the setting.
|
||||
* @param setting adapter setting string.
|
||||
* @param setting node setting string.
|
||||
* @return 0 on success, non-zero otherwise
|
||||
*/
|
||||
int neu_persister_store_adapter_setting(neu_persister_t *persister,
|
||||
const char * adapter_name,
|
||||
const char * setting);
|
||||
int neu_persister_store_node_setting(neu_persister_t *persister,
|
||||
const char * node_name,
|
||||
const char * setting);
|
||||
/**
|
||||
* Load adapter setting.
|
||||
* Load node setting.
|
||||
* @param persister persiter object.
|
||||
* @param adapter_name name of the adapter.
|
||||
* @param[out] setting used to return adapter setting string.
|
||||
* @param node_name name of the node.
|
||||
* @param[out] setting used to return node setting string.
|
||||
* @return 0 on success, non-zero otherwise
|
||||
*/
|
||||
int neu_persister_load_adapter_setting(neu_persister_t * persister,
|
||||
const char * adapter_name,
|
||||
const char **const setting);
|
||||
int neu_persister_load_node_setting(neu_persister_t * persister,
|
||||
const char * node_name,
|
||||
const char **const setting);
|
||||
/**
|
||||
* Delete adapter setting.
|
||||
* Delete node setting.
|
||||
* @param persister persiter object.
|
||||
* @param adapter_name name of the adapter.
|
||||
* @param node_name name of the node.
|
||||
* @return 0 on success, none-zero on failure
|
||||
*/
|
||||
int neu_persister_delete_adapter_setting(neu_persister_t *persister,
|
||||
const char * adapter_name);
|
||||
int neu_persister_delete_node_setting(neu_persister_t *persister,
|
||||
const char * node_name);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user