diff --git a/dap_chain_net.c b/dap_chain_net.c index 89b729b207f8c657b1e5938cdd91d9e2a4bbbf37..fadecee971c861a1f389a47356630411f237a978 100644 --- a/dap_chain_net.c +++ b/dap_chain_net.c @@ -487,7 +487,7 @@ lb_proc_state: // send request dap_chain_node_client_t * l_node_client = NULL, *l_node_client_tmp = NULL; HASH_ITER(hh,PVT(l_net)->links,l_node_client,l_node_client_tmp){ - dap_stream_ch_chain_sync_request_t l_sync_gdb = {{0}}; + dap_stream_ch_chain_sync_request_t l_sync_gdb = { { 0 } }; // Get last timestamp in log l_sync_gdb.id_start = (uint64_t) dap_db_log_get_last_id_remote(l_node_client->remote_node_addr.uint64); // no limit @@ -503,10 +503,13 @@ lb_proc_state: l_chain_cell_id_null.uint64 = dap_chain_net_get_cur_cell(l_net) ? dap_chain_net_get_cur_cell(l_net)->uint64 : 0; log_it(L_DEBUG,"Prepared request to gdb sync from %llu to %llu",l_sync_gdb.id_start,l_sync_gdb.id_end); - size_t l_res = dap_stream_ch_chain_pkt_write( dap_client_get_stream_ch(l_node_client->client, - dap_stream_ch_chain_get_id() ) , - DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNC_GLOBAL_DB, l_net->pub.id, (dap_chain_id_t){{0}} , - l_net->pub.cell_id, &l_sync_gdb, sizeof (l_sync_gdb) ); + // find dap_chain_id_t + dap_chain_t *l_chain = dap_chain_net_get_chain_by_name(l_net, "gdb"); + dap_chain_id_t l_chain_id = l_chain ? l_chain->id : (dap_chain_id_t ) { { 0 } }; + + size_t l_res = dap_stream_ch_chain_pkt_write(dap_client_get_stream_ch(l_node_client->client, dap_stream_ch_chain_get_id()), + DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNC_GLOBAL_DB, l_net->pub.id, l_chain_id, + l_net->pub.cell_id, &l_sync_gdb, sizeof(l_sync_gdb)); if(l_res == 0) { log_it(L_WARNING,"Can't send GDB sync request"); HASH_DEL(PVT(l_net)->links,l_node_client); @@ -520,52 +523,59 @@ lb_proc_state: // TODO add progress info to console int res = dap_chain_node_client_wait(l_node_client, NODE_CLIENT_STATE_SYNCED, timeout_ms); switch (res) { - case -1: - log_it(L_WARNING,"Timeout with link sync"); + case -1: + log_it(L_WARNING,"Timeout with link sync"); break; - case 0: - log_it(L_INFO, "Node sync completed"); + case 0: + log_it(L_INFO, "Node sync completed"); break; - default: - log_it(L_INFO, "Node sync error %d",res); + default: + log_it(L_INFO, "Node sync error %d",res); } } - if ( PVT(l_net)->state_target >= NET_STATE_ONLINE ){ + if(PVT(l_net)->state_target >= NET_STATE_ONLINE){ PVT(l_net)->state = NET_STATE_SYNC_CHAINS; }else { PVT(l_net)->state = NET_STATE_ONLINE; } - } 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:{ dap_chain_node_client_t * l_node_client = NULL, *l_node_client_tmp = NULL; uint8_t l_ch_id = dap_stream_ch_chain_get_id(); // Channel id for global_db sync HASH_ITER(hh,PVT(l_net)->links,l_node_client,l_node_client_tmp){ - dap_chain_t * l_chain = NULL; + dap_chain_t * l_chain = NULL; DL_FOREACH(l_net->pub.chains, l_chain ){ size_t l_lasts_size = 0; dap_chain_atom_ptr_t * l_lasts; dap_chain_atom_iter_t * l_atom_iter = l_chain->callback_atom_iter_create(l_chain); - l_lasts = l_chain->callback_atom_iter_get_lasts(l_atom_iter,&l_lasts_size); - if ( l_lasts ) { - dap_stream_ch_chain_sync_request_t l_request = {{0}}; - dap_hash_fast(l_lasts[0],l_chain->callback_atom_get_size(l_lasts[0]),&l_request.hash_from ); - dap_chain_node_client_send_ch_pkt(l_node_client,l_ch_id, - DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNC_CHAINS, - &l_request,sizeof (l_request) ); + l_lasts = l_chain->callback_atom_iter_get_lasts(l_atom_iter, &l_lasts_size); + if( l_lasts ) { + dap_stream_ch_chain_sync_request_t l_request = { { 0 } }; + dap_hash_fast(l_lasts[0], l_chain->callback_atom_get_size(l_lasts[0]), &l_request.hash_from); + dap_stream_ch_chain_pkt_write(dap_client_get_stream_ch(l_node_client->client, l_ch_id), + DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNC_CHAINS, l_net->pub.id, l_chain->id, + l_net->pub.cell_id, &l_request, sizeof(l_request)); + // + // dap_chain_node_client_send_ch_pkt(l_node_client,l_ch_id, + // DAP_STREAM_CH_CHAIN_PKT_TYPE_SYNC_CHAINS, + // &l_request,sizeof (l_request) ); + // wait for finishing of request int timeout_ms = 120000; // 2 min = 120 sec = 120 000 ms // TODO add progress info to console int l_res = dap_chain_node_client_wait(l_node_client, NODE_CLIENT_STATE_SYNCED, timeout_ms); switch (l_res) { - case -1: - log_it(L_WARNING,"Timeout with link sync"); + case -1: + log_it(L_WARNING,"Timeout with link sync"); break; - case 0: - log_it(L_INFO, "Node sync completed"); + case 0: + log_it(L_INFO, "Node sync completed"); break; - default: - log_it(L_INFO, "Node sync error %d",l_res); + default: + log_it(L_INFO, "Node sync error %d",l_res); } DAP_DELETE( l_lasts ); @@ -578,7 +588,9 @@ lb_proc_state: // end sync, return to online state 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; + } + pthread_mutex_unlock(&PVT(l_net)->state_mutex); + goto lb_proc_state; case NET_STATE_ONLINE: { log_it(L_NOTICE, "State online");