locality scheduling: if host resources are inadequate for ANY WU,

assume that they are inadequate for ALL WU.  Without this we will
execute an expensive deterministic search over all WU, looking
for one that is appropriate.  This could be a config option if
desired, or one might add in an extra search step to find WU with
appropriate resources.  But for now this is the cleanest.

svn path=/trunk/boinc/; revision=5999
This commit is contained in:
Bruce Allen 2005-05-02 21:14:24 +00:00
parent ce262dc036
commit f76184d29e
2 changed files with 27 additions and 10 deletions

View File

@ -5965,3 +5965,14 @@ David 2 May 2005
client/
app.C
Bruce 2 May 2005
- locality scheduling: if host resources are inadequate for ANY WU,
assume that they are inadequate for ALL WU. Without this we will
execute an expensive deterministic search over all WU, looking
for one that is appropriate. This could be a config option if
desired, or one might add in an extra search step to find WU with
appropriate resources. But for now this is the cleanest.
sched/
sched_locality.C

View File

@ -27,6 +27,7 @@
#include "boinc_db.h"
#include "error_numbers.h"
#include "util.h"
#include "filesys.h"
#include "main.h"
@ -540,9 +541,9 @@ static int send_results_for_file(
);
boinc_db.commit_transaction();
// if no app version, give up completely
// if no app version or not enough resources, give up completely
//
if (retval_send == ERR_NO_APP_VERSION) return ERR_NO_APP_VERSION;
if (retval_send == ERR_NO_APP_VERSION || retval_send==ERR_INSUFFICIENT_RESOURCE) return retval_send;
// if we couldn't send it for other reason, something's wacky;
// print a message, but keep on looking.
@ -564,6 +565,11 @@ static int send_results_for_file(
"Database inconsistency? possibly_send_result(%d) failed for [RESULT#%d], returning %d\n",
i, result.id, retval_send
);
} else {
log_messages.printf(SCHED_MSG_LOG::DEBUG,
"possibly_send_result [RESULT#%d]: %s\n",
result.id, boincerror(retval_send)
);
}
prev_result = result;
@ -634,7 +640,7 @@ static int send_new_file_work_deterministic_seeded(
filename, nsent, sreq, reply, platform, ss, false
);
if (retval==ERR_NO_APP_VERSION) return retval;
if (retval==ERR_NO_APP_VERSION || retval==ERR_INSUFFICIENT_RESOURCE) return retval;
if (nsent>0 || !reply.work_needed(true)) break;
// construct a name which is lexically greater than the name of any result
@ -733,14 +739,14 @@ static int send_new_file_work(
retval_sow=send_old_work(sreq, reply, platform, ss, start, end);
if (retval_sow==ERR_NO_APP_VERSION) return retval_sow;
if (retval_sow==ERR_NO_APP_VERSION || retval_sow==ERR_INSUFFICIENT_RESOURCE) return retval_sow;
if (reply.work_needed(true)) {
log_messages.printf(SCHED_MSG_LOG::DEBUG,
"send_new_file_work(): try to send from working set\n"
);
retval_snfwws=send_new_file_work_working_set(sreq, reply, platform, ss);
if (retval_snfwws==ERR_NO_APP_VERSION) return retval_snfwws;
if (retval_snfwws==ERR_NO_APP_VERSION || retval_snfwws==ERR_INSUFFICIENT_RESOURCE) return retval_snfwws;
}
@ -816,9 +822,9 @@ static int send_old_work(
"Note: sent NON-LOCALITY result %s\n", result.name
);
}
} else if (retval == ERR_NO_APP_VERSION) {
// if no app version found, give up completely!
return ERR_NO_APP_VERSION;
} else if (retval == ERR_NO_APP_VERSION || retval==ERR_INSUFFICIENT_RESOURCE) {
// if no app version found or no resources, give up completely!
return retval;
}
} else {
@ -876,7 +882,7 @@ void send_work_locality(
if (config.locality_scheduling_send_timeout && sreq.host.n_bwdown>100000) {
int until=time(0)-config.locality_scheduling_send_timeout;
int retval_sow=send_old_work(sreq, reply, platform, ss, INT_MIN, until);
if (retval_sow==ERR_NO_APP_VERSION) return;
if (retval_sow==ERR_NO_APP_VERSION || retval_sow==ERR_INSUFFICIENT_RESOURCE) return;
}
// send work for existing files
@ -891,7 +897,7 @@ void send_work_locality(
fi.name, nsent, sreq, reply, platform, ss, false
);
if (retval_srff==ERR_NO_APP_VERSION) return;
if (retval_srff==ERR_NO_APP_VERSION || retval_srff==ERR_INSUFFICIENT_RESOURCE) return;
// if we couldn't send any work for this file, and we STILL need work,
// then it must be that there was no additional work remaining for this