summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKostyantyn Ovechko <fastinetserver@gmail.com>2010-07-04 22:23:16 +0300
committerKostyantyn Ovechko <fastinetserver@gmail.com>2010-07-04 22:23:16 +0300
commit10cdc65262f096a1264b47a1eb493eeec4004a21 (patch)
tree986f68bd8756ffe64bbff393a11b8a5cf9642490
parentAdd option [provide_mirror_to_others].provide_mirror_files_restrict_list_on t... (diff)
downloadidfetch-10cdc65262f096a1264b47a1eb493eeec4004a21.tar.gz
idfetch-10cdc65262f096a1264b47a1eb493eeec4004a21.tar.bz2
idfetch-10cdc65262f096a1264b47a1eb493eeec4004a21.zip
Failprove networkbroker.cpp and log errors to error.log
-rw-r--r--segget/connection.cpp1
-rw-r--r--segget/distfile.cpp12
-rw-r--r--segget/networkbroker.cpp27
-rw-r--r--segget/networkbroker.h2
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