Make backend more robust, to prevent 'stuck' workunits. Now

transitioner will not sent the transition_time to INT_MAX
UNLESS a canonical result has been found.  Otherwise it is
set to MAX(ten days, 1.5*delay_bound) in the future.  This
ensures that the transition will 'see' the workunit again
if no canonical result has been found.

svn path=/trunk/boinc/; revision=10185
This commit is contained in:
Bruce Allen 2006-05-23 06:08:55 +00:00
parent 2e6cccb6ff
commit 55d1ad6199
2 changed files with 24 additions and 1 deletions

View File

@ -4961,3 +4961,15 @@ David 23 May 2006
client/
client_state.C
Bruce 23 May 2006
- Make backend more robust, to prevent 'stuck' workunits. Now
transitioner will not sent the transition_time to INT_MAX
UNLESS a canonical result has been found. Otherwise it is
set to MAX(ten days, 1.5*delay_bound) in the future. This
ensures that the transition will 'see' the workunit again
if no canonical result has been found.
sched/
transitioner.C

View File

@ -475,7 +475,18 @@ int handle_wu(
// compute next transition time = minimum timeout of in-progress results
//
wu_item.transition_time = INT_MAX;
if (wu_item.canonical_resultid) {
wu_item.transition_time = INT_MAX;
} else {
// If there is no canonical result, make sure that the transitioner will 'see'
// this WU again. In principle this is NOT needed, but it is one way to make
// the BOINC back-end more robust.
//
const int ten_days = 10*86400;
int long_delay = 1.5*wu_item.delay_bound;
wu_item.transition_time = (long_delay > ten_days) ? long_delay : ten_days;
wu_item.transition_time += time(0);
}
for (i=0; i<items.size(); i++) {
TRANSITIONER_ITEM& res_item = items[i];
if (res_item.res_id) {