From 13cfc73b3c15826a99a64386643892a3ae7fedf2 Mon Sep 17 00:00:00 2001 From: David Anderson Date: Fri, 8 Jul 2011 19:22:22 +0000 Subject: [PATCH] - client: fix bug related to deselecting resource types in project prefs. Some logic was missing. svn path=/trunk/boinc/; revision=23825 --- checkin_notes | 45 ++++++++++++++++++++++++----------------- client/client_types.cpp | 41 +++++++++++++++++++++---------------- client/client_types.h | 3 --- client/cs_account.cpp | 20 +++++++++--------- client/work_fetch.cpp | 22 +++++++++++--------- 5 files changed, 73 insertions(+), 58 deletions(-) diff --git a/checkin_notes b/checkin_notes index e4a8665e6e..4a499e038c 100644 --- a/checkin_notes +++ b/checkin_notes @@ -3217,15 +3217,15 @@ David 31 May 2011 app_control.cpp David 31 May 2011 - - web: add counts in task list pages + - web: add counts in task list pages - html/ - inc/ - boinc_db.inc - util.inc - result.inc - user/ - results.php + html/ + inc/ + boinc_db.inc + util.inc + result.inc + user/ + results.php Charlie 2 Jun 2011 - MGR: Add SQLite3 v3.7.6.3 source code to Mac XCode project, adding @@ -3543,7 +3543,7 @@ Rom 15 Jun 2011 blankicon.xpm David 15 Jun 2011 - - manager: tweaks to project list + - manager: tweaks to project list clientgui/ ProjectInfoPage.cpp @@ -3663,17 +3663,17 @@ Charlie 20 Jun 2011 client_state.cpp David 21 Jun 2011 - - GUI RPC: restore , elements in CC_STATE + - GUI RPC: restore , elements in CC_STATE for compatibility - - client: copy coprocs to host_info._coprocs at startup - (else GUI RPCs don't have right info) + - client: copy coprocs to host_info._coprocs at startup + (else GUI RPCs don't have right info) - client/ - client_state.cpp - cs_statefile.cpp - lib/ - gui_rpc_client.h - gui_rpc_client_ops.cpp + client/ + client_state.cpp + cs_statefile.cpp + lib/ + gui_rpc_client.h + gui_rpc_client_ops.cpp David 21 Jun 2011 - web: add a web-service interface for remotely submitting, querying @@ -3968,3 +3968,12 @@ Charlie 8 July 2011 BOINCTaskBar.cpp mac/ MacSysMenu.cpp, .h + +David 8 July 2011 + - client: fix bug related to deselecting resource types in project prefs. + Some logic was missing. + + client/ + client_types.cpp,h + cs_account.cpp + work_fetch.cpp diff --git a/client/client_types.cpp b/client/client_types.cpp index a8aef737c6..40e17f8ccf 100644 --- a/client/client_types.cpp +++ b/client/client_types.cpp @@ -140,16 +140,22 @@ void PROJECT::init() { #endif } -void PROJECT::handle_no_rsc_ams(const char* name, bool value) { +static void handle_no_rsc_ams(PROJECT* p, const char* name) { int i = rsc_index(name); if (i < 0) return; - no_rsc_ams[i] = value; + p->no_rsc_ams[i] = true; } -void PROJECT::handle_no_rsc_apps(const char* name, bool value) { +static void handle_no_rsc_pref(PROJECT* p, const char* name) { + int i = rsc_index(name); + if (i<0) return; + p->no_rsc_pref[i] = true; +} + +static void handle_no_rsc_apps(PROJECT* p, const char* name) { int i = rsc_index(name); if (i < 0) return; - no_rsc_apps[i] = value; + p->no_rsc_apps[i] = true; } static bool parse_rsc_param(MIOFILE& in, const char* end_tag, int& rsc_type, double& value) { @@ -283,37 +289,40 @@ int PROJECT::parse_state(MIOFILE& in) { if (parse_double(buf, "", duration_correction_factor)) continue; if (parse_bool(buf, "attached_via_acct_mgr", attached_via_acct_mgr)) continue; if (parse_bool(buf, "no_cpu_apps", btemp)) { - handle_no_rsc_apps("CPU", btemp); + if (btemp) handle_no_rsc_apps(this, "CPU"); continue; } if (parse_bool(buf, "no_cuda_apps", btemp)) { - handle_no_rsc_apps("NVIDIA", btemp); + if (btemp) handle_no_rsc_apps(this, "NVIDIA"); continue; } if (parse_bool(buf, "no_ati_apps", btemp)) { - handle_no_rsc_apps("ATI", btemp); + if (btemp) handle_no_rsc_apps(this, "ATI"); continue; } if (parse_str(buf, "", buf, sizeof(buf))) { - handle_no_rsc_apps(buf, true); + handle_no_rsc_apps(this, buf); continue; } if (parse_bool(buf, "no_cpu_ams", btemp)) { - handle_no_rsc_ams("CPU", btemp); + if (btemp) handle_no_rsc_ams(this, "CPU"); continue; } if (parse_bool(buf, "no_cuda_ams", btemp)) { - handle_no_rsc_ams("NVIDIA", btemp); + if (btemp) handle_no_rsc_ams(this, "NVIDIA"); continue; } if (parse_bool(buf, "no_ati_ams", btemp)) { - handle_no_rsc_ams("ATI", btemp); + if (btemp) handle_no_rsc_ams(this, "ATI"); continue; } if (parse_str(buf, "", buf, sizeof(buf))) { - handle_no_rsc_ams(buf, true); + handle_no_rsc_ams(this, buf); continue; } + if (parse_str(buf, "", buf, sizeof(buf))) { + handle_no_rsc_pref(this, buf); + } // backwards compat - old state files had ams_resource_share = 0 if (parse_double(buf, "", ams_resource_share)) continue; @@ -459,6 +468,9 @@ int PROJECT::write_state(MIOFILE& out, bool gui_rpc) { if (no_rsc_apps[j]) { out.printf(" %s\n", rsc_name(j)); } + if (no_rsc_pref[j]) { + out.printf(" %s\n", rsc_name(j)); + } } if (ams_resource_share >= 0) { out.printf(" %f\n", @@ -485,11 +497,6 @@ int PROJECT::write_state(MIOFILE& out, bool gui_rpc) { upload_backoff.next_xfer_time - gstate.now ); } - for (int j=0; j%s\n", rsc_name(j)); - } - } if (strlen(host_venue)) { out.printf(" %s\n", host_venue); } diff --git a/client/client_types.h b/client/client_types.h index fd4e36456c..70b5ae2d86 100644 --- a/client/client_types.h +++ b/client/client_types.h @@ -446,9 +446,6 @@ struct PROJECT : PROJ_AM { int parse_account_file(); int parse_state(MIOFILE&); int write_state(MIOFILE&, bool gui_rpc=false); - void handle_no_rsc_ams(const char*, bool); - void handle_no_rsc_apps(const char*, bool); - void handle_no_rsc_pref(const char*, bool); // statistic of the last x days std::vector statistics; diff --git a/client/cs_account.cpp b/client/cs_account.cpp index 84f80dbe66..d07d7dec11 100644 --- a/client/cs_account.cpp +++ b/client/cs_account.cpp @@ -85,10 +85,10 @@ int PROJECT::write_account_file() { return 0; } -void PROJECT::handle_no_rsc_pref(const char* name, bool value) { +void handle_no_rsc_pref(PROJECT* p, const char* name) { int i = rsc_index(name); if (i < 0) return; - no_rsc_pref[i] = value; + p->no_rsc_pref[i] = true; } // parse an account_*.xml file, ignoring elements @@ -127,19 +127,19 @@ int PROJECT::parse_account(FILE* in) { } else if (parse_str(buf, "", authenticator, sizeof(authenticator))) continue; else if (parse_double(buf, "", resource_share)) continue; else if (parse_bool(buf, "no_cpu", btemp)) { - handle_no_rsc_pref("CPU", btemp); + if (btemp) handle_no_rsc_pref(this, "CPU"); continue; } else if (parse_bool(buf, "no_cuda", btemp)) { - handle_no_rsc_pref("NVIDIA", btemp); + if (btemp) handle_no_rsc_pref(this, "NVIDIA"); continue; } else if (parse_bool(buf, "no_ati", btemp)) { - handle_no_rsc_pref("ATI", btemp); + if (btemp) handle_no_rsc_pref(this, "ATI"); continue; } else if (parse_str(buf, "no_rsc", buf2, sizeof(buf2))) { - handle_no_rsc_pref(buf2, true); + handle_no_rsc_pref(this, buf2); continue; } else if (parse_str(buf, "", project_name, sizeof(project_name))) continue; @@ -223,19 +223,19 @@ int PROJECT::parse_account_file_venue() { continue; } else if (parse_bool(buf, "no_cpu", btemp)) { - handle_no_rsc_pref("CPU", btemp); + if (btemp) handle_no_rsc_pref(this, "CPU"); continue; } else if (parse_bool(buf, "no_cuda", btemp)) { - handle_no_rsc_pref("NVIDIA", btemp); + if (btemp) handle_no_rsc_pref(this, "NVIDIA"); continue; } else if (parse_bool(buf, "no_ati", btemp)) { - handle_no_rsc_pref("ATI", btemp); + if (btemp) handle_no_rsc_pref(this, "ATI"); continue; } else if (parse_str(buf, "no_rsc", buf2, sizeof(buf2))) { - handle_no_rsc_pref(buf2, true); + handle_no_rsc_pref(this, buf2); continue; } else { diff --git a/client/work_fetch.cpp b/client/work_fetch.cpp index 2f2d915e0e..209f505083 100644 --- a/client/work_fetch.cpp +++ b/client/work_fetch.cpp @@ -68,6 +68,7 @@ static const char* criterion_name(int criterion) { inline bool dont_fetch(PROJECT* p, int rsc_type) { if (p->no_rsc_pref[rsc_type]) return true; if (p->no_rsc_apps[rsc_type]) return true; + if (p->no_rsc_ams[rsc_type]) return true; return false; } @@ -97,8 +98,7 @@ inline bool has_coproc_app(PROJECT* p, int rsc_type) { /////////////// RSC_PROJECT_WORK_FETCH /////////////// bool RSC_PROJECT_WORK_FETCH::compute_may_have_work(PROJECT* p, int rsc_type) { - if (p->no_rsc_pref[rsc_type]) return false; - if (p->no_rsc_apps[rsc_type]) return false; + if (dont_fetch(p, rsc_type)) return false; if (p->rsc_defer_sched[rsc_type]) return false; return (backoff_time < gstate.now); } @@ -370,6 +370,8 @@ if (use_rec) { // don't request anything if project is overworked or backed off. // void RSC_WORK_FETCH::set_request(PROJECT* p, bool allow_overworked) { + if (dont_fetch(p, rsc_type)) return; + // if backup project, fetch 1 job per idle instance // if (p->resource_share == 0) { @@ -429,14 +431,13 @@ void RSC_WORK_FETCH::print_state(const char* name) { PROJECT* p = gstate.projects[i]; if (p->non_cpu_intensive) continue; RSC_PROJECT_WORK_FETCH& pwf = project_state(p); - bool blocked_by_prefs = false, no_apps = false; - - if (p->no_rsc_pref[rsc_type]) blocked_by_prefs = true; - if (p->no_rsc_apps[rsc_type]) no_apps = true; + bool no_rsc_pref = p->no_rsc_pref[rsc_type]; + bool no_rsc_apps = p->no_rsc_apps[rsc_type]; + bool no_rsc_ams = p->no_rsc_ams[rsc_type]; double bt = pwf.backoff_time>gstate.now?pwf.backoff_time-gstate.now:0; if (use_rec) { msg_printf(p, MSG_INFO, - "[work_fetch] %s: fetch share %.2f rec %.5f prio %.5f backoff dt %.2f int %.2f%s%s%s%s%s%s%s", + "[work_fetch] %s: fetch share %.2f rec %.5f prio %.5f backoff dt %.2f int %.2f%s%s%s%s%s%s%s%s", name, pwf.fetchable_share, p->pwf.rec, project_priority(p), bt, pwf.backoff_interval, p->suspended_via_gui?" (susp via GUI)":"", @@ -444,8 +445,9 @@ if (use_rec) { p->min_rpc_time > gstate.now?" (comm deferred)":"", p->dont_request_more_work?" (no new tasks)":"", p->too_many_uploading_results?" (too many uploads)":"", - blocked_by_prefs?" (blocked by prefs)":"", - no_apps?" (no apps)":"" + no_rsc_pref?" (blocked by prefs)":"", + no_rsc_apps?" (no apps)":"", + no_rsc_ams?" (blocked by account manager)":"" ); } else { msg_printf(p, MSG_INFO, @@ -458,7 +460,7 @@ if (use_rec) { p->dont_request_more_work?" (no new tasks)":"", pwf.overworked()?" (overworked)":"", p->too_many_uploading_results?" (too many uploads)":"", - blocked_by_prefs?" (blocked by prefs)":"" + no_rsc_pref?" (blocked by prefs)":"" ); } }