diff --git a/dap_chain_net.c b/dap_chain_net.c index acb59dc6fd92ca667eeaf3cda8f25c57ab3d7d31..699562998018dead356c6276ddff8d65db0949ab 100755 --- a/dap_chain_net.c +++ b/dap_chain_net.c @@ -106,6 +106,7 @@ typedef struct dap_chain_net_pvt{ #else HANDLE state_proc_cond; #endif + pthread_mutex_t state_mutex_cond; pthread_mutex_t state_mutex; dap_chain_node_role_t node_role; uint32_t flags; @@ -168,6 +169,8 @@ int s_net_load(const char * a_net_name); static void s_gbd_history_callback_notify (void * a_arg,const char a_op_code, const char * a_prefix, const char * a_group, const char * a_key, const void * a_value, const size_t a_value_len); +static void s_chain_callback_notify(void * a_arg, dap_chain_t *a_chain, dap_chain_cell_id_t a_id); + static int s_cli_net(int argc, char ** argv, char **str_reply); static bool s_seed_mode = false; @@ -180,8 +183,9 @@ static bool s_seed_mode = false; */ void s_net_set_go_sync(dap_chain_net_t * a_net) { - if(a_net) - PVT(a_net)->flags |= F_DAP_CHAIN_NET_GO_SYNC; + if(!a_net) + return; + dap_chain_net_start(a_net); } /** @@ -201,22 +205,28 @@ inline static const char * s_net_state_to_str(dap_chain_net_state_t l_state) */ int dap_chain_net_state_go_to(dap_chain_net_t * a_net, dap_chain_net_state_t a_new_state) { - pthread_mutex_lock( &PVT(a_net)->state_mutex); + pthread_mutex_lock( &PVT(a_net)->state_mutex_cond); if (PVT(a_net)->state_target == a_new_state){ log_it(L_WARNING,"Already going to state %s",s_net_state_to_str(a_new_state)); } - PVT(a_net)->state_target = a_new_state; + if(pthread_mutex_trylock(&PVT(a_net)->state_mutex) == 0) { + PVT(a_net)->state_target = a_new_state; + pthread_mutex_unlock(&PVT(a_net)->state_mutex); + } + // set flag for sync + PVT(a_net)->flags |= F_DAP_CHAIN_NET_GO_SYNC; #ifndef _WIN32 pthread_cond_signal( &PVT(a_net)->state_proc_cond ); #else SetEvent( PVT(a_net)->state_proc_cond ); #endif - pthread_mutex_unlock( &PVT(a_net)->state_mutex); + pthread_mutex_unlock( &PVT(a_net)->state_mutex_cond); return 0; } /** * @brief s_gbd_history_callback_notify + * @param a_arg * @param a_op_code * @param a_prefix * @param a_group @@ -232,16 +242,30 @@ static void s_gbd_history_callback_notify (void * a_arg, const char a_op_code, c if (a_arg) { dap_chain_net_t * l_net = (dap_chain_net_t *) a_arg; - if (!PVT (l_net)->load_mode ){ + s_net_set_go_sync(l_net); + /*if (!PVT (l_net)->load_mode ){ if( pthread_mutex_trylock( &PVT (l_net)->state_mutex) == 0 ){ if ( PVT(l_net)->state == NET_STATE_ONLINE || PVT(l_net)->state == NET_STATE_ONLINE ) dap_chain_net_sync_all(l_net); pthread_mutex_unlock( &PVT (l_net)->state_mutex); } - } + }*/ } } +/** + * @brief s_chain_callback_notify + * @param a_arg + * @param a_chain + * @param a_id + */ +static void s_chain_callback_notify(void * a_arg, dap_chain_t *a_chain, dap_chain_cell_id_t a_id) +{ + if(!a_arg) + return; + dap_chain_net_t * l_net = (dap_chain_net_t *) a_arg; + s_net_set_go_sync(l_net); +} /** @@ -275,6 +299,9 @@ lb_proc_state: pthread_mutex_unlock(&PVT(l_net)->state_mutex ); goto lb_proc_state; } + // disable SYNC_GDB + if(PVT(l_net)->flags & F_DAP_CHAIN_NET_GO_SYNC) + PVT(l_net)->flags &= ~F_DAP_CHAIN_NET_GO_SYNC; } break; case NET_STATE_LINKS_PREPARE:{ log_it(L_NOTICE,"%s.state: NET_STATE_LINKS_PREPARE",l_net->pub.name); @@ -289,7 +316,7 @@ lb_proc_state: DAP_DELETE(PVT(l_net)->links_addrs); PVT(l_net)->links_addrs_count = PVT(l_net)->node_info->hdr.links_number; PVT(l_net)->links_addrs = DAP_NEW_Z_SIZE( dap_chain_node_addr_t, - PVT(l_net)->links_addrs_count); + PVT(l_net)->links_addrs_count * sizeof(dap_chain_node_addr_t)); for (size_t i =0 ; i < PVT(l_net)->node_info->hdr.links_number; i++ ){ PVT(l_net)->links_addrs[i].uint64 = PVT(l_net)->node_info->links[i].uint64; } @@ -337,9 +364,9 @@ lb_proc_state: case NODE_ROLE_MASTER: case NODE_ROLE_LIGHT:{ // If we haven't any assigned shard - connect to root-0 - if(l_net->pub.cell_id.uint64 == 0) { + if(1) { //if(l_net->pub.cell_id.uint64 == 0) { - dap_chain_net_pvt_t *pvt_debug = PVT(l_net); + //dap_chain_net_pvt_t *pvt_debug = PVT(l_net); // get current node address dap_chain_node_addr_t l_address; l_address.uint64 = dap_chain_net_get_cur_addr(l_net) ? @@ -355,19 +382,23 @@ lb_proc_state: l_links_addrs_count * sizeof(dap_chain_node_addr_t)); // add linked nodes for connect - for(uint16_t i = 0; i < min(1, l_cur_node_info->hdr.links_number); i++) { + for(uint16_t i = 0; i < min(4, l_cur_node_info->hdr.links_number); i++) { dap_chain_node_addr_t *l_addr = l_cur_node_info->links + i; + dap_chain_node_addr_t link_addr = l_cur_node_info->links[i]; dap_chain_node_info_t *l_remore_node_info = dap_chain_node_info_read(l_net, l_addr); - // if only nodes from the same cell - if(l_cur_node_info->hdr.cell_id.uint64 == l_remore_node_info->hdr.cell_id.uint64) { - PVT(l_net)->links_addrs[PVT(l_net)->links_addrs_count].uint64 = - l_remore_node_info->hdr.address.uint64; - PVT(l_net)->links_addrs_count++; + if(l_remore_node_info) { + // if only nodes from the same cell of cell=0 + if(!l_cur_node_info->hdr.cell_id.uint64 || + l_cur_node_info->hdr.cell_id.uint64 == l_remore_node_info->hdr.cell_id.uint64) { + PVT(l_net)->links_addrs[PVT(l_net)->links_addrs_count].uint64 = + l_remore_node_info->hdr.address.uint64; + PVT(l_net)->links_addrs_count++; + } + DAP_DELETE(l_remore_node_info); } - DAP_DELETE(l_remore_node_info); } } - // add root nodes for connect + // if no links then add root nodes for connect if(!PVT(l_net)->links_addrs_count){ // use no more then 4 root node int l_use_root_nodes = min(4, PVT(l_net)->seed_aliases_count); @@ -397,7 +428,7 @@ lb_proc_state: } } break; } - if ( PVT(l_net)->state_target != NET_STATE_LINKS_PREPARE ){ + if ( PVT(l_net)->state_target > NET_STATE_LINKS_PREPARE ){ if ( PVT(l_net)->links_addrs_count>0 ) { // If links are present PVT(l_net)->state = NET_STATE_LINKS_CONNECTING; log_it(L_DEBUG,"Prepared %u links, start to establish them", PVT(l_net)->links_addrs_count ); @@ -411,7 +442,10 @@ lb_proc_state: log_it(L_WARNING,"Target state is NET_STATE_LINKS_PREPARE? Realy?"); PVT(l_net)->state = NET_STATE_OFFLINE; } - } pthread_mutex_unlock(&PVT(l_net)->state_mutex ); goto lb_proc_state; + } + pthread_mutex_unlock(&PVT(l_net)->state_mutex ); + goto lb_proc_state; + case NET_STATE_LINKS_CONNECTING:{ log_it(L_NOTICE,"%s.state: NET_STATE_LINKS_CONNECTING",l_net->pub.name); //size_t l_links_established = 0; @@ -450,7 +484,9 @@ lb_proc_state: PVT(l_net)->state = NET_STATE_OFFLINE ; PVT(l_net)->state_target = NET_STATE_OFFLINE ; } - } pthread_mutex_unlock(&PVT(l_net)->state_mutex ); goto lb_proc_state; + } + pthread_mutex_unlock(&PVT(l_net)->state_mutex ); + goto lb_proc_state; case NET_STATE_LINKS_ESTABLISHED:{ log_it(L_NOTICE,"%s.state: NET_STATE_LINKS_ESTABLISHED",l_net->pub.name); @@ -459,7 +495,7 @@ lb_proc_state: switch ( PVT(l_net)->node_role.enums ){ case NODE_ROLE_ROOT_MASTER: case NODE_ROLE_ROOT:{ - dap_chain_node_client_t * l_node_client = NULL, *l_node_client_tmp = NULL; + /*dap_chain_node_client_t * l_node_client = NULL, *l_node_client_tmp = NULL; // Send everybody your address when linked HASH_ITER(hh,PVT(l_net)->links,l_node_client,l_node_client_tmp){ @@ -468,12 +504,12 @@ lb_proc_state: DAP_STREAM_CH_CHAIN_NET_PKT_TYPE_NODE_ADDR, l_net->pub.id, dap_chain_net_get_cur_addr(l_net), sizeof (dap_chain_node_addr_t) ); - } + }*/ PVT(l_net)->state = NET_STATE_SYNC_GDB; }break; case NODE_ROLE_CELL_MASTER: case NODE_ROLE_MASTER:{ - PVT(l_net)->state = NET_STATE_ADDR_REQUEST; + PVT(l_net)->state = NET_STATE_SYNC_GDB;//NET_STATE_ADDR_REQUEST; } break; default:{ // get addr for current node if it absent @@ -483,7 +519,10 @@ lb_proc_state: PVT( l_net)->state = NET_STATE_SYNC_GDB; } } - }pthread_mutex_unlock(&PVT(l_net)->state_mutex ); goto lb_proc_state; + } + pthread_mutex_unlock(&PVT(l_net)->state_mutex ); + goto lb_proc_state; + case NET_STATE_SYNC_GDB: // we need only to sync gdb PVT(l_net)->state = NET_STATE_SYNC_GDB ; if ( PVT(l_net)->addr_request_attempts >=10 && PVT(l_net)->state == NET_STATE_ADDR_REQUEST){ @@ -494,6 +533,7 @@ lb_proc_state: PVT(l_net)->state = NET_STATE_SYNC_GDB; pthread_mutex_unlock(&PVT(l_net)->state_mutex ); goto lb_proc_state; + case NET_STATE_SYNC_CHAINS: PVT(l_net)->state = NET_STATE_SYNC_CHAINS; pthread_mutex_unlock(&PVT(l_net)->state_mutex ); @@ -504,14 +544,19 @@ lb_proc_state: } } } - pthread_mutex_unlock(&PVT(l_net)->state_mutex ); goto lb_proc_state; + pthread_mutex_unlock(&PVT(l_net)->state_mutex ); + goto lb_proc_state; + case NET_STATE_SYNC_CHAINS: PVT(l_net)->state = (PVT(l_net)->node_info && PVT(l_net)->node_info->hdr.address.uint64)? NET_STATE_SYNC_CHAINS : NET_STATE_ADDR_REQUEST; - pthread_mutex_unlock(&PVT(l_net)->state_mutex ); goto lb_proc_state; + pthread_mutex_unlock(&PVT(l_net)->state_mutex ); + goto lb_proc_state; + case NET_STATE_ADDR_REQUEST : PVT(l_net)->state = NET_STATE_ADDR_REQUEST; - pthread_mutex_unlock(&PVT(l_net)->state_mutex ); goto lb_proc_state; + pthread_mutex_unlock(&PVT(l_net)->state_mutex ); + goto lb_proc_state; default:{} } }break; @@ -615,7 +660,7 @@ lb_proc_state: } // wait for finishing of request - int timeout_ms = 50000; // 2 min = 120 sec = 120 000 ms + int timeout_ms = 300000; // 5 min = 300 sec = 300 000 ms // TODO add progress info to console int res = dap_chain_node_client_wait(l_node_client, NODE_CLIENT_STATE_SYNCED, timeout_ms); switch (res) { @@ -675,6 +720,8 @@ lb_proc_state: log_it(L_WARNING,"Timeout with sync of chain '%s' ", l_chain->name); break; case 0: + // flush global_db + dap_chain_global_db_flush(); log_it(L_INFO, "sync of chain '%s' completed ", l_chain->name); // set time of last sync { @@ -694,9 +741,11 @@ lb_proc_state: } PVT(l_net)->state = NET_STATE_ONLINE; + // end sync, go to offline state + PVT(l_net)->state_target = NET_STATE_OFFLINE; // end sync, return to online state - if(PVT(l_net)->state_target > NET_STATE_ONLINE) - PVT(l_net)->state_target = NET_STATE_ONLINE; + //if(PVT(l_net)->state_target > NET_STATE_ONLINE) + // PVT(l_net)->state_target = NET_STATE_ONLINE; } pthread_mutex_unlock(&PVT(l_net)->state_mutex); goto lb_proc_state; @@ -718,12 +767,13 @@ lb_proc_state: break; // sync case NET_STATE_SYNC_GDB: + // if flag set then go to SYNC_GDB + if(PVT(l_net)->flags & F_DAP_CHAIN_NET_GO_SYNC) + PVT(l_net)->flags &= ~F_DAP_CHAIN_NET_GO_SYNC; + PVT(l_net)->state = NET_STATE_SYNC_GDB; pthread_mutex_unlock(&PVT(l_net)->state_mutex); goto lb_proc_state; - PVT(l_net)->state = NET_STATE_SYNC_GDB; - pthread_mutex_unlock(&PVT(l_net)->state_mutex); - goto lb_proc_state; } } @@ -734,6 +784,18 @@ lb_proc_state: return ret; } +// Global +/*static void s_net_proc_thread_callback_update_db(void) +{ + dap_chain_net_item_t *l_net_item, *l_net_item_tmp; + printf("update0\n"); + HASH_ITER(hh, s_net_items, l_net_item, l_net_item_tmp) + { + s_net_set_go_sync(l_net_item->chain_net); + } + printf("update1\n"); +}*/ + /** * @brief s_net_proc_thread * @details Brings up and check the Dap Chain Network @@ -745,44 +807,50 @@ static void *s_net_proc_thread ( void *a_net ) dap_chain_net_t *l_net = (dap_chain_net_t *)a_net; dap_chain_net_pvt_t *p_net = (dap_chain_net_pvt_t *)(void *)l_net->pvt; - const uint64_t l_timeout_ms = 20000;// 20 sec + const uint64_t l_timeout_ms = 60000;// 60 sec + + // set callback to update data + //dap_chain_global_db_set_callback_for_update_base(s_net_proc_thread_callback_update_db); while( !(p_net->flags & F_DAP_CHAIN_NET_SHUTDOWN) ) { + // check or start sync s_net_states_proc( l_net ); - #ifndef _WIN32 - pthread_mutex_lock( &p_net->state_mutex ); - - // prepare for signal waiting - - struct timespec l_to; - clock_gettime( CLOCK_MONOTONIC, &l_to ); - int64_t l_nsec_new = l_to.tv_nsec + l_timeout_ms * 1000000ll; - - // if the new number of nanoseconds is more than a second - if(l_nsec_new > (long) 1e9) { - l_to.tv_sec += l_nsec_new / (long) 1e9; - l_to.tv_nsec = l_nsec_new % (long) 1e9; - } - else - l_to.tv_nsec = (long) l_nsec_new; - // signal waiting - pthread_cond_timedwait( &p_net->state_proc_cond, &p_net->state_mutex, &l_to ); - - // checking whether new sync is needed - time_t l_sync_timeout = 300;// 300 sec = 5 min - clock_gettime( CLOCK_MONOTONIC, &l_to ); - if(l_to.tv_sec >= p_net->last_sync + l_sync_timeout) - p_net->flags |= F_DAP_CHAIN_NET_GO_SYNC; + // wait if flag not set then go to SYNC_GDB + if(!(PVT(l_net)->flags & F_DAP_CHAIN_NET_GO_SYNC)) { +#ifndef _WIN32 + pthread_mutex_lock( &p_net->state_mutex_cond ); + // prepare for signal waiting + struct timespec l_to; + clock_gettime( CLOCK_MONOTONIC, &l_to ); + int64_t l_nsec_new = l_to.tv_nsec + l_timeout_ms * 1000000ll; + + // if the new number of nanoseconds is more than a second + if(l_nsec_new > (long) 1e9) { + l_to.tv_sec += l_nsec_new / (long) 1e9; + l_to.tv_nsec = l_nsec_new % (long) 1e9; + } + else + l_to.tv_nsec = (long) l_nsec_new; - pthread_mutex_unlock( &p_net->state_mutex ); - #else // WIN32 + // signal waiting + pthread_cond_timedwait( &p_net->state_proc_cond, &p_net->state_mutex_cond, &l_to ); + pthread_mutex_unlock(&p_net->state_mutex_cond); +#else // WIN32 - WaitForSingleObject( p_net->state_proc_cond, (uint32_t)l_timeout_ms ); + WaitForSingleObject( p_net->state_proc_cond, (uint32_t)l_timeout_ms ); - #endif +#endif + // checking whether new sync is needed + time_t l_sync_timeout = 300; // 300 sec = 5 min + clock_gettime(CLOCK_MONOTONIC, &l_to); + // start sync every l_sync_timeout sec + if(l_to.tv_sec >= p_net->last_sync + l_sync_timeout) { + p_net->flags |= F_DAP_CHAIN_NET_GO_SYNC; + } + } log_it( L_DEBUG, "Waked up s_net_proc_thread( )" ); } @@ -847,6 +915,7 @@ static dap_chain_net_t *s_net_new(const char * a_id, const char * a_name , ret->pub.name = strdup( a_name ); pthread_mutex_init( &PVT(ret)->state_mutex, NULL ); + pthread_mutex_init( &PVT(ret)->state_mutex_cond, NULL ); #ifndef _WIN32 pthread_condattr_t l_attr; @@ -1558,6 +1627,8 @@ int s_net_load(const char * a_net_name) DL_APPEND(l_net->pub.chains, l_chain); if(l_chain->callback_created) l_chain->callback_created(l_chain, l_cfg); + // add a callback to monitor changes in the chain + dap_chain_add_callback_notify(l_chain, s_chain_callback_notify, l_net); } DAP_DELETE (l_chain_prior->chains_path); l_list = dap_list_next(l_list); @@ -1922,8 +1993,7 @@ void dap_chain_net_proc_mempool (dap_chain_net_t * a_net) // 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++) { - if(dap_chain_global_db_gr_del(dap_strdup(l_objs[i].key), l_gdb_group_mempool)) - s_net_set_go_sync(a_net); + dap_chain_global_db_gr_del(dap_strdup(l_objs[i].key), l_gdb_group_mempool); if(i < l_objs_processed_tmp) { dap_string_append_printf(l_str_tmp, "New event created, removed datum 0x%s from mempool \n", l_objs[i].key); diff --git a/dap_chain_node.c b/dap_chain_node.c index e0a8dfb2cb00d50888792f622648826a163853f4..79820191b65bc4ccaac69b0797486f7d3c6a3022 100644 --- a/dap_chain_node.c +++ b/dap_chain_node.c @@ -92,8 +92,6 @@ bool dap_chain_node_alias_register(dap_chain_net_t * a_net,const char *alias, da // a_value[2 * sizeof(dap_chain_node_addr_t)] = '\0'; bool res = dap_chain_global_db_gr_set( dap_strdup(a_key), l_addr, sizeof(dap_chain_node_addr_t) , a_net->pub.gdb_nodes_aliases); - if(res) - s_net_set_go_sync(a_net); return res; } @@ -117,8 +115,6 @@ bool dap_chain_node_alias_delete(dap_chain_net_t * a_net,const char *a_alias) { char *a_key = strdup(a_alias); bool res = dap_chain_global_db_gr_del(a_key, a_net->pub.gdb_nodes_aliases); - if(res) - s_net_set_go_sync(a_net); return res; } @@ -159,8 +155,6 @@ int dap_chain_node_info_save(dap_chain_net_t * a_net, dap_chain_node_info_t *a_n dap_chain_node_info_t *l_node_info = DAP_NEW_Z_SIZE(dap_chain_node_info_t, l_node_info_size); memcpy(l_node_info, a_node_info, sizeof (*a_node_info) ); bool res = dap_chain_global_db_gr_set( dap_strdup(l_key), l_node_info, l_node_info_size, a_net->pub.gdb_nodes); - if(res) - s_net_set_go_sync(a_net); DAP_DELETE(l_key); //DAP_DELETE(a_value); return res?0:-3; diff --git a/dap_chain_node_cli_cmd.c b/dap_chain_node_cli_cmd.c index c63b7d439a93dccc6312e3a13479ea0725dc43e3..422f2c0b72d78f00b58c1be915f1b895b3b42d51 100644 --- a/dap_chain_node_cli_cmd.c +++ b/dap_chain_node_cli_cmd.c @@ -218,14 +218,18 @@ static bool node_info_save_and_reply(dap_chain_net_t * a_net, dap_chain_node_inf } //char *a_value = dap_chain_node_info_serialize(node_info, NULL); size_t l_node_info_size = dap_chain_node_info_get_size(a_node_info); - dap_chain_node_info_t *l_node_info = DAP_NEW_Z_SIZE(dap_chain_node_info_t, l_node_info_size); - memcpy(l_node_info, a_node_info, sizeof (*a_node_info) ); + //dap_chain_node_info_t *l_node_info = DAP_NEW_Z_SIZE(dap_chain_node_info_t, l_node_info_size); + //memcpy(l_node_info, a_node_info, l_node_info_size ); - bool res = dap_chain_global_db_gr_set(a_key, (uint8_t *) l_node_info, l_node_info_size,a_net->pub.gdb_nodes); - DAP_DELETE(a_key); + //size_t data_len_out = 0; + //dap_chain_node_info_t *a_node_info1 = dap_chain_global_db_gr_get(a_key, &data_len_out, a_net->pub.gdb_nodes); + + bool res = dap_chain_global_db_gr_set(a_key, (uint8_t *) a_node_info, l_node_info_size, a_net->pub.gdb_nodes); + + //data_len_out = 0; + //dap_chain_node_info_t *a_node_info2 = dap_chain_global_db_gr_get(a_key, &data_len_out, a_net->pub.gdb_nodes); + //DAP_DELETE(a_key); //DAP_DELETE(a_value); - if(res) - s_net_set_go_sync(a_net); return res; } @@ -326,7 +330,6 @@ static int node_info_del_with_reply(dap_chain_net_t * a_net, dap_chain_node_info } // set text response dap_chain_node_cli_set_reply_text(str_reply, "node deleted"); - s_net_set_go_sync(a_net); } else dap_chain_node_cli_set_reply_text(str_reply, "node not deleted"); @@ -397,9 +400,10 @@ static int link_add_or_del_with_reply(dap_chain_net_t * a_net, dap_chain_node_in // add link if(cmd_int == 1) { if(index_link == -1) { - l_node_info_read = DAP_REALLOC(l_node_info_read, l_node_info_read_size += sizeof(*link)); - memcpy(&(l_node_info_read->links[l_node_info_read->hdr.links_number]), link, sizeof(dap_chain_node_addr_t)); l_node_info_read->hdr.links_number++; + l_node_info_read_size = dap_chain_node_info_get_size(l_node_info_read); + l_node_info_read = DAP_REALLOC(l_node_info_read, l_node_info_read_size); + memcpy(&(l_node_info_read->links[l_node_info_read->hdr.links_number-1]), link, sizeof(dap_chain_node_addr_t)); res_successful = true; } } @@ -862,7 +866,7 @@ int com_node(int a_argc, char ** a_argv, char **a_str_reply) dap_chain_node_cli_set_reply_text(a_str_reply, "invalid parameters"); return -1; } - // handler of command 'global_db node add' + // handler of command 'node add' int l_ret = node_info_add_with_reply(l_net, l_node_info, alias_str, l_cell_str, a_ipv4_str, a_ipv6_str, a_str_reply); DAP_DELETE(l_node_info); @@ -870,7 +874,7 @@ int com_node(int a_argc, char ** a_argv, char **a_str_reply) //break; case CMD_DEL: - // handler of command 'global_db node del' + // handler of command 'node del' { int l_ret = node_info_del_with_reply(l_net, l_node_info, alias_str, a_str_reply); DAP_DELETE(l_node_info); @@ -878,13 +882,13 @@ int com_node(int a_argc, char ** a_argv, char **a_str_reply) } case CMD_LINK: if(dap_chain_node_cli_find_option_val(a_argv, arg_index, min(a_argc, arg_index + 1), "add", NULL)) { - // handler of command 'global_db node link add -addr <node address> -link <node address>' + // handler of command 'node link add -addr <node address> -link <node address>' int l_ret = link_add_or_del_with_reply(l_net, l_node_info, "add", alias_str, &l_link, a_str_reply); DAP_DELETE(l_node_info); return l_ret; } else if(dap_chain_node_cli_find_option_val(a_argv, arg_index, min(a_argc, arg_index + 1), "del", NULL)) { - // handler of command 'global_db node link del -addr <node address> -link <node address>' + // handler of command 'node link del -addr <node address> -link <node address>' int l_ret = link_add_or_del_with_reply(l_net, l_node_info, "del", alias_str, &l_link, a_str_reply); DAP_DELETE(l_node_info); return l_ret; @@ -1144,6 +1148,8 @@ int com_node(int a_argc, char ** a_argv, char **a_str_reply) return -2; } + // flush global_db + dap_chain_global_db_flush(); log_it(L_INFO, "Gdb synced Ok"); // Requesting chains @@ -1896,7 +1902,6 @@ int com_token_decl_sign(int argc, char ** argv, char ** a_str_reply) // Add datum to mempool with datum_token hash as a key if(dap_chain_global_db_gr_set(dap_strdup(l_key_str), (uint8_t *) l_datum, l_datum_size, l_gdb_group_mempool)) { - s_net_set_go_sync(l_net); char* l_hash_str = strdup(l_datum_hash_str); // Remove old datum from pool @@ -1908,7 +1913,6 @@ int com_token_decl_sign(int argc, char ** argv, char ** a_str_reply) DAP_DELETE(l_datum); //DAP_DELETE(l_datum_token); DAP_DELETE(l_gdb_group_mempool); - s_net_set_go_sync(l_net); return 0; } else { dap_chain_node_cli_set_reply_text(a_str_reply, @@ -2063,7 +2067,6 @@ int com_mempool_delete(int argc, char ** argv, char ** a_str_reply) if(dap_chain_global_db_gr_del( dap_strdup(l_datum_hash_str2), l_gdb_group_mempool)) { dap_chain_node_cli_set_reply_text(a_str_reply, "Datum %s deleted", l_datum_hash_str); DAP_DELETE( l_datum_hash_str2); - s_net_set_go_sync(l_net); return 0; } else { dap_chain_node_cli_set_reply_text(a_str_reply, "Error! Can't find datum %s", l_datum_hash_str); @@ -2153,8 +2156,7 @@ int com_mempool_proc(int argc, char ** argv, char ** a_str_reply) for(size_t i = 0; i < l_datums_size; i++) { if(l_procecced[i]!=1) continue; - if(dap_chain_global_db_gr_del( dap_strdup(l_objs[i].key), l_gdb_group_mempool_tmp)) - s_net_set_go_sync(l_net); + dap_chain_global_db_gr_del( dap_strdup(l_objs[i].key), l_gdb_group_mempool_tmp); l_objs_processed_cur++; if(l_objs_processed_cur < l_objs_processed_tmp) { dap_string_append_printf(l_str_tmp, "New event created, removed datum 0x%s from mempool \n", @@ -2346,7 +2348,6 @@ int com_token_decl(int argc, char ** argv, char ** a_str_reply) } if(dap_chain_global_db_gr_set(dap_strdup(l_key_str), (uint8_t *) l_datum, l_datum_size, l_gdb_group_mempool)) { - s_net_set_go_sync(l_net); dap_chain_node_cli_set_reply_text(a_str_reply, "datum %s with token %s is placed in datum pool ", l_key_str, l_ticker); DAP_DELETE(l_datum); @@ -2561,7 +2562,6 @@ int com_token_emit(int argc, char ** argv, char ** str_reply) // Add to mempool emission token if(dap_chain_global_db_gr_set(dap_strdup(l_key_str), (uint8_t *) l_datum_emission, l_datum_emission_size , l_gdb_group_mempool_emission)) { - s_net_set_go_sync(l_net); str_reply_tmp = dap_strdup_printf("datum emission %s is placed in datum pool ", l_key_str); DAP_DELETE(l_key_str); } @@ -2618,7 +2618,6 @@ int com_token_emit(int argc, char ** argv, char ** str_reply) // Add to mempool tx token if(dap_chain_global_db_gr_set(dap_strdup(l_key_str), l_datum_tx, l_datum_tx_size , l_gdb_group_mempool_base_tx)) { - s_net_set_go_sync(l_net); dap_chain_node_cli_set_reply_text(str_reply, "%s\ndatum tx %s is placed in datum pool ", str_reply_tmp, l_key_str); DAP_DELETE(l_key_str);