diff options
author | Kostyantyn Ovechko <fastinetserver@gmail.com> | 2010-07-17 16:02:57 +0300 |
---|---|---|
committer | Kostyantyn Ovechko <fastinetserver@gmail.com> | 2010-07-17 16:02:57 +0300 |
commit | 50f21da7e859d3dd66af60adc53c0f17a4cb86fe (patch) | |
tree | 9359a914dd90b9cead141b975f351c7a9911949a | |
parent | Add options from tuiclient.conf file (diff) | |
download | idfetch-50f21da7e859d3dd66af60adc53c0f17a4cb86fe.tar.gz idfetch-50f21da7e859d3dd66af60adc53c0f17a4cb86fe.tar.bz2 idfetch-50f21da7e859d3dd66af60adc53c0f17a4cb86fe.zip |
Implement check if distfile is already in the proxy-fetcher's queue. If so don't add it.
-rw-r--r-- | segget/distfile.cpp | 6 | ||||
-rw-r--r-- | segget/distfile.h | 14 | ||||
-rw-r--r-- | segget/network1_mirrors.conf | 5 | ||||
-rw-r--r-- | segget/pkg.cpp | 47 | ||||
-rw-r--r-- | segget/pkg.h | 7 | ||||
-rw-r--r-- | segget/proxyfetcher.cpp | 2 |
6 files changed, 67 insertions, 14 deletions
diff --git a/segget/distfile.cpp b/segget/distfile.cpp index 43d3641..49829a5 100644 --- a/segget/distfile.cpp +++ b/segget/distfile.cpp @@ -401,15 +401,17 @@ int Tdistfile::provide_segment(CURLM* cm, uint connection_num, uint seg_num){ // request from proxy fethcer status=request(best_proxy_fetcher_network_num, json_data); debug("Trying to dowload distfile"+name+" via proxy_fetcher. status="+toString(status)); - if (status==DPROXY_DOWNLOADED){ + if (status==R_DOWNLOADED){ // start download from the proxy_fetcher debug(" So best proxy_fetcher_network is network#:"+toString(best_proxy_fetcher_network_num)); // BEWARE -- CORRECT FOLLOWING LINES !!!!!!!!!!! // TO-DO: start download from proxy_fether mirrors // return choose_best_mirror(cm, connection_num, best_remote_network_num, seg_num); +// TO-DO: replace return 0 by result=start_downloading_segment_from_proxy_fetcher_mirror(); + return 0; } //return - don't switch to low priority networks - return R_ADDED_TO_PROXY_QUEUE; + return status; }else{ // remote_mirrors_go_third if (best_remote_network_num!=-1){ diff --git a/segget/distfile.h b/segget/distfile.h index d97de3e..134ae74 100644 --- a/segget/distfile.h +++ b/segget/distfile.h @@ -72,10 +72,16 @@ using namespace std; typedef unsigned int uint; -#define R_DOWNLOAD_STARTED 0 -#define R_ADDED_TO_PROXY_QUEUE 100 -#define R_WAIT_FOR_LOCAL_MIRRORS 101 -#define R_NO_FREE_NETWORK_CONNECTION_FOUND 102 +#define R_ERROR_ADDING_TO_PROXY_QUEUE 1 +#define R_ADDED_TO_PROXY_QUEUE 100 +#define R_ALREADY_WAS_IN_QUEUE 101 +#define R_WAITING 102 +#define R_DOWNLOAD_STARTED 103 +#define R_DOWNLOADING 104 +#define R_FAILED 105 +#define R_DOWNLOADED 106 +#define R_WAIT_FOR_LOCAL_MIRRORS 107 +#define R_NO_FREE_NETWORK_CONNECTION_FOUND 108 enum Tdistfile_status{ DNEW, diff --git a/segget/network1_mirrors.conf b/segget/network1_mirrors.conf index 4164689..7628506 100644 --- a/segget/network1_mirrors.conf +++ b/segget/network1_mirrors.conf @@ -1,4 +1 @@ -ftp://192.168.56.11/ -ftp://192.168.56.12/ -ftp://192.168.56.13/ -ftp://192.168.56.14/
\ No newline at end of file +http://192.168.0.1/
\ No newline at end of file diff --git a/segget/pkg.cpp b/segget/pkg.cpp index bf8daf8..f60f98e 100644 --- a/segget/pkg.cpp +++ b/segget/pkg.cpp @@ -28,15 +28,58 @@ Tpkg **Ppkg_array; Tpkg proxy_fetcher_pkg; -void Tpkg::push_back_distfile(json_object* json_distfile){ + +//#define R_DOWNLOAD_STARTED 0 +//#define R_ADDED_TO_PROXY_QUEUE 100 +//#define R_ALREADY_WAS_IN_QUEUE 101 +//#define R_WAIT_FOR_LOCAL_MIRRORS 102 +//#define R_NO_FREE_NETWORK_CONNECTION_FOUND 103 +//#define R_ERROR_ADDING_TO_PROXY_QUEUE 200 + +int Tpkg::push_back_distfile(json_object* json_obj_distfile){ try{ distfile_count++; Tdistfile * Pcur_distfile=new Tdistfile(); Pdistfile_list.push_back(Pcur_distfile); - Pcur_distfile->load_distfile_from_json(json_distfile); + Pcur_distfile->load_distfile_from_json(json_obj_distfile); + + string distfile_name=json_object_get_string(json_object_object_get(json_obj_distfile,"name")); + debug("PROXY_FETCHER: Added Distfile: "+distfile_name+" to proxy-fetcher's queue"); + return R_ADDED_TO_PROXY_QUEUE; + }catch(...){ + error_log("Error in pkg.cpp: pushback_distfile()"); + return R_ERROR_ADDING_TO_PROXY_QUEUE; + } +} + +int Tpkg::try_adding_distfile_to_proxy_fetchers_queue(json_object* json_obj_distfile){ + string distfile_name; + try{ + distfile_name=json_object_get_string(json_object_object_get(json_obj_distfile,"name")); + for (ulong distfile_num=0; distfile_num<distfile_count; distfile_num++){ + if (Pdistfile_list[distfile_num]->name==distfile_name){ + switch (Pdistfile_list[distfile_num]->status){ + case DDOWNLOADED: { + debug("PROXY_FETCHER: Distfile: "+distfile_name+" was downloaded"); + return R_DOWNLOADED; + }; + case DFAILED:{ + debug("PROXY_FETCHER: Failed to download distfile: "+distfile_name); + return R_FAILED; + } + default:{ + debug("PROXY_FETCHER: Distfile: "+distfile_name+" was already in queue"); + return R_ALREADY_WAS_IN_QUEUE; + } + } + } + } + return push_back_distfile(json_obj_distfile); }catch(...){ error_log("Error in pkg.cpp: pushback_distfile()"); } + debug("PROXY_FETCHER: Error adding Distfile: "+distfile_name+" to proxy-fetcher's queue"); + return R_ERROR_ADDING_TO_PROXY_QUEUE; } diff --git a/segget/pkg.h b/segget/pkg.h index a47033f..c858a72 100644 --- a/segget/pkg.h +++ b/segget/pkg.h @@ -37,6 +37,10 @@ using namespace std; typedef unsigned int uint; typedef Tdistfile* Pdistfile; +#define Q_ADDED_TO_QUEUE 0 +#define Q_ALREADY_EXISTS 1 +#define Q_ERROR 100 + class Tpkg{ public: vector<Pdistfile> Pdistfile_list; @@ -53,7 +57,8 @@ class Tpkg{ Tpkg(const Tpkg &L); // copy constructor Tpkg & operator=(const Tpkg &L); ~Tpkg(); - void push_back_distfile(json_object* json_distfile); + int push_back_distfile(json_object* json_obj_distfile); + int try_adding_distfile_to_proxy_fetchers_queue(json_object* json_obj_distfile); void load_pkg_from_json(json_object* json_obj_pkg); }; diff --git a/segget/proxyfetcher.cpp b/segget/proxyfetcher.cpp index 3a87730..aededc5 100644 --- a/segget/proxyfetcher.cpp +++ b/segget/proxyfetcher.cpp @@ -97,7 +97,7 @@ void *run_proxy_fetcher_server(void * ){ // debug("serving client on fd"+toString(fd)); string recv_msg=buffer; error_log("Received a msg from the client:"+recv_msg); - proxy_fetcher_pkg.push_back_distfile(json_tokener_parse(buffer)); + proxy_fetcher_pkg.try_adding_distfile_to_proxy_fetchers_queue(json_tokener_parse(buffer)); } } } |