Skip to content
Snippets Groups Projects
Commit 0c0398a4 authored by dmitriy.gerasimov's avatar dmitriy.gerasimov
Browse files

Merge branch 'feature-2595' into 'master'

fixed bug in NET_STATE_SYNC_CHAINS sync

See merge request !23
parents 5dd96ec7 e1983255
No related branches found
No related tags found
2 merge requests!26Master,!23fixed bug in NET_STATE_SYNC_CHAINS sync
......@@ -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");
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment