Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • cellframe/libdap-chain-global-db
1 result
Show changes
Commits on Source (11)
/*
/*
* Authors:
* Alexander Lysikov <alexander.lysikov@demlabs.net>
* DeM Labs Inc. https://demlabs.net
......@@ -48,7 +48,6 @@
#define LOG_TAG "dap_global_db"
#define DAP_APP_NAME NODE_NETNAME "-node"
// for access from several streams
//static pthread_mutex_t ldb_mutex_ = PTHREAD_MUTEX_INITIALIZER;
......@@ -76,6 +75,7 @@ typedef struct history_group_item
// Tacked group callbacks
static history_group_item_t * s_history_group_items = NULL;
static char *s_storage_path = NULL;
char * extract_group_prefix(const char * a_group);
......@@ -177,16 +177,12 @@ void dap_chain_global_db_objs_delete(dap_global_db_obj_t *objs, size_t a_count)
*/
int dap_chain_global_db_init(dap_config_t * g_config)
{
char l_storage_path[MAX_PATH];
#ifdef WIN32
memcpy(l_storage_path, s_sys_dir_path, l_sys_dir_path_len);
#endif
dap_sprintf(l_storage_path + l_sys_dir_path_len, "%s",
dap_config_get_item_str(g_config, "resources", "dap_global_db_path"));
s_storage_path= dap_strdup(
dap_config_get_item_str(g_config, "resources", "dap_global_db_path") );
//const char *l_driver_name = dap_config_get_item_str_default(g_config, "resources", "dap_global_db_driver", "sqlite");
const char *l_driver_name = dap_config_get_item_str_default(g_config, "resources", "dap_global_db_driver", "cdb");
lock();
int res = dap_db_driver_init(l_driver_name, l_storage_path);
int res = dap_db_driver_init(l_driver_name, s_storage_path);
unlock();
return res;
}
......@@ -299,9 +295,19 @@ uint8_t * dap_chain_global_db_get(const char *a_key, size_t *a_data_out)
}
/**
* Set one entry to base
*
*/
/**
* @brief dap_chain_global_db_gr_set
* @param a_key
* @param a_value
* @param a_value_len
* @param a_group
* @details Set one entry to base. IMPORTANT: a_key and a_value should be passed without free after (it will be released by gdb itself)
* @return
*/
bool dap_chain_global_db_gr_set(char *a_key, void *a_value, size_t a_value_len, char *a_group)
bool dap_chain_global_db_gr_set(char *a_key, void *a_value, size_t a_value_len, const char *a_group)
{
dap_store_obj_t store_data;// = DAP_NEW_Z_SIZE(dap_store_obj_t, sizeof(struct dap_store_obj));
memset(&store_data, 0, sizeof(dap_store_obj_t));
......@@ -352,14 +358,14 @@ bool dap_chain_global_db_set( char *a_key, void *a_value, size_t a_value_len)
/**
* Delete entry from base
*/
bool dap_chain_global_db_gr_del(char *a_key, char *a_group)
bool dap_chain_global_db_gr_del(char *a_key,const char *a_group)
{
if(!a_key)
return NULL;
pdap_store_obj_t store_data = DAP_NEW_Z_SIZE(dap_store_obj_t, sizeof(struct dap_store_obj));
store_data->key = a_key;
store_data->c_key = a_key;
store_data->group = a_group;
// store_data->c_key = a_key;
store_data->group = dap_strdup(a_group);
store_data->c_group = a_group;
lock();
int l_res = dap_chain_global_db_driver_delete(store_data, 1);
......@@ -383,7 +389,7 @@ bool dap_chain_global_db_gr_del(char *a_key, char *a_group)
if(l_group_prefix)
DAP_DELETE(l_group_prefix);
}
DAP_DELETE(store_data);
//DAP_DELETE(store_data);
if(!l_res)
return true;
return false;
......
......@@ -66,13 +66,13 @@ uint8_t * dap_chain_global_db_get(const char *a_key, size_t *a_data_out);
/**
* Set one entry to base
*/
bool dap_chain_global_db_gr_set(char *a_key, void *a_value, size_t a_value_len, char *a_group);
bool dap_chain_global_db_gr_set(char *a_key, void *a_value, size_t a_value_len,const char *a_group);
bool dap_chain_global_db_set( char *a_key, void *a_value, size_t a_value_len);
/**
* Delete entry from base
*/
bool dap_chain_global_db_gr_del(char *a_key, char *a_group);
bool dap_chain_global_db_gr_del(char *a_key, const char *a_group);
bool dap_chain_global_db_del(char *a_key);
/**
......
......@@ -402,7 +402,7 @@ dap_store_obj_t* dap_db_driver_cdb_read_cond_store_obj(const char *a_group, uint
if (l_arg.q > 0) {
l_count_out = l_arg.n - l_arg.q;
void *tmp = DAP_REALLOC(l_arg.o, l_count_out * sizeof(dap_store_obj_t));
if (!tmp) {
if (!tmp && l_count_out) {
log_it(L_CRITICAL, "Couldn't re-allocate memory for portion of store objects!");
DAP_DELETE(l_arg.o);
return NULL;
......
......@@ -1164,6 +1164,7 @@ dap_list_t* dap_db_log_get_list(uint64_t first_id)
{
dap_list_t *l_list = NULL;
size_t l_data_size_out = 0;
log_it(L_DEBUG,"loading db list...");
dap_store_obj_t *l_objs = dap_chain_global_db_cond_load(GROUP_LOCAL_HISTORY, first_id, &l_data_size_out);
//dap_global_db_obj_t *l_objs = dap_chain_global_db_gr_load(GROUP_LOCAL_HISTORY, first_timestamp, &l_data_size_out);
for(size_t i = 0; i < l_data_size_out; i++) {
......@@ -1174,6 +1175,7 @@ dap_list_t* dap_db_log_get_list(uint64_t first_id)
l_item->value = (uint8_t*) dap_strdup((char*) l_obj_cur->value);
l_list = dap_list_append(l_list, l_item);
}
log_it(L_DEBUG,"loaded db list n=%d", l_data_size_out);
dap_store_obj_free(l_objs, l_data_size_out);
return l_list;
......
......@@ -2,7 +2,7 @@
#include <stdlib.h>
#include <time.h>
//#include <dap_common.h>
#include <dap_common.h>
#include <dap_strfuncs.h>
#include <dap_string.h>
//#include "dap_chain_node.h"
......@@ -19,12 +19,15 @@ static bool dap_db_set_cur_node_addr_common(uint64_t a_address, char *a_net_name
if(!a_net_name)
return false;
char *l_key = dap_strdup_printf("cur_node_addr_%s", a_net_name);
bool l_ret = dap_chain_global_db_gr_set(l_key, (uint8_t*) &a_address, sizeof(a_address), GROUP_LOCAL_GENERAL);
DAP_DELETE(l_key);
uint64_t * l_address = DAP_NEW_Z(uint64_t);
*l_address = a_address;
bool l_ret = dap_chain_global_db_gr_set(l_key, (uint8_t*) l_address, sizeof(a_address), GROUP_LOCAL_GENERAL);
//DAP_DELETE(l_key);
if(l_ret) {
time_t l_cur_time = a_expire_time;
time_t *l_cur_time = DAP_NEW_Z(time_t);
*l_cur_time= a_expire_time;
char *l_key_time = dap_strdup_printf("cur_node_addr_%s_time", a_net_name);
l_ret = dap_chain_global_db_gr_set(l_key_time, (uint8_t*) &l_cur_time, sizeof(time_t), GROUP_LOCAL_GENERAL);
l_ret = dap_chain_global_db_gr_set( dap_strdup(l_key_time), (uint8_t*) l_cur_time, sizeof(time_t), GROUP_LOCAL_GENERAL);
DAP_DELETE(l_key_time);
}
return l_ret;
......@@ -108,7 +111,7 @@ bool dap_db_log_set_last_id_remote(uint64_t a_node_addr, uint64_t a_id)
l_objs.value_len = sizeof(uint64_t);
bool l_ret = dap_chain_global_db_gr_save(&l_objs, 1, GROUP_LOCAL_NODE_LAST_ID);
DAP_DELETE(l_objs.key);
log_it( L_NOTICE, "Node 0x%016X set last synced timestamp %llu",a_id);
//log_it( L_DEBUG, "Node 0x%016X set last synced timestamp %llu",a_id);
return l_ret;
}
......
......@@ -41,6 +41,7 @@ static void _cdb_pagewarmup(CDB *db, bool loadbf);
/* it isn't necessary to rehash bid in hash table cache */
static uint32_t _pagehash(const void *key, int len)
{
(void) len;
return *(uint32_t*)key;
}
......