From 71b0a53192420a510b8ab89457f60a49aad72f13 Mon Sep 17 00:00:00 2001 From: "Constantin P." <papizh.konstantin@demlabs.net> Date: Fri, 25 Oct 2024 13:58:14 +0700 Subject: [PATCH] Net loading moved to regular threads --- modules/net/dap_chain_net.c | 36 ++++++++++++++++------- modules/net/dap_chain_node_cli_cmd.c | 2 +- modules/type/blocks/dap_chain_cs_blocks.c | 4 +-- 3 files changed, 29 insertions(+), 13 deletions(-) diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c index e2939a9da6..2677fe14db 100644 --- a/modules/net/dap_chain_net.c +++ b/modules/net/dap_chain_net.c @@ -191,9 +191,9 @@ typedef struct dap_chain_net_pvt{ #define PVT_S(a) ((dap_chain_net_pvt_t *)a.pvt) static dap_chain_net_t *s_nets_by_name = NULL, *s_nets_by_id = NULL; -static pthread_mutex_t s_net_cond_lock = PTHREAD_MUTEX_INITIALIZER; -static pthread_cond_t s_net_cond = PTHREAD_COND_INITIALIZER; -static uint16_t s_net_loading_count = 0; +//static pthread_mutex_t s_net_cond_lock = PTHREAD_MUTEX_INITIALIZER; +//static pthread_cond_t s_net_cond = PTHREAD_COND_INITIALIZER; +//static uint16_t s_net_loading_count = 0; static const char *c_net_states[] = { [NET_STATE_LOADING] = "NET_STATE_LOADING", @@ -230,7 +230,7 @@ static void s_net_states_notify(dap_chain_net_t * l_net); static void s_nodelist_change_notify(dap_store_obj_t *a_obj, void *a_arg); //static void s_net_proc_kill( dap_chain_net_t * a_net ); static int s_net_init(const char *a_net_name, const char *a_path, uint16_t a_acl_idx); -static bool s_net_load(void *a_arg); +static void *s_net_load(void *a_arg); static int s_net_try_online(dap_chain_net_t *a_net); static int s_cli_net(int argc, char ** argv, void **a_str_reply); static uint8_t *s_net_set_acl(dap_chain_hash_fast_t *a_pkey_hash); @@ -765,7 +765,22 @@ bool s_net_disk_load_notify_callback(UNUSED_ARG void *a_arg) { */ void dap_chain_net_load_all() { - pthread_mutex_lock(&s_net_cond_lock); + uint16_t l_nets_count = HASH_COUNT(s_nets_by_name); + if (!l_nets_count) + return log_it(L_ERROR, "No networks initialized!"); + pthread_t l_tids[l_nets_count]; + dap_chain_net_t *l_net = s_nets_by_name; + dap_timerfd_t *l_load_notify_timer = dap_timerfd_start(5000, (dap_timerfd_callback_t)s_net_disk_load_notify_callback, NULL); + for (int i = 0; i < l_nets_count; ++i) { + pthread_create(&l_tids[i], NULL, s_net_load, l_net); + l_net = l_net->hh.next; + } + for (int i = 0; i < l_nets_count; ++i) { + pthread_join(l_tids[i], NULL); + } + dap_timerfd_delete_mt(l_load_notify_timer->worker, l_load_notify_timer->esocket_uuid); + + /*pthread_mutex_lock(&s_net_cond_lock); s_net_loading_count = HASH_COUNT(s_nets_by_name); if (!s_net_loading_count) { log_it(L_ERROR, "Can't find any nets"); @@ -780,7 +795,7 @@ void dap_chain_net_load_all() } int l_net_counter = 0; uint32_t l_cpu_count = dap_get_cpu_count(); - dap_timerfd_t *l_load_notify_timer = dap_timerfd_start(5000, (dap_timerfd_callback_t)s_net_disk_load_notify_callback, NULL); + for (dap_chain_net_t *net = s_nets_by_name; net; net = net->hh.next) { dap_proc_thread_create(l_net_threads + l_net_counter, dap_random_byte() % l_cpu_count); dap_proc_thread_callback_add(l_net_threads + l_net_counter, s_net_load, net); @@ -793,7 +808,7 @@ void dap_chain_net_load_all() dap_context_stop_n_kill(l_net_threads[i].context); DAP_DELETE(l_net_threads); pthread_mutex_unlock(&s_net_cond_lock); - dap_timerfd_delete_mt(l_load_notify_timer->worker, l_load_notify_timer->esocket_uuid); + dap_timerfd_delete_mt(l_load_notify_timer->worker, l_load_notify_timer->esocket_uuid);*/ } dap_string_t* dap_cli_list_net() @@ -1984,7 +1999,7 @@ int s_net_init(const char *a_net_name, const char *a_path, uint16_t a_acl_idx) return 0; } -bool s_net_load(void *a_arg) +static void *s_net_load(void *a_arg) { dap_chain_net_t *l_net = a_arg; int l_err_code = 0; @@ -2223,11 +2238,12 @@ bool s_net_load(void *a_arg) ret: if (l_err_code) log_it(L_ERROR, "Loading chains of net %s finished with (%d) error code.", l_net->pub.name, l_err_code); - pthread_mutex_lock(&s_net_cond_lock); + /*pthread_mutex_lock(&s_net_cond_lock); s_net_loading_count--; pthread_cond_signal(&s_net_cond); pthread_mutex_unlock(&s_net_cond_lock); - return false; + return false;*/ + return NULL; } dap_global_db_cluster_t *dap_chain_net_get_mempool_cluster(dap_chain_t *a_chain) diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index ca0232f229..644a40e19f 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -4031,7 +4031,7 @@ void _cmd_find_type_decree_in_chain(json_object *a_out, dap_chain_t *a_chain, ui &l_datum_count); json_object *l_obj_atom = json_object_new_object(); char l_buff_ts[50] = {'\0'}; - dap_time_to_str_rfc822(&l_buff_ts, 50, l_atom_iter->cur_ts); + dap_time_to_str_rfc822(l_buff_ts, 50, l_atom_iter->cur_ts); for (size_t i = 0; i < l_datum_count; i++) { dap_chain_datum_t *l_datum = l_datums[i]; if (l_datum[i].header.type_id != DAP_CHAIN_DATUM_DECREE) continue; diff --git a/modules/type/blocks/dap_chain_cs_blocks.c b/modules/type/blocks/dap_chain_cs_blocks.c index c9f9d33df4..f39003622d 100644 --- a/modules/type/blocks/dap_chain_cs_blocks.c +++ b/modules/type/blocks/dap_chain_cs_blocks.c @@ -465,8 +465,8 @@ static void s_cli_meta_hash_print(json_object* a_json_obj_out, const char *a_met { if (a_meta->hdr.data_size == sizeof (dap_chain_hash_fast_t)) { const char *l_hash_str = !dap_strcmp(a_hash_out_type, "base58") ? - dap_enc_base58_encode_hash_to_str_static(a_meta->data) : - dap_chain_hash_fast_to_str_static(a_meta->data); + dap_enc_base58_encode_hash_to_str_static((dap_chain_hash_fast_t*)a_meta->data) : + dap_chain_hash_fast_to_str_static((dap_chain_hash_fast_t*)a_meta->data); json_object_object_add(a_json_obj_out, a_meta_title, json_object_new_string(l_hash_str)); // if (dap_strcmp(a_hash_out_type, "base58")) { // const char *l_hash_str = dap_enc_base58_encode_hash_to_str_static(a_meta->data); -- GitLab