diff options
author | Kostyantyn Ovechko <fastinetserver@gmail.com> | 2010-07-04 22:23:16 +0300 |
---|---|---|
committer | Kostyantyn Ovechko <fastinetserver@gmail.com> | 2010-07-04 22:23:16 +0300 |
commit | 10cdc65262f096a1264b47a1eb493eeec4004a21 (patch) | |
tree | 986f68bd8756ffe64bbff393a11b8a5cf9642490 | |
parent | Add option [provide_mirror_to_others].provide_mirror_files_restrict_list_on t... (diff) | |
download | idfetch-10cdc65262f096a1264b47a1eb493eeec4004a21.tar.gz idfetch-10cdc65262f096a1264b47a1eb493eeec4004a21.tar.bz2 idfetch-10cdc65262f096a1264b47a1eb493eeec4004a21.zip |
Failprove networkbroker.cpp and log errors to error.log
-rw-r--r-- | segget/connection.cpp | 1 | ||||
-rw-r--r-- | segget/distfile.cpp | 12 | ||||
-rw-r--r-- | segget/networkbroker.cpp | 27 | ||||
-rw-r--r-- | segget/networkbroker.h | 2 |
4 files changed, 29 insertions, 13 deletions
diff --git a/segget/connection.cpp b/segget/connection.cpp index 6cfca24..48809ea 100644 --- a/segget/connection.cpp +++ b/segget/connection.cpp @@ -54,6 +54,7 @@ void Tconnection::stop(uint connection_result){ Tmirror *Pcurr_mirror; if (network_array[network_num].use_own_mirror_list_only_on){ Pcurr_mirror=&network_array[network_num].benchmarked_mirror_list[mirror_num]; + prnt_distfile->network_distfile_brokers_array[network_num].mirror_fails_vector[mirror_num]=true; // find_mirror(strip_mirror_name(segment->url)); }else{ Pcurr_mirror=find_mirror(strip_mirror_name(segment->url)); diff --git a/segget/distfile.cpp b/segget/distfile.cpp index 7e637c6..ba832db 100644 --- a/segget/distfile.cpp +++ b/segget/distfile.cpp @@ -217,15 +217,17 @@ int Tdistfile::provide_segment(CURLM* cm, uint connection_num, uint seg_num){ debug(" network_priority="+toString(network_array[network_num].priority)); if (network_array[network_num].use_own_mirror_list_only_on){ if (network_array[network_num].has_free_connections()){ + if (network_distfile_brokers_array[network_num].some_mirrors_have_NOT_failed_yet()){ // debug(" Allowed network#:"+toString(network_num)); - if ((best_local_network_num==-1) - or (network_array[best_local_network_num].active_connections_num>network_array[network_num].active_connections_num)){ - best_local_network_num=network_num; - debug(" Replace best LOCAL network to network#:"+toString(network_num)); + if ((best_local_network_num==-1) + or (network_array[best_local_network_num].active_connections_num>network_array[network_num].active_connections_num)){ + best_local_network_num=network_num; + debug(" Replace best LOCAL network to network#:"+toString(network_num)); + } } }else{ if (network_array[network_num].only_local_when_possible){ - if (!network_distfile_brokers_array[network_num].have_all_mirrors_failed()){ + if (network_distfile_brokers_array[network_num].some_mirrors_have_NOT_failed_yet()){ allow_remote_mirrors=false; debug("Network"+toString(network_num)+" forbids using remote mirrors because not all local mirrors have failed"); } diff --git a/segget/networkbroker.cpp b/segget/networkbroker.cpp index 4e139c3..7ac083d 100644 --- a/segget/networkbroker.cpp +++ b/segget/networkbroker.cpp @@ -26,14 +26,27 @@ #include "networkbroker.h" void Tnetwork_distfile_broker::init(ulong network_number){ - network_num=network_number; - if (network_array[network_num].use_own_mirror_list_only_on){ - // create flags for each mirror from this network - mirror_fails_vector.insert(mirror_fails_vector.begin(),network_array[network_num].benchmarked_mirror_list.size(),false); + try{ + network_num=network_number; + if (network_array[network_num].use_own_mirror_list_only_on){ + // create flags for each mirror from this network + mirror_fails_vector.insert(mirror_fails_vector.begin(),network_array[network_num].benchmarked_mirror_list.size(),false); + } + }catch(...){ + error_log("Error in networkbroker.cpp: init()"); } } -bool Tnetwork_distfile_broker::have_all_mirrors_failed(){ - debug(" get_allowed_status_for_network_num="+toString(network_num)); - return network_array[network_num].has_free_connections(); +bool Tnetwork_distfile_broker::some_mirrors_have_NOT_failed_yet(){ + try{ + for (ulong cur_mirror_num=0; cur_mirror_num<mirror_fails_vector.size();cur_mirror_num++){ + if (! mirror_fails_vector[cur_mirror_num]){ + return true; + } + } + return false; + }catch(...){ + error_log("Error in networkbroker.cpp: init()"); + return false; + } }
\ No newline at end of file diff --git a/segget/networkbroker.h b/segget/networkbroker.h index e8db32b..05b9449 100644 --- a/segget/networkbroker.h +++ b/segget/networkbroker.h @@ -36,7 +36,7 @@ class Tnetwork_distfile_broker{ network_num(0) {}; void init(ulong network_number); - bool have_all_mirrors_failed(); + bool some_mirrors_have_NOT_failed_yet(); }; #endif |