From 57a939679e88579759cb19bfa7aea292477bb7c1 Mon Sep 17 00:00:00 2001 From: "pavel.uhanov" <pavel.uhanov@demlabs.net> Date: Sat, 25 Jan 2025 07:03:13 +0000 Subject: [PATCH] hotfix-14638 --- modules/net/dap_chain_net.c | 19 ++++++++++++++++++- modules/net/dap_chain_node_cli_cmd.c | 15 +++++++++------ modules/net/include/dap_chain_net.h | 11 +---------- 3 files changed, 28 insertions(+), 17 deletions(-) diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c index 0e8d86b712..6b6d8b2c7e 100644 --- a/modules/net/dap_chain_net.c +++ b/modules/net/dap_chain_net.c @@ -2506,7 +2506,7 @@ char * dap_chain_net_get_gdb_group_mempool_by_chain_type(dap_chain_net_t *a_net, * @param l_net * @return */ -dap_chain_net_state_t dap_chain_net_get_state (dap_chain_net_t *a_net) +DAP_INLINE dap_chain_net_state_t dap_chain_net_get_state (dap_chain_net_t *a_net) { return PVT(a_net)->state; } @@ -3367,4 +3367,21 @@ DAP_INLINE dap_chain_net_state_t dap_chain_net_get_target_state(dap_chain_net_t return PVT(a_net)->state_target; } +bool dap_chain_net_stop(dap_chain_net_t *a_net) +{ + int l_attempts_count = 0; + bool l_ret = false; + if (dap_chain_net_get_target_state(a_net) == NET_STATE_ONLINE) { + dap_chain_net_state_go_to(a_net, NET_STATE_OFFLINE); + l_ret = true; + } else if (dap_chain_net_get_state(a_net) != NET_STATE_OFFLINE) { + dap_chain_net_state_go_to(a_net, NET_STATE_OFFLINE); + } + while (dap_chain_net_get_state(a_net) != NET_STATE_OFFLINE && l_attempts_count++ < 5) { sleep(1); } + if (dap_chain_net_get_state(a_net) != NET_STATE_OFFLINE) { + log_it(L_ERROR, "Can't stop net %s", a_net->pub.name); + } + return l_ret; +} + /*------------------------------------State machine block end---------------------------------*/ \ No newline at end of file diff --git a/modules/net/dap_chain_node_cli_cmd.c b/modules/net/dap_chain_node_cli_cmd.c index 663e6e8211..aa4c7cc2eb 100644 --- a/modules/net/dap_chain_node_cli_cmd.c +++ b/modules/net/dap_chain_node_cli_cmd.c @@ -8005,12 +8005,15 @@ int cmd_remove(int a_argc, char **a_argv, void **a_str_reply) l_gdb_nodes_list = dap_list_append(l_gdb_nodes_list, l_gdb_groups); } - dap_global_db_deinit(); - const char *l_gdb_driver = dap_config_get_item_str_default(g_config, "global_db", "driver", "mdbx"); - char *l_gdb_rm_path = dap_strdup_printf("%s/gdb-%s", l_gdb_path, l_gdb_driver); - dap_rm_rf(l_gdb_rm_path); - DAP_DELETE(l_gdb_rm_path); - dap_global_db_init(); + dap_list_t *l_group_list = dap_global_db_driver_get_groups_by_mask("*"); + for (dap_list_t *l_list = l_group_list; l_list; l_list = dap_list_next(l_list)) { + dap_global_db_erase_table_sync((const char *)(l_list->data)); + } + dap_list_free_full(l_group_list, NULL); + uint32_t l_version = DAP_GLOBAL_DB_VERSION; + if ( (error = dap_global_db_set_sync(DAP_GLOBAL_DB_LOCAL_GENERAL, "gdb_version", &l_version, sizeof(l_version), false)) ) + log_it(L_ERROR, "Can't add information about gdb_version"); + for (dap_list_t *ptr = l_gdb_nodes_list; ptr; ptr = dap_list_next(ptr)) { _pvt_net_nodes_list_t *l_tmp = (_pvt_net_nodes_list_t*)ptr->data; for (size_t i = 0; i < l_tmp->count_nodes; i++) { diff --git a/modules/net/include/dap_chain_net.h b/modules/net/include/dap_chain_net.h index 92989ff89f..efddef510d 100644 --- a/modules/net/include/dap_chain_net.h +++ b/modules/net/include/dap_chain_net.h @@ -105,16 +105,7 @@ dap_chain_net_state_t dap_chain_net_get_target_state(dap_chain_net_t *a_net); dap_chain_net_state_t dap_chain_net_get_state ( dap_chain_net_t * l_net); inline static int dap_chain_net_start(dap_chain_net_t * a_net){ return dap_chain_net_state_go_to(a_net,NET_STATE_ONLINE); } -inline static int dap_chain_net_stop(dap_chain_net_t *a_net) -{ - if (dap_chain_net_get_target_state(a_net) == NET_STATE_ONLINE) { - dap_chain_net_state_go_to(a_net, NET_STATE_OFFLINE); - return true; - } - if (dap_chain_net_get_state(a_net) != NET_STATE_OFFLINE) - dap_chain_net_state_go_to(a_net, NET_STATE_OFFLINE); - return false; -} +bool dap_chain_net_stop(dap_chain_net_t *a_net); inline static int dap_chain_net_links_establish(dap_chain_net_t * a_net) { return dap_chain_net_state_go_to(a_net,NET_STATE_LINKS_ESTABLISHED); } inline static int dap_chain_net_sync(dap_chain_net_t * a_net) { return dap_chain_net_state_go_to(a_net,NET_STATE_SYNC_CHAINS); } -- GitLab