From 4234c06c6dd53881fe3c2793721d76d47d42fde6 Mon Sep 17 00:00:00 2001 From: Dmitry Gerasimov <dmitriy.gerasimov@demlabs.net> Date: Fri, 24 Jun 2022 20:08:45 +0700 Subject: [PATCH] [!] Refactoring --- dap-sdk/io/dap_context.c | 3 +- dap-sdk/io/dap_events.c | 2 +- dap-sdk/io/dap_proc_thread.c | 2 +- dap-sdk/io/include/dap_context.h | 3 +- dap-sdk/io/include/dap_proc_thread.h | 1 + dap-sdk/io/include/dap_worker.h | 2 + modules/chain/dap_chain_ledger.c | 12 +-- .../block-ton/dap_chain_cs_block_ton.c | 12 +-- .../consensus/dag-poa/dap_chain_cs_dag_poa.c | 76 ++++++++++++++----- .../global-db/dap_chain_global_db_remote.c | 2 +- modules/global-db/dap_global_db.c | 19 ++++- .../global-db/include/dap_chain_global_db.h | 4 - modules/global-db/include/dap_global_db.h | 16 ++-- modules/mempool/dap_chain_mempool.c | 30 ++------ modules/net/dap_chain_net.c | 10 +-- modules/net/dap_chain_node.c | 10 ++- modules/net/dap_chain_node_cli_cmd.c | 10 +-- modules/net/dap_chain_node_dns_server.c | 2 +- modules/net/srv/dap_chain_net_srv_order.c | 21 +++-- .../service/datum/dap_chain_net_srv_datum.c | 27 ++----- .../service/stake/dap_chain_net_srv_stake.c | 2 +- .../xchange/dap_chain_net_srv_xchange.c | 4 +- modules/type/blocks/dap_chain_block_chunk.c | 2 +- modules/type/blocks/dap_chain_cs_blocks.c | 6 +- modules/type/dag/dap_chain_cs_dag.c | 17 +++-- modules/type/dag/dap_chain_cs_dag_event.c | 15 +++- 26 files changed, 179 insertions(+), 131 deletions(-) diff --git a/dap-sdk/io/dap_context.c b/dap-sdk/io/dap_context.c index c6a405adf3..aecc07655d 100644 --- a/dap-sdk/io/dap_context.c +++ b/dap-sdk/io/dap_context.c @@ -119,11 +119,12 @@ int dap_context_init() * @brief dap_context_new * @return */ -dap_context_t * dap_context_new() +dap_context_t * dap_context_new(int a_type) { dap_context_t * l_context = DAP_NEW_Z(dap_context_t); static atomic_uint_fast64_t s_context_id_max = 0; l_context->id = s_context_id_max; + l_context->type = a_type; s_context_id_max++; l_context->event_exit = dap_context_create_event( NULL, s_event_exit_callback); diff --git a/dap-sdk/io/dap_events.c b/dap-sdk/io/dap_events.c index d1e5d6d18e..368f81dec3 100644 --- a/dap-sdk/io/dap_events.c +++ b/dap-sdk/io/dap_events.c @@ -279,7 +279,7 @@ int dap_events_start() dap_worker_t * l_worker = DAP_NEW_Z(dap_worker_t); l_worker->id = i; - l_worker->context = dap_context_new(); + l_worker->context = dap_context_new(DAP_CONTEXT_TYPE_WORKER); l_worker->context->worker = l_worker; diff --git a/dap-sdk/io/dap_proc_thread.c b/dap-sdk/io/dap_proc_thread.c index d8b9820ca4..067aaba924 100644 --- a/dap-sdk/io/dap_proc_thread.c +++ b/dap-sdk/io/dap_proc_thread.c @@ -83,7 +83,7 @@ int l_ret = 0; for (uint32_t i = 0; i < s_threads_count; i++ ) { dap_proc_thread_t * l_thread = s_threads + i; - l_thread->context = dap_context_new(); + l_thread->context = dap_context_new(DAP_CONTEXT_TYPE_PROC_THREAD); l_thread->context->proc_thread = l_thread; if ( (l_ret = dap_context_run(l_thread->context,i,DAP_CONTEXT_POLICY_TIMESHARING,2, diff --git a/dap-sdk/io/include/dap_context.h b/dap-sdk/io/include/dap_context.h index 362080bc7c..3e1cb98891 100644 --- a/dap-sdk/io/include/dap_context.h +++ b/dap-sdk/io/include/dap_context.h @@ -56,6 +56,7 @@ typedef struct dap_context { // Compatibility fields, in future should be replaced with _inheritor dap_proc_thread_t * proc_thread; // If the context belongs to proc_thread dap_worker_t * worker; // If the context belongs to worker + int type; // Context type // pthread-related fields pthread_cond_t started_cond; // Fires when thread started and pre-loop callback executes @@ -135,7 +136,7 @@ int dap_context_init(); // Init void dap_context_deinit(); // Deinit // New context create and run. -dap_context_t * dap_context_new(); +dap_context_t * dap_context_new(int a_type); // Run new context in dedicated thread. // ATTENTION: after running the context nobody have to access it outside its own running thread diff --git a/dap-sdk/io/include/dap_proc_thread.h b/dap-sdk/io/include/dap_proc_thread.h index 372414395b..ce37da6ada 100644 --- a/dap-sdk/io/include/dap_proc_thread.h +++ b/dap-sdk/io/include/dap_proc_thread.h @@ -45,6 +45,7 @@ typedef struct dap_proc_thread{ void * _inheritor; } dap_proc_thread_t; +#define DAP_CONTEXT_TYPE_PROC_THREAD 1 int dap_proc_thread_init(uint32_t a_threads_count); void dap_proc_thread_deinit(); diff --git a/dap-sdk/io/include/dap_worker.h b/dap-sdk/io/include/dap_worker.h index 672dfd4e52..03f9aef80a 100644 --- a/dap-sdk/io/include/dap_worker.h +++ b/dap-sdk/io/include/dap_worker.h @@ -61,6 +61,8 @@ typedef struct dap_worker void * _inheritor; } dap_worker_t; +#define DAP_CONTEXT_TYPE_WORKER 10 + // Message for reassigment typedef struct dap_worker_msg_reassign{ dap_events_socket_t * esocket; diff --git a/modules/chain/dap_chain_ledger.c b/modules/chain/dap_chain_ledger.c index 085d33ddb6..bc34daaae3 100644 --- a/modules/chain/dap_chain_ledger.c +++ b/modules/chain/dap_chain_ledger.c @@ -3214,7 +3214,7 @@ int dap_chain_ledger_tx_remove(dap_ledger_t *a_ledger, dap_chain_hash_fast_t *a_ // Remove it from cache char *l_gdb_group = dap_chain_ledger_get_gdb_group(a_ledger, DAP_CHAIN_LEDGER_TXS_STR); char *l_tx_hash_str = dap_chain_hash_fast_to_str_new(a_tx_hash); - dap_chain_global_db_gr_del( l_tx_hash_str, l_gdb_group); + dap_global_db_del(l_gdb_group, l_tx_hash_str, NULL, NULL); DAP_DELETE(l_tx_hash_str); DAP_DELETE(l_gdb_group); l_ret = 1; @@ -3271,7 +3271,7 @@ void dap_chain_ledger_purge(dap_ledger_t *a_ledger, bool a_preserve_db) } if (!a_preserve_db) { l_gdb_group = dap_chain_ledger_get_gdb_group(a_ledger, DAP_CHAIN_LEDGER_TXS_STR); - dap_chain_global_db_gr_del(NULL, l_gdb_group); + dap_global_db_del(l_gdb_group, NULL, NULL, NULL); DAP_DELETE(l_gdb_group); } @@ -3284,7 +3284,7 @@ void dap_chain_ledger_purge(dap_ledger_t *a_ledger, bool a_preserve_db) } if (!a_preserve_db) { l_gdb_group = dap_chain_ledger_get_gdb_group(a_ledger, DAP_CHAIN_LEDGER_SPENT_TXS_STR); - dap_chain_global_db_gr_del(NULL, l_gdb_group); + dap_global_db_del(l_gdb_group, NULL, NULL, NULL); DAP_DELETE(l_gdb_group); } @@ -3297,7 +3297,7 @@ void dap_chain_ledger_purge(dap_ledger_t *a_ledger, bool a_preserve_db) } if (!a_preserve_db) { l_gdb_group = dap_chain_ledger_get_gdb_group(a_ledger, DAP_CHAIN_LEDGER_BALANCES_STR); - dap_chain_global_db_gr_del(NULL, l_gdb_group); + dap_global_db_del(l_gdb_group, NULL, NULL, NULL); DAP_DELETE(l_gdb_group); } @@ -3321,10 +3321,10 @@ void dap_chain_ledger_purge(dap_ledger_t *a_ledger, bool a_preserve_db) } if (!a_preserve_db) { l_gdb_group = dap_chain_ledger_get_gdb_group(a_ledger, DAP_CHAIN_LEDGER_TOKENS_STR); - dap_chain_global_db_gr_del(NULL, l_gdb_group); + dap_global_db_del(l_gdb_group, NULL, NULL, NULL); DAP_DELETE(l_gdb_group); l_gdb_group = dap_chain_ledger_get_gdb_group(a_ledger, DAP_CHAIN_LEDGER_EMISSIONS_STR); - dap_chain_global_db_gr_del(NULL, l_gdb_group); + dap_global_db_del(l_gdb_group, NULL, NULL, NULL); DAP_DELETE(l_gdb_group); } diff --git a/modules/consensus/block-ton/dap_chain_cs_block_ton.c b/modules/consensus/block-ton/dap_chain_cs_block_ton.c index b78a1a069d..b49ac4abb0 100644 --- a/modules/consensus/block-ton/dap_chain_cs_block_ton.c +++ b/modules/consensus/block-ton/dap_chain_cs_block_ton.c @@ -1033,7 +1033,7 @@ static bool s_session_round_finish_callback_load_store(dap_global_db_context_t * if ( l_store->hdr.round_id.uint64 != l_session->cur_round.id.uint64 || (l_store->hdr.round_id.uint64 == l_session->cur_round.id.uint64 && !l_store->hdr.sign_collected) ) { - dap_chain_global_db_gr_del(dap_strdup(a_values[i].key), l_session->gdb_group_store); + dap_global_db_del_unsafe(a_global_db_context,l_session->gdb_group_store,a_values[i].key ); if ( l_store->hdr.sign_collected ) { l_store_candidate_ready = l_store; } @@ -1758,12 +1758,15 @@ static void s_session_packet_in(void *a_arg, dap_chain_node_addr_t *a_sender_nod (l_message->sign_n_message+l_message->hdr.sign_size); dap_chain_hash_fast_t *l_candidate_hash = &l_reject->candidate_hash; + pthread_rwlock_rdlock(&l_session->rwlock); + if ( s_hash_is_null(l_candidate_hash) ) { if (PVT(l_session->ton)->debug) log_it(L_MSG, "TON: net:%s, chain:%s, round:%"DAP_UINT64_FORMAT_U", attempt:%hu Receive REJECT: NULL", l_session->chain->net_name, l_session->chain->name, l_session->cur_round.id.uint64, l_session->attempt_current_number); - goto handler_finish_save; + pthread_rwlock_unlock(&l_session->rwlock); + goto handler_finish_save; } char *l_candidate_hash_str = dap_chain_hash_fast_to_str_new(l_candidate_hash); @@ -1772,14 +1775,13 @@ static void s_session_packet_in(void *a_arg, dap_chain_node_addr_t *a_sender_nod l_session->chain->net_name, l_session->chain->name, l_session->cur_round.id.uint64, l_session->attempt_current_number, l_candidate_hash_str); - pthread_rwlock_rdlock(&l_session->rwlock); uint16_t l_reject_count = s_session_message_count( l_session, DAP_TON$ROUND_CUR, DAP_STREAM_CH_CHAIN_MESSAGE_TYPE_REJECT, l_candidate_hash, NULL); l_reject_count++; if (l_reject_count * 3 >= l_session->cur_round.validators_count * 2) { - dap_chain_global_db_gr_del(dap_strdup(l_candidate_hash_str), l_session->gdb_group_store); + dap_global_db_del_sync(l_session->gdb_group_store, l_candidate_hash_str); dap_chain_hash_fast_t l_my_candidate_hash; dap_hash_fast(l_session->my_candidate, l_session->my_candidate_size, &l_my_candidate_hash); if (memcmp(&l_my_candidate_hash, l_candidate_hash, @@ -2221,7 +2223,7 @@ static void s_message_chain_add(dap_chain_cs_block_ton_session_t *a_session, dap dap_chain_cs_block_ton_message_t *a_message, size_t a_message_size, dap_chain_hash_fast_t *a_message_hash) { - pthread_rwlock_rdlock(&a_session->rwlock); + pthread_rwlock_wrlock(&a_session->rwlock); dap_chain_cs_block_ton_message_t *l_message = a_message; dap_chain_cs_block_ton_message_getinfo_t *l_getinfo = diff --git a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c index 79657b0b77..3548207c30 100644 --- a/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c +++ b/modules/consensus/dag-poa/dap_chain_cs_dag_poa.c @@ -472,13 +472,13 @@ static void s_round_event_clean_dup(dap_chain_cs_dag_t * a_dag, const char *a_ev } size_t l_events_round_size = 0; - dap_store_obj_t *l_events_round = dap_chain_global_db_driver_read(a_dag->gdb_group_events_round_new, NULL, &l_events_round_size); + dap_store_obj_t *l_events_round = dap_global_db_get_all_raw_sync( a_dag->gdb_group_events_round_new, 0, &l_events_round_size); uint16_t l_max_signs_count = 0; //char * l_max_signs_hash; for (size_t l_index = 0; l_index<l_events_round_size; l_index++) { dap_chain_cs_dag_event_round_item_t *l_event_round_item = (dap_chain_cs_dag_event_round_item_t *)l_events_round[l_index].value; if (!l_event_round_item || !l_events_round[l_index].value_len) { - dap_chain_global_db_gr_del(l_events_round[l_index].key, l_gdb_group_events); + dap_global_db_del_sync(l_gdb_group_events, l_events_round[l_index].key); continue; } size_t l_event_size = l_event_round_item->event_size; @@ -491,7 +491,7 @@ static void s_round_event_clean_dup(dap_chain_cs_dag_t * a_dag, const char *a_ev if( l_offset_from_beginning >= l_event_size){ log_it(L_WARNING,"Incorrect size with event %p: caled size excl signs %zd is bigger or equal then event size %zd", l_event, l_offset_from_beginning, l_event_size); - dap_chain_global_db_gr_del(l_events_round[l_index].key, l_gdb_group_events); + dap_global_db_del_sync(l_gdb_group_events, l_events_round[l_index].key); continue; // Incorrest size } size_t l_signs_count = 0; @@ -509,7 +509,7 @@ static void s_round_event_clean_dup(dap_chain_cs_dag_t * a_dag, const char *a_ev } } else { - dap_chain_global_db_gr_del(l_events_round[l_index].key, l_gdb_group_events); + dap_global_db_del_sync(l_gdb_group_events, l_events_round[l_index].key); } } @@ -519,7 +519,7 @@ static void s_round_event_clean_dup(dap_chain_cs_dag_t * a_dag, const char *a_ev HASH_ITER(hh, s_event_clean_dup_items, l_clean_item, l_clean_tmp) { if ( l_clean_item->signs_count < l_max_signs_count ) { // delete dup by min signatures - dap_chain_global_db_gr_del( l_clean_item->hash_str, l_gdb_group_events); + dap_global_db_del_sync(l_gdb_group_events, l_clean_item->hash_str); HASH_DEL(s_event_clean_dup_items, l_clean_item); DAP_DELETE(l_clean_item); } else if ( l_clean_item->ts_update > l_max_ts_update ) { @@ -530,7 +530,7 @@ static void s_round_event_clean_dup(dap_chain_cs_dag_t * a_dag, const char *a_ev HASH_ITER(hh, s_event_clean_dup_items, l_clean_item, l_clean_tmp) { if ( dap_strcmp(l_max_ts_update_hash, l_clean_item->hash_str) != 0 ) { // delete dup by older - dap_chain_global_db_gr_del(l_clean_item->hash_str, l_gdb_group_events); + dap_global_db_del_sync(l_gdb_group_events, l_clean_item->hash_str); } HASH_DEL(s_event_clean_dup_items, l_clean_item); DAP_DELETE(l_clean_item); @@ -592,18 +592,37 @@ static void s_callback_get_round_info(dap_chain_cs_dag_t * a_dag, dap_chain_cs_d a_event_round_info->reject_count = 0; } -static bool s_callback_round_event_to_chain(dap_chain_cs_dag_poa_callback_timer_arg_t * a_callback_arg) { - dap_chain_cs_dag_t * l_dag = a_callback_arg->dag; - char * l_gdb_group_events = l_dag->gdb_group_events_round_new; - dap_chain_cs_dag_event_round_item_t * l_round_item = NULL; +/** + * @brief s_callback_round_event_to_chain_callback_get_round_item + * @param a_global_db_context + * @param a_rc + * @param a_group + * @param a_key + * @param a_value + * @param a_value_size + * @param a_value_ts + * @param a_is_pinned + * @param a_arg + */ +static void s_callback_round_event_to_chain_callback_get_round_item(dap_global_db_context_t * a_global_db_context, + int a_rc, const char * a_group, + const char * a_key, + const void * a_value, + const size_t a_value_size, + dap_nanotime_t a_value_ts, + bool a_is_pinned, void * a_arg) +{ + dap_chain_cs_dag_poa_callback_timer_arg_t * l_callback_arg = (dap_chain_cs_dag_poa_callback_timer_arg_t *) a_arg; + dap_chain_cs_dag_t * l_dag = l_callback_arg->dag; + dap_chain_cs_dag_event_round_item_t * l_round_item = (dap_chain_cs_dag_event_round_item_t *) a_value; dap_chain_cs_dag_event_t * l_event; size_t l_event_size = 0; size_t l_round_item_size = 0; - if ( (l_round_item = (dap_chain_cs_dag_event_round_item_t *)dap_chain_global_db_gr_get( - a_callback_arg->l_event_hash_hex_str, &l_round_item_size, l_gdb_group_events) ) == NULL ) { + + if ( l_round_item == NULL ) { log_it(L_NOTICE,"Can't find event %s in round.new. The hash may have changed by reason the addition of a new signature.", - a_callback_arg->l_event_hash_hex_str); + l_callback_arg->l_event_hash_hex_str); } else { l_event = (dap_chain_cs_dag_event_t *)l_round_item->event_n_signs; l_event_size = l_round_item->event_size; @@ -612,9 +631,9 @@ static bool s_callback_round_event_to_chain(dap_chain_cs_dag_poa_callback_timer_ dap_chain_atom_verify_res_t l_res = l_dag->chain->callback_atom_add(l_dag->chain, l_new_atom, l_event_size); if (l_res == ATOM_PASS || l_res == ATOM_REJECT) { // Add new atom in chain DAP_DELETE(l_new_atom); - log_it(L_NOTICE, "Event %s not added in chain", a_callback_arg->l_event_hash_hex_str); + log_it(L_NOTICE, "Event %s not added in chain", l_callback_arg->l_event_hash_hex_str); } else { - log_it(L_NOTICE, "Event %s added in %s successfully", a_callback_arg->l_event_hash_hex_str, + log_it(L_NOTICE, "Event %s added in %s successfully", l_callback_arg->l_event_hash_hex_str, l_res == ATOM_ACCEPT ? "chain" : "threshold"); if (dap_chain_atom_save(l_dag->chain, l_new_atom, l_event_size, l_dag->chain->cells->id) > 0) { // dap_chain_cs_dag_event_broadcast(l_dag, DAP_DB$K_OPTYPE_DEL, @@ -646,11 +665,26 @@ static bool s_callback_round_event_to_chain(dap_chain_cs_dag_poa_callback_timer_ } DAP_DELETE(l_round_item); // delete events from db - dap_chain_global_db_gr_del(a_callback_arg->l_event_hash_hex_str, l_dag->gdb_group_events_round_new); + dap_global_db_del_unsafe(a_global_db_context, a_group, l_callback_arg->l_event_hash_hex_str); } - DAP_DELETE(a_callback_arg->l_event_hash_hex_str); - DAP_DELETE(a_callback_arg); + DAP_DELETE(l_callback_arg->l_event_hash_hex_str); + DAP_DELETE(l_callback_arg); + +} + +/** + * @brief s_callback_round_event_to_chain + * @param a_callback_arg + * @return + */ +static bool s_callback_round_event_to_chain(dap_chain_cs_dag_poa_callback_timer_arg_t * a_callback_arg) +{ + dap_chain_cs_dag_t * l_dag = a_callback_arg->dag; + char * l_gdb_group_events = l_dag->gdb_group_events_round_new; + dap_global_db_get(l_gdb_group_events, a_callback_arg->l_event_hash_hex_str,s_callback_round_event_to_chain_callback_get_round_item, + a_callback_arg); + return false; } @@ -766,6 +800,9 @@ static dap_chain_cs_dag_event_t * s_callback_event_create(dap_chain_cs_dag_t * a static int s_callback_event_round_sync(dap_chain_cs_dag_t * a_dag, const char a_op_code, const char *a_group, const char *a_key, const void *a_value, const size_t a_value_size) { + dap_global_db_context_t * l_gdb_context = dap_global_db_context_current(); + assert(l_gdb_context); + if ( a_value == NULL || a_op_code != DAP_DB$K_OPTYPE_ADD || !a_value || !a_value_size) { return 0; } @@ -777,6 +814,7 @@ static int s_callback_event_round_sync(dap_chain_cs_dag_t * a_dag, const char a_ s_round_event_clean_dup(a_dag, a_key); // Delete dup for manual mode return 0; } + dap_chain_cs_dag_event_round_item_t *l_round_item = (dap_chain_cs_dag_event_round_item_t *)DAP_DUP_SIZE(a_value,a_value_size); size_t l_event_size = l_round_item->event_size; @@ -822,7 +860,7 @@ static int s_callback_event_round_sync(dap_chain_cs_dag_t * a_dag, const char a_ } else { // delete from gdb if reject_count is max - dap_chain_global_db_gr_del(a_key, a_group); + dap_global_db_del_unsafe(l_gdb_context, a_group, a_key); l_deleted = true; } } diff --git a/modules/global-db/dap_chain_global_db_remote.c b/modules/global-db/dap_chain_global_db_remote.c index e6f81e9f9e..731de0fb7c 100644 --- a/modules/global-db/dap_chain_global_db_remote.c +++ b/modules/global-db/dap_chain_global_db_remote.c @@ -42,7 +42,7 @@ static void *s_list_thread_proc(void *arg) dap_nanotime_t l_time_now = dap_nanotime_now(); while (l_group_cur->count && l_dap_db_log_list->is_process) { // Number of records to be synchronized size_t l_item_count = min(64, l_group_cur->count); - dap_store_obj_t *l_objs = dap_global_db_store_objs_get_sync(l_group_cur->name, l_item_start, &l_item_count); + dap_store_obj_t *l_objs = dap_global_db_get_all_raw_sync(l_group_cur->name, l_item_start, &l_item_count); if (!l_dap_db_log_list->is_process) return NULL; // go to next group diff --git a/modules/global-db/dap_global_db.c b/modules/global-db/dap_global_db.c index f125d08bc4..17d6d4b80c 100644 --- a/modules/global-db/dap_global_db.c +++ b/modules/global-db/dap_global_db.c @@ -211,7 +211,7 @@ int dap_global_db_init(const char * a_storage_path, const char * a_driver_name) // Create and run its own context if(s_context == NULL){ - s_context = dap_context_new(); + s_context = dap_context_new(DAP_CONTEXT_TYPE_GLOBAL_DB); s_context->_inheritor = s_context_global_db = DAP_NEW_Z(struct dap_global_db_context); s_context_global_db->context = s_context; if (dap_context_run(s_context, -1, DAP_CONTEXT_POLICY_DEFAULT, 0, DAP_CONTEXT_FLAG_WAIT_FOR_STARTED, @@ -1023,7 +1023,7 @@ static bool s_objs_get_callback (dap_global_db_context_t * a_global_db_context,i * @param a_objs_count * @return Group's objects */ -dap_global_db_obj_t* dap_global_db_objs_get(const char *a_group, size_t *a_objs_count) +dap_global_db_obj_t* dap_global_db_get_all_raw_sync(const char *a_group, size_t *a_objs_count) { struct objs_get * l_args = DAP_NEW_Z(struct objs_get); pthread_mutex_init(&l_args->mutex,NULL); @@ -1224,7 +1224,7 @@ static bool s_store_objs_get_callback (dap_global_db_context_t * a_global_db_con return false; } -dap_store_obj_t* dap_global_db_store_objs_get_sync(const char *a_group, uint64_t a_first_id, size_t *a_objs_count) +dap_store_obj_t* dap_global_db_get_all_raw_sync(const char *a_group, uint64_t a_first_id, size_t *a_objs_count) { struct store_objs_get * l_args = DAP_NEW_Z(struct store_objs_get); pthread_mutex_init(&l_args->mutex,NULL); @@ -1244,6 +1244,19 @@ dap_store_obj_t* dap_global_db_store_objs_get_sync(const char *a_group, uint64_t } +/** + * @brief dap_global_db_context_current + * @return + */ +dap_global_db_context_t * dap_global_db_context_current() +{ + dap_context_t * l_context = dap_context_current(); + if(l_context->type == DAP_CONTEXT_TYPE_GLOBAL_DB) + return (dap_global_db_context_t *) l_context->_inheritor; + else + return NULL; + +} /** * @brief dap_global_db_del_unsafe * @param a_group diff --git a/modules/global-db/include/dap_chain_global_db.h b/modules/global-db/include/dap_chain_global_db.h index 06d7da0c0c..d2cbf613df 100644 --- a/modules/global-db/include/dap_chain_global_db.h +++ b/modules/global-db/include/dap_chain_global_db.h @@ -30,8 +30,4 @@ uint8_t * dap_chain_global_db_gr_get(const char *a_key, size_t *a_data_len_out, */ bool dap_chain_global_db_gr_set(const char *a_key, const void *a_value, size_t a_value_len, const char *a_group); -/** - * Delete entry from base - */ -bool dap_chain_global_db_gr_del(const char *a_key, const char *a_group); diff --git a/modules/global-db/include/dap_global_db.h b/modules/global-db/include/dap_global_db.h index 9a188a98ab..ce4b42860f 100644 --- a/modules/global-db/include/dap_global_db.h +++ b/modules/global-db/include/dap_global_db.h @@ -43,6 +43,8 @@ typedef struct dap_global_db_context dap_context_t * context; // parent pointer } dap_global_db_context_t; +#define DAP_CONTEXT_TYPE_GLOBAL_DB 100 + typedef struct dap_store_obj { uint64_t id; dap_nanotime_t timestamp; @@ -116,18 +118,20 @@ int dap_global_db_flush( dap_global_db_callback_result_t a_callback, void * a_ar int dap_global_db_context_exec (dap_global_db_callback_t a_callback, void * a_arg); -// === Sync functions === -// --- dap_global_db_obj_t and dap_store_obj_t sync funcs --- +// Clear global_db_obj array void dap_global_db_objs_delete(dap_global_db_obj_t *a_objs, size_t a_count); -dap_global_db_obj_t* dap_global_db_objs_get(const char *a_group, size_t *a_objs_count); -dap_store_obj_t* dap_global_db_store_objs_get_sync(const char *a_group, uint64_t a_first_id, size_t *a_objs_count); -// --- common usage sync funcs + +// === Sync functions === + +dap_global_db_obj_t* dap_global_db_get_all_sync(const char *a_group, size_t *a_objs_count); +dap_store_obj_t* dap_global_db_get_all_raw_sync(const char *a_group, uint64_t a_first_id, size_t *a_objs_count); int dap_global_db_set_sync(const char * a_group, const char *a_key, const void * a_value, const size_t a_value_length, bool a_pin_value ); byte_t* dap_global_db_get_sync(const char * a_group,const char *a_key, size_t *a_data_size, bool *a_is_pinned, dap_nanotime_t * a_ts); int dap_global_db_del_sync(const char * a_group, const char *a_key); int dap_global_db_flush_sync(); -// ==== Unsage functions (for own context call only) === +// ==== Unsafe functions (for own context call only) === +dap_global_db_context_t * dap_global_db_context_current(); int dap_global_db_del_unsafe(dap_global_db_context_t * a_global_db_context, const char * a_group, const char *a_key); diff --git a/modules/mempool/dap_chain_mempool.c b/modules/mempool/dap_chain_mempool.c index 339e51ed36..b3c2fd9e2a 100644 --- a/modules/mempool/dap_chain_mempool.c +++ b/modules/mempool/dap_chain_mempool.c @@ -871,27 +871,6 @@ static void enc_http_reply_encode_new(struct dap_http_simple *a_http_simple, dap } -/** - * @brief s_gdb_datum_pool_delete_callback - * @param a_global_db_context - * @param a_rc - * @param a_group - * @param a_key - * @param a_value - * @param a_value_size - * @param a_value_ts - * @param a_is_pinned - * @param a_arg - */ -static void s_gdb_datum_pool_delete_callback(dap_global_db_context_t * a_global_db_context,int a_rc, const char * a_group, const char * a_key, const void * a_value, const size_t a_value_size, dap_nanotime_t a_value_ts, bool a_is_pinned, void * a_arg) -{ - if( a_rc == DAP_GLOBAL_DB_RC_SUCCESS){ - log_it(L_INFO, "Delete hash: key=%s result: Ok", a_key); - } else { - log_it(L_INFO, "Delete hash: key=%s result: False!", a_key); - } -} - /** * @brief * @param cl_st HTTP server instance @@ -968,8 +947,13 @@ void chain_mempool_proc(struct dap_http_simple *cl_st, void * arg) case DAP_DATUM_MEMPOOL_DEL: // delete datum in base strcpy(cl_st->reply_mime, "text/text"); - dap_global_db_del( l_gdb_datum_pool, a_key, s_gdb_datum_pool_delete_callback, NULL ); - l_enc_delegate->response = dap_strdup("1"); + if (dap_global_db_del_sync(l_gdb_datum_pool, a_key) == 0){ + l_enc_delegate->response = dap_strdup("1"); + log_it(L_INFO, "Delete hash: key=%s result: Ok", a_key); + } else { + l_enc_delegate->response = dap_strdup("0"); + log_it(L_INFO, "Delete hash: key=%s result: False!", a_key); + } // TODO rework to async processing and return result of delete action *return_code = Http_Status_OK; enc_http_reply_encode_new(cl_st, l_enc_key, l_enc_delegate); diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c index 30f6d48486..53704c4fbe 100644 --- a/modules/net/dap_chain_net.c +++ b/modules/net/dap_chain_net.c @@ -2214,7 +2214,7 @@ static int s_cli_net(int argc, char **argv, char **a_str_reply) return -11; } size_t l_objs_count; - dap_global_db_obj_t *l_objs = dap_global_db_objs_get(l_gdb_group_str, &l_objs_count); + dap_global_db_obj_t *l_objs = dap_global_db_get_all_sync(l_gdb_group_str, &l_objs_count); DAP_DELETE(l_gdb_group_str); dap_string_t *l_reply = dap_string_new(""); for (size_t i = 0; i < l_objs_count; i++) { @@ -3140,7 +3140,7 @@ dap_list_t* dap_chain_net_get_node_list(dap_chain_net_t * l_net) dap_global_db_obj_t *l_objs = NULL; size_t l_nodes_count = 0; // read all node - l_objs = dap_global_db_objs_get(l_net->pub.gdb_nodes, &l_nodes_count); + l_objs = dap_global_db_get_all_sync(l_net->pub.gdb_nodes, &l_nodes_count); if(!l_nodes_count || !l_objs) return l_node_list; for(size_t i = 0; i < l_nodes_count; i++) { @@ -3196,7 +3196,7 @@ bool s_proc_mempool_callback_load(dap_global_db_context_t * a_global_db_context, if (l_verify_datum != 0){ log_it(L_WARNING, "Datum doesn't pass verifications (code %d), delete such datum from pool", l_verify_datum); - dap_chain_global_db_gr_del( a_values[i].key, a_group); + dap_global_db_del_unsafe( a_global_db_context, a_group, a_values[i].key); l_datums[i] = NULL; }else{ l_datums[i] = l_datum; @@ -3215,7 +3215,7 @@ bool s_proc_mempool_callback_load(dap_global_db_context_t * a_global_db_context, // Delete processed objects size_t l_objs_processed_tmp = (l_objs_processed > 15) ? min(l_objs_processed, 10) : l_objs_processed; for(size_t i = 0; i < l_objs_processed; i++) { - dap_chain_global_db_gr_del(a_values[i].key, a_group); + dap_global_db_del_unsafe(a_global_db_context, a_group, a_values[i].key ); if(i < l_objs_processed_tmp) { dap_string_append_printf(l_str_tmp, "New event created, removed datum 0x%s from mempool \n", a_values[i].key); @@ -3382,7 +3382,7 @@ static bool s_net_check_acl(dap_chain_net_t *a_net, dap_chain_hash_fast_t *a_pke const char *l_acl_gdb = dap_config_get_item_str(l_cfg, "auth", "acl_accept_ca_gdb"); if (l_acl_gdb) { size_t l_objs_count; - dap_global_db_obj_t *l_objs = dap_global_db_objs_get(l_acl_gdb, &l_objs_count); + dap_global_db_obj_t *l_objs = dap_global_db_get_all_sync(l_acl_gdb, &l_objs_count); for (size_t i = 0; i < l_objs_count; i++) { if (!strcmp(l_objs[i].key, l_auth_hash_str)) { l_authorized = true; diff --git a/modules/net/dap_chain_node.c b/modules/net/dap_chain_node.c index cd13b78d95..744c68add6 100644 --- a/modules/net/dap_chain_node.c +++ b/modules/net/dap_chain_node.c @@ -104,7 +104,7 @@ dap_chain_node_addr_t * dap_chain_node_alias_find(dap_chain_net_t * a_net,const */ bool dap_chain_node_alias_delete(dap_chain_net_t * a_net,const char *a_alias) { - return dap_chain_global_db_gr_del(a_alias, a_net->pub.gdb_nodes_aliases); + return dap_global_db_del_sync(a_net->pub.gdb_nodes_aliases, a_alias) == 0; } /** @@ -269,7 +269,9 @@ static void s_chain_node_mempool_autoproc_notify(void *a_arg, const char a_op_co return; dap_chain_datum_t *l_datum = (dap_chain_datum_t *)a_value; if (dap_chain_node_mempool_process(l_chain, l_datum) >= 0) { - dap_chain_global_db_gr_del(a_key, a_group); + dap_global_db_context_t * l_gdb_context = dap_global_db_context_current(); + assert(l_gdb_context); + dap_global_db_del_unsafe(l_gdb_context,a_group, a_key); } } @@ -306,7 +308,7 @@ bool dap_chain_node_mempool_autoproc_init() char *l_gdb_group_mempool = NULL; l_gdb_group_mempool = dap_chain_net_get_gdb_group_mempool_new(l_chain); size_t l_objs_size = 0; - dap_global_db_obj_t *l_objs = dap_global_db_objs_get(l_gdb_group_mempool, &l_objs_size); + dap_global_db_obj_t *l_objs = dap_global_db_get_all_sync(l_gdb_group_mempool, &l_objs_size); if (l_objs_size) { for (size_t i = 0; i < l_objs_size; i++) { if (!l_objs[i].value_len) @@ -314,7 +316,7 @@ bool dap_chain_node_mempool_autoproc_init() dap_chain_datum_t *l_datum = (dap_chain_datum_t *)l_objs[i].value; if (dap_chain_node_mempool_process(l_chain, l_datum) >= 0) { // Delete processed objects - dap_chain_global_db_gr_del( l_objs[i].key, l_gdb_group_mempool); + dap_global_db_del_sync(l_gdb_group_mempool, l_objs[i].key ); } } dap_global_db_objs_delete(l_objs, l_objs_size); diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index 71613040da..20c3a57a1a 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -151,7 +151,7 @@ static dap_list_t* get_aliases_by_name(dap_chain_net_t * l_net, dap_chain_node_a dap_list_t *list_aliases = NULL; size_t data_size = 0; // read all aliases - dap_global_db_obj_t *objs = dap_global_db_objs_get(l_net->pub.gdb_nodes_aliases, &data_size); + dap_global_db_obj_t *objs = dap_global_db_get_all_sync(l_net->pub.gdb_nodes_aliases, &data_size); if(!objs || !data_size) return NULL; for(size_t i = 0; i < data_size; i++) { @@ -617,7 +617,7 @@ static int node_info_dump_with_reply(dap_chain_net_t * a_net, dap_chain_node_add size_t l_nodes_count = 0; dap_string_append(l_string_reply, "\n"); // read all node - l_objs = dap_global_db_objs_get(a_net->pub.gdb_nodes, &l_nodes_count); + l_objs = dap_global_db_get_all_sync(a_net->pub.gdb_nodes, &l_nodes_count); if(!l_nodes_count || !l_objs) { dap_string_append_printf(l_string_reply, "No records\n"); @@ -629,7 +629,7 @@ static int node_info_dump_with_reply(dap_chain_net_t * a_net, dap_chain_node_add dap_string_append_printf(l_string_reply, "Got %zu records:\n", l_nodes_count); size_t l_data_size = 0; // read all aliases - dap_global_db_obj_t *l_aliases_objs = dap_global_db_objs_get(a_net->pub.gdb_nodes_aliases, &l_data_size); + dap_global_db_obj_t *l_aliases_objs = dap_global_db_get_all_sync(a_net->pub.gdb_nodes_aliases, &l_data_size); for(size_t i = 0; i < l_nodes_count; i++) { dap_chain_node_info_t *l_node_info = (dap_chain_node_info_t *)l_objs[i].value; // read node @@ -2278,7 +2278,7 @@ void s_com_mempool_list_print_for_chain(dap_chain_net_t * a_net, dap_chain_t * a dap_string_append_printf(a_str_tmp, "%s.%s: chain not found\n", a_net->pub.name, a_chain->name); }else{ size_t l_objs_size = 0; - dap_global_db_obj_t * l_objs = dap_global_db_objs_get(l_gdb_group_mempool, &l_objs_size); + dap_global_db_obj_t * l_objs = dap_global_db_get_all_sync(l_gdb_group_mempool, &l_objs_size); if(l_objs_size > 0) dap_string_append_printf(a_str_tmp, "%s.%s: Found %zu records :\n", a_net->pub.name, a_chain->name, l_objs_size); @@ -5007,7 +5007,7 @@ int cmd_gdb_export(int argc, char ** argv, char ** a_str_reply) for (dap_list_t *l_list = l_groups_list; l_list; l_list = dap_list_next(l_list)) { size_t l_store_obj_count = 0; char *l_group_name = (char *)l_list->data; - pdap_store_obj_t l_store_obj = dap_global_db_store_objs_get_sync(l_group_name,0, &l_store_obj_count); + pdap_store_obj_t l_store_obj = dap_global_db_get_all_raw_sync(l_group_name,0, &l_store_obj_count); log_it(L_INFO, "Exporting group %s, number of records: %zu", l_group_name, l_store_obj_count); if (!l_store_obj_count) { continue; diff --git a/modules/net/dap_chain_node_dns_server.c b/modules/net/dap_chain_node_dns_server.c index a8fe398963..f21c0cc9b4 100644 --- a/modules/net/dap_chain_node_dns_server.c +++ b/modules/net/dap_chain_node_dns_server.c @@ -307,7 +307,7 @@ dap_chain_node_info_t *dap_dns_resolve_hostname(char *str) dap_global_db_obj_t *l_objs = NULL; size_t l_nodes_count = 0; // read all node - l_objs = dap_global_db_objs_get(l_net->pub.gdb_nodes, &l_nodes_count); + l_objs = dap_global_db_get_all_raw_sync(l_net->pub.gdb_nodes, &l_nodes_count); if (!l_nodes_count || !l_objs) return NULL; dap_chain_node_info_t *l_node_candidate; diff --git a/modules/net/srv/dap_chain_net_srv_order.c b/modules/net/srv/dap_chain_net_srv_order.c index 5add9fba25..5adc3515ac 100644 --- a/modules/net/srv/dap_chain_net_srv_order.c +++ b/modules/net/srv/dap_chain_net_srv_order.c @@ -440,7 +440,7 @@ int dap_chain_net_srv_order_find_all_by(dap_chain_net_t * a_net,const dap_chain_ return -1; char *l_gdb_group_str = dap_chain_net_srv_order_get_gdb_group(a_net); size_t l_orders_count = 0; - dap_global_db_obj_t *l_orders = dap_global_db_objs_get(l_gdb_group_str, &l_orders_count); + dap_global_db_obj_t *l_orders = dap_global_db_get_all_sync(l_gdb_group_str, &l_orders_count); log_it( L_DEBUG, "Loaded %zu orders", l_orders_count); dap_chain_net_srv_order_t *l_order = NULL; *a_output_orders = NULL; @@ -450,14 +450,14 @@ int dap_chain_net_srv_order_find_all_by(dap_chain_net_t * a_net,const dap_chain_ DAP_DEL_Z(l_order); l_order = dap_chain_net_srv_order_read(l_orders[i].value, l_orders[i].value_len); if (!l_order) { - dap_global_db_del(l_gdb_group_str, l_orders[i].key, NULL, NULL); + dap_global_db_del_sync(l_gdb_group_str, l_orders[i].key); continue; // order is corrupted } dap_chain_hash_fast_t l_hash, l_hash_gdb; dap_hash_fast(l_orders[i].value, l_orders[i].value_len, &l_hash); dap_chain_hash_fast_from_str(l_orders[i].key, &l_hash_gdb); if (memcmp(&l_hash, &l_hash_gdb, sizeof(dap_chain_hash_fast_t))) { - dap_global_db_del(l_gdb_group_str, l_orders[i].key, NULL, NULL); + dap_global_db_del_sync(l_gdb_group_str, l_orders[i].key); continue; // order is corrupted } // Check direction @@ -499,14 +499,14 @@ int dap_chain_net_srv_order_find_all_by(dap_chain_net_t * a_net,const dap_chain_ */ int dap_chain_net_srv_order_delete_by_hash_str_sync(dap_chain_net_t * a_net, const char * a_hash_str ) { - int ret = -2; + int l_ret = -2; if ( a_net && a_hash_str ){ char * l_gdb_group_str = dap_chain_net_srv_order_get_gdb_group( a_net); - ret = dap_global_db_del_sync( a_hash_str, l_gdb_group_str ) ? 0 : -1; + l_ret = dap_global_db_del_sync( l_gdb_group_str, a_hash_str) ; DAP_DELETE( l_gdb_group_str ); } - return ret; + return l_ret; } /** @@ -589,7 +589,12 @@ static void s_srv_order_callback_notify(void *a_arg, const char a_op_code, const return; } dap_chain_net_t *l_net = (dap_chain_net_t *)a_arg; + dap_global_db_context_t * l_gdb_context = dap_global_db_context_current(); + assert(l_net); + assert(l_gdb_context); + char *l_gdb_group_str = dap_chain_net_srv_order_get_gdb_group(l_net); + if (!dap_strcmp(a_group, l_gdb_group_str)) { for (dap_list_t *it = s_order_notify_callbacks; it; it = it->next) { struct dap_order_notify *l_notifier = (struct dap_order_notify *)it->data; @@ -603,13 +608,13 @@ static void s_srv_order_callback_notify(void *a_arg, const char a_op_code, const dap_config_get_item_bool_default(g_config, "srv", "order_signed_only", true)) { dap_chain_net_srv_order_t *l_order = (dap_chain_net_srv_order_t *)a_value; if (l_order->version != 2) { - dap_global_db_del(a_group, a_key, NULL, NULL); + dap_global_db_del_unsafe(l_gdb_context, a_group, a_key); } else { dap_sign_t *l_sign = (dap_sign_t *)&l_order->ext_n_sign[l_order->ext_size]; if (!dap_sign_verify_size(l_sign, a_value_len) || dap_sign_verify(l_sign, l_order, sizeof(dap_chain_net_srv_order_t) + l_order->ext_size) != 1) { - dap_global_db_del( a_group, a_key, NULL, NULL); + dap_global_db_del_unsafe(l_gdb_context, a_group, a_key); } /*dap_chain_hash_fast_t l_pkey_hash; if (!dap_sign_get_pkey_hash(l_sign, &l_pkey_hash)) { diff --git a/modules/service/datum/dap_chain_net_srv_datum.c b/modules/service/datum/dap_chain_net_srv_datum.c index 4eda49dc88..89e7fe5288 100644 --- a/modules/service/datum/dap_chain_net_srv_datum.c +++ b/modules/service/datum/dap_chain_net_srv_datum.c @@ -182,24 +182,6 @@ static int s_srv_datum_cli(int argc, char ** argv, char **a_str_reply) { return -1; } -/** - * @brief s_order_notficator_callback_del - * @param a_global_db_context - * @param a_rc - * @param a_group - * @param a_key - * @param a_value - * @param a_value_size - * @param a_value_ts - * @param a_is_pinned - * @param a_arg - */ -static void s_order_notficator_callback_del (dap_global_db_context_t * a_global_db_context,int a_rc, const char * a_group, const char * a_key, const void * a_value, const size_t a_value_size, dap_nanotime_t a_value_ts, bool a_is_pinned, void * a_arg) -{ - if(a_rc != DAP_GLOBAL_DB_RC_SUCCESS){ - log_it(L_ERROR,"Can't delete order %s", a_key); - } -} /** * @brief s_order_notficator @@ -216,9 +198,14 @@ void s_order_notficator(void *a_arg, const char a_op_code, const char *a_group, return; dap_chain_net_t *l_net = (dap_chain_net_t *)a_arg; dap_chain_net_srv_order_t *l_order = dap_chain_net_srv_order_read((byte_t *)a_value, a_value_len); // Old format comliance - if (!l_order) { + dap_global_db_context_t * l_gdb_context = dap_global_db_context_current(); + assert(l_gdb_context); + if (!l_order && a_key) { log_it(L_NOTICE, "Order %s is corrupted", a_key); - dap_global_db_del(a_group, a_key, s_order_notficator_callback_del, NULL); + if(dap_global_db_del_unsafe(l_gdb_context, a_group, a_key) != 0 ){ + log_it(L_ERROR,"Can't delete order %s", a_key); + } + return; // order is corrupted } diff --git a/modules/service/stake/dap_chain_net_srv_stake.c b/modules/service/stake/dap_chain_net_srv_stake.c index 780cfec0a4..c9f516b1f1 100644 --- a/modules/service/stake/dap_chain_net_srv_stake.c +++ b/modules/service/stake/dap_chain_net_srv_stake.c @@ -1149,7 +1149,7 @@ static int s_cli_srv_stake_order(int a_argc, char **a_argv, int a_arg_index, cha } char * l_gdb_group_str = dap_chain_net_srv_order_get_gdb_group(l_net); size_t l_orders_count = 0; - dap_global_db_obj_t * l_orders = dap_global_db_objs_get(l_gdb_group_str, &l_orders_count); + dap_global_db_obj_t * l_orders = dap_global_db_get_all_sync(l_gdb_group_str, &l_orders_count); dap_chain_net_srv_stake_item_t *l_stake; dap_string_t *l_reply_str = dap_string_new(""); for (size_t i = 0; i < l_orders_count; i++) { diff --git a/modules/service/xchange/dap_chain_net_srv_xchange.c b/modules/service/xchange/dap_chain_net_srv_xchange.c index 0501b47adc..585eee6b0b 100644 --- a/modules/service/xchange/dap_chain_net_srv_xchange.c +++ b/modules/service/xchange/dap_chain_net_srv_xchange.c @@ -76,7 +76,7 @@ int dap_chain_net_srv_xchange_init() s_srv_xchange->parent = l_srv; s_srv_xchange->enabled = false; size_t l_prices_count = 0; - dap_global_db_obj_t *l_prices = dap_global_db_objs_get(GROUP_LOCAL_XCHANGE, &l_prices_count); + dap_global_db_obj_t *l_prices = dap_global_db_get_all_sync(GROUP_LOCAL_XCHANGE, &l_prices_count); for (size_t i = 0; i < l_prices_count; i++) { dap_chain_net_srv_xchange_price_t *l_price = s_xchange_db_load(l_prices[i].key, l_prices[i].value); HASH_ADD_KEYPTR(hh, s_srv_xchange->pricelist, l_price->key_ptr, strlen(l_price->key_ptr), l_price); @@ -857,7 +857,7 @@ static int s_cli_srv_xchange(int a_argc, char **a_argv, char **a_str_reply) } char * l_gdb_group_str = dap_chain_net_srv_order_get_gdb_group(l_net); size_t l_orders_count = 0; - dap_global_db_obj_t * l_orders = dap_global_db_objs_get(l_gdb_group_str, &l_orders_count); + dap_global_db_obj_t * l_orders = dap_global_db_get_all_sync(l_gdb_group_str, &l_orders_count); dap_chain_net_srv_xchange_price_t *l_price; dap_string_t *l_reply_str = dap_string_new(""); for (size_t i = 0; i < l_orders_count; i++) { diff --git a/modules/type/blocks/dap_chain_block_chunk.c b/modules/type/blocks/dap_chain_block_chunk.c index 5b83e405ac..3dc049cdcd 100644 --- a/modules/type/blocks/dap_chain_block_chunk.c +++ b/modules/type/blocks/dap_chain_block_chunk.c @@ -42,7 +42,7 @@ dap_chain_block_chunks_t * dap_chain_block_chunks_create(dap_chain_cs_blocks_t * l_ret->gdb_group = dap_strdup_printf("local.%s.%s.block.chunks",a_blocks->chain->net_name, a_blocks->chain->name ); size_t l_objs_count =0; - dap_global_db_obj_t * l_objs= dap_global_db_objs_get(l_ret->gdb_group, &l_objs_count); + dap_global_db_obj_t * l_objs= dap_global_db_get_all_raw_sync(l_ret->gdb_group, &l_objs_count); for(size_t n=0; n< l_objs_count; n++){ dap_chain_block_cache_t *l_block_cache = dap_chain_block_cache_new(a_blocks, (dap_chain_block_t*)l_objs[n].value, l_objs[n].value_len); dap_chain_block_chunks_add(l_ret, l_block_cache ); diff --git a/modules/type/blocks/dap_chain_cs_blocks.c b/modules/type/blocks/dap_chain_cs_blocks.c index e7fda0c7cb..32639e6732 100644 --- a/modules/type/blocks/dap_chain_cs_blocks.c +++ b/modules/type/blocks/dap_chain_cs_blocks.c @@ -1329,14 +1329,14 @@ static bool s_callback_new_block_add_datums (dap_global_db_context_t * a_global_ if (a_values_count) { for (size_t i = 0; i < a_values_count; i++) { if (!a_values[i].value_len) { - dap_global_db_del_unsafe(a_global_db_context, a_values[i].key, a_group); // delete from datums queue + dap_global_db_del_unsafe(a_global_db_context, a_group, a_values[i].key); // delete from datums queue continue; } dap_chain_datum_t *l_datum = (dap_chain_datum_t *)a_values[i].value; size_t l_datum_size = dap_chain_datum_size(l_datum); if(!l_datum_size || l_datum == NULL){ // Was wrong datum thats not passed checks log_it(L_WARNING,"Datum in mempool processing comes NULL"); - dap_global_db_del_unsafe(a_global_db_context, a_values[i].key, a_group); // delete from datums queue + dap_global_db_del_unsafe(a_global_db_context,a_group, a_values[i].key); // delete from datums queue continue; } // Verify for correctness @@ -1348,7 +1348,7 @@ static bool s_callback_new_block_add_datums (dap_global_db_context_t * a_global_ l_verify_datum != DAP_CHAIN_CS_VERIFY_CODE_TX_NO_TOKEN) { log_it(L_WARNING, "Datum doesn't pass verifications (code %d)", l_verify_datum); - dap_global_db_del(a_values[i].key, a_group, NULL, NULL); + dap_global_db_del_unsafe(a_global_db_context, a_group, a_values[i].key); continue; } if (l_blocks->block_new_size + l_datum_size > l_blocks_pvt->block_size_maximum) diff --git a/modules/type/dag/dap_chain_cs_dag.c b/modules/type/dag/dap_chain_cs_dag.c index 3852622255..9a82e5ae5b 100644 --- a/modules/type/dag/dap_chain_cs_dag.c +++ b/modules/type/dag/dap_chain_cs_dag.c @@ -174,6 +174,9 @@ static void s_history_callback_round_notify(void *a_arg, const char a_op_code, c const char *a_key, const void *a_value, const size_t a_value_size) { dap_chain_cs_dag_t *l_dag = (dap_chain_cs_dag_t *)a_arg; + dap_global_db_context_t * l_gdb_context = dap_global_db_context_current(); + assert(l_dag); + assert(l_gdb_context); if (a_arg && !l_dag->broadcast_disable){ dap_chain_net_t *l_net = dap_chain_net_by_id(l_dag->chain->net_id); debug_if(s_debug_more, L_DEBUG, "%s.%s: op_code='%c' group=\"%s\" key=\"%s\" value_size=%zu", @@ -184,7 +187,7 @@ static void s_history_callback_round_notify(void *a_arg, const char a_op_code, c (dap_chain_cs_dag_event_round_item_t *)a_value; if (l_event_round_item) { char *l_datum_hash_str = dap_chain_hash_fast_to_str_new(&l_event_round_item->round_info.datum_hash); - dap_chain_global_db_gr_del(l_datum_hash_str, l_dag->gdb_group_events_round_new); + dap_global_db_del_unsafe(l_gdb_context, l_dag->gdb_group_events_round_new, l_datum_hash_str); DAP_DELETE(l_datum_hash_str); } l_dag->callback_cs_event_round_sync(l_dag, a_op_code, a_group, a_key, a_value, a_value_size); @@ -294,7 +297,7 @@ int dap_chain_cs_dag_new(dap_chain_t * a_chain, dap_config_t * a_chain_cfg) l_dag->gdb_group_events_round_new = dap_strdup_printf( "%s.%s", l_gdb_group, l_round_new_str); dap_chain_global_db_add_sync_extra_group(l_net->pub.name, l_gdb_group, s_history_callback_round_notify, l_dag); } - dap_chain_global_db_gr_del(NULL, l_dag->gdb_group_events_round_new); + dap_global_db_del_sync(l_dag->gdb_group_events_round_new, NULL); l_dag->gdb_group_datums_queue = dap_strdup_printf("local.datums-queue.chain-%s.%s", l_net->pub.gdb_groups_prefix, a_chain->name); DAP_DELETE(l_round_new_str); @@ -1512,7 +1515,7 @@ static int s_cli_dag(int argc, char ** argv, char **a_str_reply) log_it(L_NOTICE,"Round complete command accepted, forming new events"); size_t l_objs_size=0; - dap_global_db_obj_t * l_objs = dap_global_db_objs_get(l_dag->gdb_group_events_round_new,&l_objs_size); + dap_global_db_obj_t * l_objs = dap_global_db_get_all_sync(l_dag->gdb_group_events_round_new,&l_objs_size); dap_string_t *l_str_ret_tmp= l_objs_size>0 ? dap_string_new("Completing round:\n") : dap_string_new("Completing round: no data"); @@ -1560,7 +1563,7 @@ static int s_cli_dag(int argc, char ** argv, char **a_str_reply) // delete events from db dap_list_t *l_list_tmp = l_list_to_del; while(l_list_tmp) { - dap_chain_global_db_gr_del((char*)l_list_tmp->data, l_dag->gdb_group_events_round_new); + dap_global_db_del_sync(l_dag->gdb_group_events_round_new, (char*)l_list_tmp->data); // dap_chain_cs_dag_event_broadcast(l_dag, DAP_DB$K_OPTYPE_DEL, // l_dag->gdb_group_events_round_new, (char*)l_list_tmp->data, // NULL, 0); @@ -1648,7 +1651,7 @@ static int s_cli_dag(int argc, char ** argv, char **a_str_reply) dap_chain_hash_fast_t l_datum_hash; dap_hash_fast(l_datums[i],dap_chain_datum_size(l_datums[i]),&l_datum_hash); char * l_datums_datum_hash_str = dap_chain_hash_fast_to_str_new(&l_datum_hash); - if ( dap_chain_global_db_gr_del( dap_strdup(l_datums_datum_hash_str),l_gdb_group_mempool ) ){ + if ( dap_global_db_del_sync(l_gdb_group_mempool, l_datums_datum_hash_str ) ==0 ){ dap_chain_node_cli_set_reply_text(a_str_reply, "Converted datum %s from mempool to event in the new forming round ", l_datums_datum_hash_str); @@ -1680,7 +1683,7 @@ static int s_cli_dag(int argc, char ** argv, char **a_str_reply) }break; case SUBCMD_EVENT_CANCEL:{ char * l_gdb_group_events = DAP_CHAIN_CS_DAG(l_chain)->gdb_group_events_round_new; - if ( dap_chain_global_db_gr_del( dap_strdup(l_event_hash_hex_str) ,l_gdb_group_events ) ){ + if ( dap_global_db_del_sync(l_gdb_group_events, l_event_hash_hex_str ) ==0){ // dap_chain_cs_dag_event_broadcast(l_dag, DAP_DB$K_OPTYPE_DEL, // l_gdb_group_events, l_event_hash_hex_str, // NULL, 0); @@ -1908,7 +1911,7 @@ static int s_cli_dag(int argc, char ** argv, char **a_str_reply) if ( l_gdb_group_events ){ dap_global_db_obj_t * l_objs; size_t l_objs_count = 0; - l_objs = dap_global_db_objs_get(l_gdb_group_events,&l_objs_count); + l_objs = dap_global_db_get_all_sync(l_gdb_group_events,&l_objs_count); dap_string_append_printf(l_str_tmp,"%s.%s: Found %zu records :\n",l_net->pub.name,l_chain->name,l_objs_count); for (size_t i = 0; i< l_objs_count; i++){ diff --git a/modules/type/dag/dap_chain_cs_dag_event.c b/modules/type/dag/dap_chain_cs_dag_event.c index 740587c01e..4146bfe851 100644 --- a/modules/type/dag/dap_chain_cs_dag_event.c +++ b/modules/type/dag/dap_chain_cs_dag_event.c @@ -257,6 +257,16 @@ void dap_chain_cs_dag_event_broadcast(dap_chain_cs_dag_t *a_dag, const char a_op } } +/** + * @brief dap_chain_cs_dag_event_gdb_set + * @param a_dag + * @param a_event_hash_str + * @param a_event + * @param a_event_size + * @param a_round_item + * @param a_group + * @return + */ bool dap_chain_cs_dag_event_gdb_set(dap_chain_cs_dag_t *a_dag, char *a_event_hash_str, dap_chain_cs_dag_event_t *a_event, size_t a_event_size, dap_chain_cs_dag_event_round_item_t *a_round_item, const char *a_group) @@ -281,9 +291,8 @@ bool dap_chain_cs_dag_event_gdb_set(dap_chain_cs_dag_t *a_dag, char *a_event_has l_round_item->round_info.ts_update = dap_time_now(); - bool ret = dap_chain_global_db_gr_set(a_event_hash_str, l_round_item, - dap_chain_cs_dag_event_round_item_get_size(l_round_item), - a_group); + bool ret = dap_global_db_set(a_group, a_event_hash_str, l_round_item, + dap_chain_cs_dag_event_round_item_get_size(l_round_item),true, NULL, NULL) == 0; /*size_t l_round_item_size = dap_chain_cs_dag_event_round_item_get_size(a_round_item); dap_chain_cs_dag_event_broadcast(a_dag, DAP_DB$K_OPTYPE_ADD, a_dag->gdb_group_events_round_new, -- GitLab