feat(persistence): migrate setting persistence to sqlite

This commit is contained in:
eeff
2022-07-15 18:20:29 +08:00
parent f597fd7e21
commit 4e85fab19a
3 changed files with 64 additions and 63 deletions
+3 -3
View File
@@ -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
View File
@@ -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
View File
@@ -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
}