From e3cc73b0d38043cc3115047360dcbb58581c857a Mon Sep 17 00:00:00 2001 From: "roman.padenkov" <roman.padenkov@demlabs.net> Date: Fri, 12 May 2023 18:50:13 +0700 Subject: [PATCH 1/7] begin --- modules/net/dap_chain_net_balancer.c | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/net/dap_chain_net_balancer.c b/modules/net/dap_chain_net_balancer.c index 0254a46f46..e119ccb1b3 100644 --- a/modules/net/dap_chain_net_balancer.c +++ b/modules/net/dap_chain_net_balancer.c @@ -57,6 +57,7 @@ dap_chain_node_info_t *s_balancer_issue_link(const char *a_net_name) } if (!l_node_candidate->hdr.ext_addr_v4.s_addr || !l_node_candidate->hdr.ext_port) return NULL; + //if (l_node_candidate->hdr.cell_id) dap_chain_node_info_t *l_node_info = DAP_NEW_Z(dap_chain_node_info_t); memcpy(l_node_info, l_node_candidate, sizeof(dap_chain_node_info_t)); dap_global_db_objs_delete(l_objs, l_nodes_count); -- GitLab From 320e3db713a127747ef14d4b4e86fb4f2e9070ce Mon Sep 17 00:00:00 2001 From: "roman.padenkov" <roman.padenkov@demlabs.net> Date: Tue, 16 May 2023 10:14:27 +0700 Subject: [PATCH 2/7] edit balancer --- modules/net/dap_chain_net_balancer.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/modules/net/dap_chain_net_balancer.c b/modules/net/dap_chain_net_balancer.c index e119ccb1b3..33bee6e957 100644 --- a/modules/net/dap_chain_net_balancer.c +++ b/modules/net/dap_chain_net_balancer.c @@ -30,6 +30,9 @@ along with any CellFrame SDK based project. If not, see <http://www.gnu.org/lic dap_chain_node_info_t *s_balancer_issue_link(const char *a_net_name) { + dap_config_t *l_cfg=NULL; + dap_string_t *l_cfg_path = dap_string_new("network/"); + dap_string_append(l_cfg_path,a_net_name); dap_chain_net_t *l_net = dap_chain_net_by_name(a_net_name); if (l_net == NULL) { uint16_t l_nets_count; @@ -40,6 +43,24 @@ dap_chain_node_info_t *s_balancer_issue_link(const char *a_net_name) } l_net = l_nets[rand() % l_nets_count]; } + if( ( l_cfg = dap_config_open ( l_cfg_path->str ) ) == NULL ) { + log_it(L_ERROR,"Can't open default network config"); + dap_string_free(l_cfg_path,true); + } else { + uint16_t l_seed_nodes_hostnames_len =0; + char ** l_seed_nodes_hostnames = dap_config_get_array_str( l_cfg , "general" ,"seed_nodes_hostnames" + ,&l_seed_nodes_hostnames_len); + struct sockaddr l_sa = {}; + for(size_t i = 0;i<l_seed_nodes_hostnames_len;i++) + { + if(!dap_net_resolve_host(l_seed_nodes_hostnames[i], AF_INET, &l_sa)) + { + struct in_addr *l_res = (struct in_addr *)&l_sa; + + } + } + + } // get nodes list from global_db dap_global_db_obj_t *l_objs = NULL; size_t l_nodes_count = 0; @@ -57,7 +78,11 @@ dap_chain_node_info_t *s_balancer_issue_link(const char *a_net_name) } if (!l_node_candidate->hdr.ext_addr_v4.s_addr || !l_node_candidate->hdr.ext_port) return NULL; - //if (l_node_candidate->hdr.cell_id) + + if (l_node_candidate->hdr.cell_id) + if (dap_global_db_del_sync(a_net->pub.gdb_nodes, l_objs[i].key) !=0 ) + dap_config_close(l_cfg); + dap_chain_node_info_t *l_node_info = DAP_NEW_Z(dap_chain_node_info_t); memcpy(l_node_info, l_node_candidate, sizeof(dap_chain_node_info_t)); dap_global_db_objs_delete(l_objs, l_nodes_count); -- GitLab From 9f9d00b275c079ce8d485983df66fc9cd7d3c967 Mon Sep 17 00:00:00 2001 From: "roman.padenkov" <roman.padenkov@demlabs.net> Date: Tue, 16 May 2023 13:21:33 +0700 Subject: [PATCH 3/7] add remove node from gdb --- modules/net/dap_chain_net_balancer.c | 50 +++++++++++++++------------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/modules/net/dap_chain_net_balancer.c b/modules/net/dap_chain_net_balancer.c index 33bee6e957..fc0af1ef4a 100644 --- a/modules/net/dap_chain_net_balancer.c +++ b/modules/net/dap_chain_net_balancer.c @@ -42,7 +42,26 @@ dap_chain_node_info_t *s_balancer_issue_link(const char *a_net_name) return NULL; } l_net = l_nets[rand() % l_nets_count]; + } + // get nodes list from global_db + dap_global_db_obj_t *l_objs = NULL; + size_t l_nodes_count = 0; + size_t l_node_num; + // read all node + l_objs = dap_global_db_get_all_sync(l_net->pub.gdb_nodes, &l_nodes_count); + if (!l_nodes_count || !l_objs) + return NULL; + dap_chain_node_info_t *l_node_candidate; + for (int i = 0; i < 50; i++) { + // 50 tryes for non empty address & port + l_node_num = rand() % l_nodes_count; + l_node_candidate = (dap_chain_node_info_t *)l_objs[l_node_num].value; + if (l_node_candidate->hdr.ext_addr_v4.s_addr && l_node_candidate->hdr.ext_port) + break; } + if (!l_node_candidate->hdr.ext_addr_v4.s_addr || !l_node_candidate->hdr.ext_port) + return NULL; + //dell cfg seed from db if( ( l_cfg = dap_config_open ( l_cfg_path->str ) ) == NULL ) { log_it(L_ERROR,"Can't open default network config"); dap_string_free(l_cfg_path,true); @@ -56,33 +75,16 @@ dap_chain_node_info_t *s_balancer_issue_link(const char *a_net_name) if(!dap_net_resolve_host(l_seed_nodes_hostnames[i], AF_INET, &l_sa)) { struct in_addr *l_res = (struct in_addr *)&l_sa; - + if(l_node_candidate->hdr.ext_addr_v4.s_addr == l_res->s_addr) + { + dap_global_db_del_sync(l_net->pub.gdb_nodes,l_objs[l_node_num].key); + if(l_nodes_count>1) + return NULL; + } } } - } - // get nodes list from global_db - dap_global_db_obj_t *l_objs = NULL; - size_t l_nodes_count = 0; - // read all node - l_objs = dap_global_db_get_all_sync(l_net->pub.gdb_nodes, &l_nodes_count); - if (!l_nodes_count || !l_objs) - return NULL; - dap_chain_node_info_t *l_node_candidate; - for (int i = 0; i < 50; i++) { - // 50 tryes for non empty address & port - size_t l_node_num = rand() % l_nodes_count; - l_node_candidate = (dap_chain_node_info_t *)l_objs[l_node_num].value; - if (l_node_candidate->hdr.ext_addr_v4.s_addr && l_node_candidate->hdr.ext_port) - break; - } - if (!l_node_candidate->hdr.ext_addr_v4.s_addr || !l_node_candidate->hdr.ext_port) - return NULL; - - if (l_node_candidate->hdr.cell_id) - if (dap_global_db_del_sync(a_net->pub.gdb_nodes, l_objs[i].key) !=0 ) - dap_config_close(l_cfg); - + dap_config_close(l_cfg); dap_chain_node_info_t *l_node_info = DAP_NEW_Z(dap_chain_node_info_t); memcpy(l_node_info, l_node_candidate, sizeof(dap_chain_node_info_t)); dap_global_db_objs_delete(l_objs, l_nodes_count); -- GitLab From ffdeee98d64ea87976e29df5fa6d1fde8fd68c00 Mon Sep 17 00:00:00 2001 From: "roman.padenkov" <roman.padenkov@demlabs.net> Date: Tue, 16 May 2023 18:58:33 +0700 Subject: [PATCH 4/7] edit balancer, change check seed ip --- modules/net/dap_chain_net.c | 14 +++++++++ modules/net/dap_chain_net_balancer.c | 46 ++++++++++++---------------- modules/net/include/dap_chain_net.h | 3 +- 3 files changed, 35 insertions(+), 28 deletions(-) diff --git a/modules/net/dap_chain_net.c b/modules/net/dap_chain_net.c index e10e6cc409..d801c63f94 100644 --- a/modules/net/dap_chain_net.c +++ b/modules/net/dap_chain_net.c @@ -3074,6 +3074,20 @@ dap_list_t* dap_chain_net_get_node_list(dap_chain_net_t * l_net) return l_node_list; } +/** + * Get nodes list from config file (list of dap_chain_node_addr_t struct) + */ +dap_list_t* dap_chain_net_get_node_list_cfg(dap_chain_net_t * a_net) +{ + dap_list_t *l_node_list = NULL; + dap_chain_net_pvt_t *l_pvt_net = PVT(a_net); + for(size_t i=0; i < l_pvt_net->seed_aliases_count;i++) + { + l_node_list = dap_list_append(l_node_list, &l_pvt_net->node_info[i]); + } + return l_node_list; +} + /** * @brief dap_chain_net_set_flag_sync_from_zero * @param a_net diff --git a/modules/net/dap_chain_net_balancer.c b/modules/net/dap_chain_net_balancer.c index fc0af1ef4a..eec0e723b5 100644 --- a/modules/net/dap_chain_net_balancer.c +++ b/modules/net/dap_chain_net_balancer.c @@ -30,9 +30,7 @@ along with any CellFrame SDK based project. If not, see <http://www.gnu.org/lic dap_chain_node_info_t *s_balancer_issue_link(const char *a_net_name) { - dap_config_t *l_cfg=NULL; - dap_string_t *l_cfg_path = dap_string_new("network/"); - dap_string_append(l_cfg_path,a_net_name); + dap_list_t *l_node_list = NULL; dap_chain_net_t *l_net = dap_chain_net_by_name(a_net_name); if (l_net == NULL) { uint16_t l_nets_count; @@ -42,7 +40,7 @@ dap_chain_node_info_t *s_balancer_issue_link(const char *a_net_name) return NULL; } l_net = l_nets[rand() % l_nets_count]; - } + } // get nodes list from global_db dap_global_db_obj_t *l_objs = NULL; size_t l_nodes_count = 0; @@ -51,40 +49,34 @@ dap_chain_node_info_t *s_balancer_issue_link(const char *a_net_name) l_objs = dap_global_db_get_all_sync(l_net->pub.gdb_nodes, &l_nodes_count); if (!l_nodes_count || !l_objs) return NULL; + l_node_list = dap_chain_net_get_node_list_cfg(l_net); dap_chain_node_info_t *l_node_candidate; for (int i = 0; i < 50; i++) { // 50 tryes for non empty address & port + bool f_continue = false; l_node_num = rand() % l_nodes_count; l_node_candidate = (dap_chain_node_info_t *)l_objs[l_node_num].value; if (l_node_candidate->hdr.ext_addr_v4.s_addr && l_node_candidate->hdr.ext_port) - break; - } - if (!l_node_candidate->hdr.ext_addr_v4.s_addr || !l_node_candidate->hdr.ext_port) - return NULL; - //dell cfg seed from db - if( ( l_cfg = dap_config_open ( l_cfg_path->str ) ) == NULL ) { - log_it(L_ERROR,"Can't open default network config"); - dap_string_free(l_cfg_path,true); - } else { - uint16_t l_seed_nodes_hostnames_len =0; - char ** l_seed_nodes_hostnames = dap_config_get_array_str( l_cfg , "general" ,"seed_nodes_hostnames" - ,&l_seed_nodes_hostnames_len); - struct sockaddr l_sa = {}; - for(size_t i = 0;i<l_seed_nodes_hostnames_len;i++) - { - if(!dap_net_resolve_host(l_seed_nodes_hostnames[i], AF_INET, &l_sa)) + if(l_node_list) { - struct in_addr *l_res = (struct in_addr *)&l_sa; - if(l_node_candidate->hdr.ext_addr_v4.s_addr == l_res->s_addr) + for(dap_list_t *node_i = l_node_list;node_i;node_i = node_i->next) { - dap_global_db_del_sync(l_net->pub.gdb_nodes,l_objs[l_node_num].key); - if(l_nodes_count>1) - return NULL; + dap_chain_node_info_t *l_node_cfg = (dap_chain_node_info_t*)node_i->data; + if(l_node_cfg->hdr.ext_addr_v4.s_addr == l_node_candidate->hdr.ext_addr_v4.s_addr) + f_continue = true; } + if(f_continue) + continue; } - } + else + { + break; + } + break; } - dap_config_close(l_cfg); + dap_list_free(l_node_list); + if (!l_node_candidate->hdr.ext_addr_v4.s_addr || !l_node_candidate->hdr.ext_port) + return NULL; dap_chain_node_info_t *l_node_info = DAP_NEW_Z(dap_chain_node_info_t); memcpy(l_node_info, l_node_candidate, sizeof(dap_chain_node_info_t)); dap_global_db_objs_delete(l_objs, l_nodes_count); diff --git a/modules/net/include/dap_chain_net.h b/modules/net/include/dap_chain_net.h index 5f191f9b6c..9cc386aa93 100644 --- a/modules/net/include/dap_chain_net.h +++ b/modules/net/include/dap_chain_net.h @@ -155,7 +155,8 @@ dap_chain_cell_id_t * dap_chain_net_get_cur_cell( dap_chain_net_t * l_net); const char* dap_chain_net_get_type(dap_chain_t *l_chain); dap_list_t* dap_chain_net_get_link_node_list(dap_chain_net_t * l_net, bool a_is_only_cur_cell); -dap_list_t* dap_chain_net_get_node_list(dap_chain_net_t * l_net); +dap_list_t* dap_chain_net_get_node_list(dap_chain_net_t * a_net); +dap_list_t* dap_chain_net_get_node_list_cfg(dap_chain_net_t * a_net); dap_chain_node_role_t dap_chain_net_get_role(dap_chain_net_t * a_net); /** -- GitLab From e79f1edfa265758aa3f2d1c4a7dcb07a6dd6f2df Mon Sep 17 00:00:00 2001 From: "roman.padenkov" <roman.padenkov@demlabs.net> Date: Tue, 16 May 2023 19:55:05 +0700 Subject: [PATCH 5/7] ... --- modules/net/dap_chain_net_balancer.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/modules/net/dap_chain_net_balancer.c b/modules/net/dap_chain_net_balancer.c index eec0e723b5..3e6ccec355 100644 --- a/modules/net/dap_chain_net_balancer.c +++ b/modules/net/dap_chain_net_balancer.c @@ -48,8 +48,13 @@ dap_chain_node_info_t *s_balancer_issue_link(const char *a_net_name) // read all node l_objs = dap_global_db_get_all_sync(l_net->pub.gdb_nodes, &l_nodes_count); if (!l_nodes_count || !l_objs) - return NULL; + return NULL; l_node_list = dap_chain_net_get_node_list_cfg(l_net); + for(i=0;i<l_nodes_count;i++) + { + l_objs_list = dap_list_append(l_objs_list,l_objs[i]); + } + dap_global_db_objs_delete(l_objs, l_nodes_count); dap_chain_node_info_t *l_node_candidate; for (int i = 0; i < 50; i++) { // 50 tryes for non empty address & port -- GitLab From b717b4f07d97c1b902e297b563918c77a7a71282 Mon Sep 17 00:00:00 2001 From: "roman.padenkov" <roman.padenkov@demlabs.net> Date: Wed, 17 May 2023 15:48:04 +0700 Subject: [PATCH 6/7] edit logic balancer --- modules/net/dap_chain_net_balancer.c | 58 +++++++++++++++------------- 1 file changed, 31 insertions(+), 27 deletions(-) diff --git a/modules/net/dap_chain_net_balancer.c b/modules/net/dap_chain_net_balancer.c index 3e6ccec355..cc7a7ed22c 100644 --- a/modules/net/dap_chain_net_balancer.c +++ b/modules/net/dap_chain_net_balancer.c @@ -30,7 +30,7 @@ along with any CellFrame SDK based project. If not, see <http://www.gnu.org/lic dap_chain_node_info_t *s_balancer_issue_link(const char *a_net_name) { - dap_list_t *l_node_list = NULL; + dap_list_t *l_node_list = NULL,*l_objs_list = NULL; dap_chain_net_t *l_net = dap_chain_net_by_name(a_net_name); if (l_net == NULL) { uint16_t l_nets_count; @@ -44,47 +44,51 @@ dap_chain_node_info_t *s_balancer_issue_link(const char *a_net_name) // get nodes list from global_db dap_global_db_obj_t *l_objs = NULL; size_t l_nodes_count = 0; - size_t l_node_num; + size_t l_node_num = 0; // read all node l_objs = dap_global_db_get_all_sync(l_net->pub.gdb_nodes, &l_nodes_count); if (!l_nodes_count || !l_objs) return NULL; l_node_list = dap_chain_net_get_node_list_cfg(l_net); - for(i=0;i<l_nodes_count;i++) + for(size_t i=0;i<l_nodes_count;i++) { - l_objs_list = dap_list_append(l_objs_list,l_objs[i]); + for(dap_list_t *node_i = l_node_list;node_i;node_i = node_i->next) + { + dap_chain_node_info_t *l_node_cfg = (dap_chain_node_info_t*)node_i->data; + dap_chain_node_info_t *l_node_cand = (dap_chain_node_info_t *)l_objs[i].value; + if(l_node_cfg->hdr.ext_addr_v4.s_addr != l_node_cand->hdr.ext_addr_v4.s_addr) + { + l_objs_list = dap_list_append(l_objs_list,l_objs[i].value); + l_node_num++; + break; + } + } } dap_global_db_objs_delete(l_objs, l_nodes_count); + l_nodes_count = l_node_num; dap_chain_node_info_t *l_node_candidate; - for (int i = 0; i < 50; i++) { - // 50 tryes for non empty address & port - bool f_continue = false; - l_node_num = rand() % l_nodes_count; - l_node_candidate = (dap_chain_node_info_t *)l_objs[l_node_num].value; - if (l_node_candidate->hdr.ext_addr_v4.s_addr && l_node_candidate->hdr.ext_port) - if(l_node_list) - { - for(dap_list_t *node_i = l_node_list;node_i;node_i = node_i->next) - { - dap_chain_node_info_t *l_node_cfg = (dap_chain_node_info_t*)node_i->data; - if(l_node_cfg->hdr.ext_addr_v4.s_addr == l_node_candidate->hdr.ext_addr_v4.s_addr) - f_continue = true; - } - if(f_continue) - continue; - } - else - { + if(l_nodes_count) + { + for (int i = 0; i < 50; i++) { + // 50 tryes for non empty address & port + l_node_num = rand() % l_nodes_count; + l_node_candidate = (dap_chain_node_info_t *)dap_list_nth_data(l_objs_list,l_node_num); + if (l_node_candidate->hdr.ext_addr_v4.s_addr && l_node_candidate->hdr.ext_port) break; - } - break; + } } - dap_list_free(l_node_list); + else + l_node_candidate = (dap_chain_node_info_t *)dap_list_nth_data(l_node_list,0); if (!l_node_candidate->hdr.ext_addr_v4.s_addr || !l_node_candidate->hdr.ext_port) + { + dap_list_free(l_node_list); + dap_list_free(l_objs_list); return NULL; + } dap_chain_node_info_t *l_node_info = DAP_NEW_Z(dap_chain_node_info_t); memcpy(l_node_info, l_node_candidate, sizeof(dap_chain_node_info_t)); - dap_global_db_objs_delete(l_objs, l_nodes_count); + dap_list_free(l_objs_list); + dap_list_free(l_node_list); log_it(L_DEBUG, "Network balancer issues ip %s", inet_ntoa(l_node_info->hdr.ext_addr_v4)); return l_node_info; } -- GitLab From 52103345b16d046013ee8035c50ebaa89f5f8a2e Mon Sep 17 00:00:00 2001 From: "roman.padenkov" <roman.padenkov@demlabs.net> Date: Wed, 17 May 2023 17:54:51 +0700 Subject: [PATCH 7/7] ... --- modules/net/dap_chain_net_balancer.c | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/modules/net/dap_chain_net_balancer.c b/modules/net/dap_chain_net_balancer.c index cc7a7ed22c..5851af3429 100644 --- a/modules/net/dap_chain_net_balancer.c +++ b/modules/net/dap_chain_net_balancer.c @@ -56,7 +56,8 @@ dap_chain_node_info_t *s_balancer_issue_link(const char *a_net_name) { dap_chain_node_info_t *l_node_cfg = (dap_chain_node_info_t*)node_i->data; dap_chain_node_info_t *l_node_cand = (dap_chain_node_info_t *)l_objs[i].value; - if(l_node_cfg->hdr.ext_addr_v4.s_addr != l_node_cand->hdr.ext_addr_v4.s_addr) + if(l_node_cand->hdr.ext_addr_v4.s_addr && l_node_cand->hdr.ext_port && + (l_node_cfg->hdr.ext_addr_v4.s_addr != l_node_cand->hdr.ext_addr_v4.s_addr)) { l_objs_list = dap_list_append(l_objs_list,l_objs[i].value); l_node_num++; @@ -69,22 +70,12 @@ dap_chain_node_info_t *s_balancer_issue_link(const char *a_net_name) dap_chain_node_info_t *l_node_candidate; if(l_nodes_count) { - for (int i = 0; i < 50; i++) { - // 50 tryes for non empty address & port - l_node_num = rand() % l_nodes_count; - l_node_candidate = (dap_chain_node_info_t *)dap_list_nth_data(l_objs_list,l_node_num); - if (l_node_candidate->hdr.ext_addr_v4.s_addr && l_node_candidate->hdr.ext_port) - break; - } + l_node_num = rand() % l_nodes_count; + l_node_candidate = (dap_chain_node_info_t *)dap_list_nth_data(l_objs_list,l_node_num); } else l_node_candidate = (dap_chain_node_info_t *)dap_list_nth_data(l_node_list,0); - if (!l_node_candidate->hdr.ext_addr_v4.s_addr || !l_node_candidate->hdr.ext_port) - { - dap_list_free(l_node_list); - dap_list_free(l_objs_list); - return NULL; - } + dap_chain_node_info_t *l_node_info = DAP_NEW_Z(dap_chain_node_info_t); memcpy(l_node_info, l_node_candidate, sizeof(dap_chain_node_info_t)); dap_list_free(l_objs_list); -- GitLab