- scheduler: added (correct this time!) support for

<alt_platform> tags in scheduler requests.
    - file_deleter: add check for -dont_delete_batches 

    sched/
        file_deleter.C
        handle_request.C
        sched_array.C,h
        sched_locality.C,h
        sched_resend.C,h
        sched_send.C,h
        server_types.h

svn path=/trunk/boinc/; revision=12512
This commit is contained in:
David Anderson 2007-04-30 21:19:24 +00:00
parent 9b8a9d8173
commit 2e7b82b631
13 changed files with 132 additions and 106 deletions

View File

@ -4135,3 +4135,16 @@ Rom 30 Apr 2007 (HEAD)
- Tag for 5.9.5 release, all platforms
boinc_core_release_5_9_5
David 30 Apr 2007
- scheduler: added (correct this time!) support for
<alt_platform> tags in scheduler requests.
- file_deleter: add check for -dont_delete_batches
sched/
file_deleter.C
handle_request.C
sched_array.C,h
sched_locality.C,h
sched_resend.C,h
sched_send.C,h
server_types.h

View File

@ -20,26 +20,36 @@ array(
'',
1168202706
),
array('boinc-irc.exe',
'Boinc mIRC',
'1.0',
'A ready setup mIRC to take you straight there',
'http://comatosed.net/boinc/boinc-irc.exe',
'Windows',
'Built in security systems for DCC and MSG systems and some other nice toys 2.00MB',
1089651337
),
array('boinc.mrc',
'Boinc mircstats',
'0.4',
'Script to show your Boinc stats on IRC (with mIRC)',
'http://sqreal.no-ip.org/boinc.mrc',
'Windows',
'This addon shows your boinc details to IRC like Credits, current progress , pulse, gaussian, spike, team ...
<br>
Put the .mrc on your mIRC main dir and type',
1162833635
array(
'http://www.weebl00.nl/leiterow/zowtar/BOINC/',
'BOINC mIRC',
'0.1',
'MRC file for sending your BOINC status on IRC',
'http://www.weebl00.nl/leiterow/zowtar/BOINC/',
'all',
'',
1177964485
),
//array('boinc-irc.exe',
// 'Boinc mIRC',
// '1.0',
// 'A ready setup mIRC to take you straight there',
// 'http://comatosed.net/boinc/boinc-irc.exe',
// 'Windows',
// 'Built in security systems for DCC and MSG systems and some other nice toys 2.00MB',
// 1089651337
//),
//array('boinc.mrc',
// 'Boinc mircstats',
// '0.4',
// 'Script to show your Boinc stats on IRC (with mIRC)',
// 'http://sqreal.no-ip.org/boinc.mrc',
// 'Windows',
// 'This addon shows your boinc details to IRC like Credits, current progress , pulse, gaussian, spike, team ...
// <br>
// Put the .mrc on your mIRC main dir and type',
// 1162833635
//),
array('boincdv_v0306.zip',
'BoincDV',
'',

View File

@ -565,6 +565,8 @@ int main(int argc, char** argv) {
id_remainder = atoi(argv[++i]);
} else if (!strcmp(argv[i], "-dont_delete_antiques")) {
dont_delete_antiques = true;
} else if (!strcmp(argv[i], "-dont_delete_batches")) {
dont_delete_batches = true;
} else {
log_messages.printf(SCHED_MSG_LOG::MSG_CRITICAL,
"Unrecognized arg: %s\n", argv[i]

View File

@ -487,8 +487,7 @@ static int update_host_record(HOST& initial_host, HOST& xhost, USER& user) {
}
int send_result_abort(
SCHEDULER_REQUEST& sreq, SCHEDULER_REPLY& reply, PLATFORM& platform,
SCHED_SHMEM& ss
SCHEDULER_REQUEST& sreq, SCHEDULER_REPLY& reply, SCHED_SHMEM& ss
) {
int aborts_sent = 0;
DB_IN_PROGRESS_RESULT result;
@ -1187,6 +1186,7 @@ void process_request(
SCHEDULER_REQUEST& sreq, SCHEDULER_REPLY& reply, SCHED_SHMEM& ss,
char* code_sign_key
) {
PLATFORM_LIST platforms;
PLATFORM* platform;
int retval;
double last_rpc_time;
@ -1318,16 +1318,15 @@ void process_request(
}
retval = modify_host_struct(sreq, reply.host);
// look up the client's platform in the DB
// look up the client's platform(s) in the DB
//
platform = ss.lookup_platform(sreq.platform.name);
if (!platform) {
for (i=0; i<sreq.alt_platforms.size(); i++) {
platform = ss.lookup_platform(sreq.alt_platforms[i].name);
if (platform) break;
}
if (platform) platforms.list.push_back(platform);
for (i=0; i<sreq.alt_platforms.size(); i++) {
platform = ss.lookup_platform(sreq.alt_platforms[i].name);
if (platform) platforms.list.push_back(platform);
}
if (!platform) {
if (platforms.list.size() == 0) {
sprintf(buf, "platform '%s' not found", sreq.platform.name);
USER_MESSAGE um(buf, "low");
reply.insert_message(um);
@ -1344,13 +1343,13 @@ void process_request(
handle_results(sreq, reply);
if (config.resend_lost_results && sreq.have_other_results_list) {
if (resend_lost_work(sreq, reply, *platform, ss)) {
if (resend_lost_work(sreq, reply, platforms, ss)) {
ok_to_send_work = false;
}
}
if (config.send_result_abort && sreq.have_other_results_list) {
send_result_abort(sreq, reply, *platform, ss);
send_result_abort(sreq, reply, ss);
}
// if last RPC was within config.min_sendwork_interval, don't send work
@ -1377,7 +1376,7 @@ void process_request(
}
}
if (ok_to_send_work) {
send_work(sreq, reply, *platform, ss);
send_work(sreq, reply, platforms, ss);
}
}

View File

@ -44,7 +44,7 @@
// send only results that were previously infeasible for some host
//
void scan_work_array(
SCHEDULER_REQUEST& sreq, SCHEDULER_REPLY& reply, PLATFORM& platform,
SCHEDULER_REQUEST& sreq, SCHEDULER_REPLY& reply, PLATFORM_LIST& platforms,
SCHED_SHMEM& ss
) {
int i, j, retval, n, rnd_off;
@ -140,7 +140,7 @@ void scan_work_array(
// Find the app and app_version for the client's platform.
// If none, treat the WU as infeasible
//
if (anonymous(platform)) {
if (anonymous(platforms.list[0])) {
app = ss.lookup_app(wu.appid);
found = sreq.has_version(*app);
if (!found) {
@ -148,7 +148,7 @@ void scan_work_array(
}
avp = NULL;
} else {
found = find_app_version(reply.wreq, wu, platform, ss, app, avp);
found = find_app_version(reply.wreq, wu, platforms, ss, app, avp);
if (!found) {
wu_result.infeasible_count++;
continue;
@ -277,7 +277,7 @@ void scan_work_array(
}
retval = add_result_to_reply(
result, wu, sreq, reply, platform, app, avp
result, wu, sreq, reply, platforms, app, avp
);
// add_result_to_reply() fails only in fairly pathological cases -

View File

@ -1,5 +1,3 @@
extern void scan_work_array(
SCHEDULER_REQUEST& sreq, SCHEDULER_REPLY& reply, PLATFORM& platform,
SCHED_SHMEM& ss
SCHEDULER_REQUEST&, SCHEDULER_REPLY&, PLATFORM_LIST&, SCHED_SHMEM&
);

View File

@ -275,7 +275,7 @@ int decrement_disk_space_locality(
//
static int possibly_send_result(
DB_RESULT& result,
SCHEDULER_REQUEST& sreq, SCHEDULER_REPLY& reply, PLATFORM& platform,
SCHEDULER_REQUEST& sreq, SCHEDULER_REPLY& reply, PLATFORM_LIST& platforms,
SCHED_SHMEM& ss
) {
DB_WORKUNIT wu;
@ -304,10 +304,10 @@ static int possibly_send_result(
}
retval = get_app_version(
wu, app, avp, sreq, reply, platform, ss
wu, app, avp, sreq, reply, platforms, ss
);
if (retval==ERR_NO_APP_VERSION && !strcmp("anonymous", platform.name)) {
if (retval==ERR_NO_APP_VERSION && anonymous(platforms.list[0])) {
char help_msg_buf[512];
sprintf(help_msg_buf, "To get more %s work, finish current work, stop BOINC, remove app_info.xml file, and restart.", config.long_name);
USER_MESSAGE um(help_msg_buf, "high");
@ -317,7 +317,7 @@ static int possibly_send_result(
if (retval) return ERR_NO_APP_VERSION;
return add_result_to_reply(result, wu, sreq, reply, platform, app, avp);
return add_result_to_reply(result, wu, sreq, reply, platforms, app, avp);
}
// returns true if the work generator can not make more work for this
@ -495,7 +495,7 @@ static void flag_for_possible_removal(char* filename) {
static int send_results_for_file(
char* filename,
int& nsent,
SCHEDULER_REQUEST& sreq, SCHEDULER_REPLY& reply, PLATFORM& platform,
SCHEDULER_REQUEST& sreq, SCHEDULER_REPLY& reply, PLATFORM_LIST& platforms,
SCHED_SHMEM& ss,
bool /*in_working_set*/
) {
@ -651,7 +651,7 @@ static int send_results_for_file(
// This *should* always work.
//
retval_send = possibly_send_result(
result, sreq, reply, platform, ss
result, sreq, reply, platforms, ss
);
boinc_db.commit_transaction();
@ -715,7 +715,7 @@ static int send_results_for_file(
// min_resultname = R.filename;
//
static int send_new_file_work_deterministic_seeded(
SCHEDULER_REQUEST& sreq, SCHEDULER_REPLY& reply, PLATFORM& platform,
SCHEDULER_REQUEST& sreq, SCHEDULER_REPLY& reply, PLATFORM_LIST& platforms,
SCHED_SHMEM& ss, int& nsent, const char *start_f, const char *end_f
) {
DB_RESULT result;
@ -756,7 +756,7 @@ static int send_new_file_work_deterministic_seeded(
);
retval = send_results_for_file(
filename, nsent, sreq, reply, platform, ss, false
filename, nsent, sreq, reply, platforms, ss, false
);
if (retval==ERR_NO_APP_VERSION || retval==ERR_INSUFFICIENT_RESOURCE) return retval;
@ -793,7 +793,7 @@ static bool is_host_slow(SCHEDULER_REQUEST& sreq) {
// if it has not sent any new work.
//
static int send_new_file_work_deterministic(
SCHEDULER_REQUEST& sreq, SCHEDULER_REPLY& reply, PLATFORM& platform,
SCHEDULER_REQUEST& sreq, SCHEDULER_REPLY& reply, PLATFORM_LIST& platforms,
SCHED_SHMEM& ss
) {
char start_filename[256];
@ -808,7 +808,7 @@ static int send_new_file_work_deterministic(
// start deterministic search with randomly chosen filename, go to
// lexical maximum
send_new_file_work_deterministic_seeded(sreq, reply, platform, ss, nsent, start_filename, NULL);
send_new_file_work_deterministic_seeded(sreq, reply, platforms, ss, nsent, start_filename, NULL);
if (nsent) {
return 0;
}
@ -817,7 +817,7 @@ static int send_new_file_work_deterministic(
// filename, continue to randomly choosen one
if (!getfile_retval && reply.work_needed(true)) {
send_new_file_work_deterministic_seeded(
sreq, reply, platform, ss, nsent, "", start_filename
sreq, reply, platforms, ss, nsent, "", start_filename
);
if (nsent) {
return 0;
@ -829,7 +829,7 @@ static int send_new_file_work_deterministic(
static int send_new_file_work_working_set(
SCHEDULER_REQUEST& sreq, SCHEDULER_REPLY& reply, PLATFORM& platform,
SCHEDULER_REQUEST& sreq, SCHEDULER_REPLY& reply, PLATFORM_LIST& platforms,
SCHED_SHMEM& ss
) {
char filename[256];
@ -843,20 +843,20 @@ static int send_new_file_work_working_set(
);
return send_results_for_file(
filename, nsent, sreq, reply, platform, ss, true
filename, nsent, sreq, reply, platforms, ss, true
);
}
// prototype
static int send_old_work(
SCHEDULER_REQUEST& sreq, SCHEDULER_REPLY& reply, PLATFORM& platform,
SCHEDULER_REQUEST& sreq, SCHEDULER_REPLY& reply, PLATFORM_LIST& platforms,
SCHED_SHMEM& ss, int t_min, int t_max);
// The host doesn't have any files for which work is available.
// Pick new file to send. Returns nonzero if no work is available.
//
static int send_new_file_work(
SCHEDULER_REQUEST& sreq, SCHEDULER_REPLY& reply, PLATFORM& platform,
SCHEDULER_REQUEST& sreq, SCHEDULER_REPLY& reply, PLATFORM_LIST& platforms,
SCHED_SHMEM& ss
) {
@ -878,7 +878,7 @@ static int send_new_file_work(
"send_new_file_work(): try to send old work\n"
);
retval_sow=send_old_work(sreq, reply, platform, ss, start, end);
retval_sow=send_old_work(sreq, reply, platforms, ss, start, end);
if (retval_sow==ERR_NO_APP_VERSION || retval_sow==ERR_INSUFFICIENT_RESOURCE) return retval_sow;
@ -888,7 +888,7 @@ static int send_new_file_work(
"send_new_file_work(%d): try to send from working set\n", retry
);
retry++;
retval_snfwws=send_new_file_work_working_set(sreq, reply, platform, ss);
retval_snfwws=send_new_file_work_working_set(sreq, reply, platforms, ss);
if (retval_snfwws==ERR_NO_APP_VERSION || retval_snfwws==ERR_INSUFFICIENT_RESOURCE) return retval_snfwws;
}
@ -897,7 +897,7 @@ static int send_new_file_work(
log_messages.printf(SCHED_MSG_LOG::MSG_DEBUG,
"send_new_file_work(): try deterministic method\n"
);
if (send_new_file_work_deterministic(sreq, reply, platform, ss)) {
if (send_new_file_work_deterministic(sreq, reply, platforms, ss)) {
// if no work remains at all,
// we learn it here and return nonzero.
//
@ -917,7 +917,7 @@ static int send_new_file_work(
// t_min=INT_MIN if you wish to leave off the left constraint.
//
static int send_old_work(
SCHEDULER_REQUEST& sreq, SCHEDULER_REPLY& reply, PLATFORM& platform,
SCHEDULER_REQUEST& sreq, SCHEDULER_REPLY& reply, PLATFORM_LIST& platforms,
SCHED_SHMEM& ss, int t_min, int t_max
) {
char buf[1024], filename[256];
@ -945,7 +945,7 @@ static int send_old_work(
retval = result.lookup(buf);
if (!retval) {
retval = possibly_send_result(result, sreq, reply, platform, ss);
retval = possibly_send_result(result, sreq, reply, platforms, ss);
boinc_db.commit_transaction();
if (!retval) {
double age=(now-result.create_time)/3600.0;
@ -955,7 +955,7 @@ static int send_old_work(
extract_retval=extract_filename(result.name, filename);
if (!extract_retval) {
send_results_for_file(
filename, nsent, sreq, reply, platform, ss, false
filename, nsent, sreq, reply, platforms, ss, false
);
} else {
// David, is this right? Is this the only place in
@ -1003,7 +1003,7 @@ bool file_info_order(const FILE_INFO& fi1, const FILE_INFO& fi2) {
}
void send_work_locality(
SCHEDULER_REQUEST& sreq, SCHEDULER_REPLY& reply, PLATFORM& platform,
SCHEDULER_REQUEST& sreq, SCHEDULER_REPLY& reply, PLATFORM_LIST& platforms,
SCHED_SHMEM& ss
) {
int i, nsent, nfiles, j;
@ -1090,7 +1090,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);
int retval_sow=send_old_work(sreq, reply, platforms, ss, INT_MIN, until);
if (retval_sow==ERR_NO_APP_VERSION || retval_sow==ERR_INSUFFICIENT_RESOURCE) return;
}
@ -1103,7 +1103,7 @@ void send_work_locality(
if (!reply.work_needed(true)) break;
FILE_INFO& fi = sreq.file_infos[k];
retval_srff=send_results_for_file(
fi.name, nsent, sreq, reply, platform, ss, false
fi.name, nsent, sreq, reply, platforms, ss, false
);
if (retval_srff==ERR_NO_APP_VERSION || retval_srff==ERR_INSUFFICIENT_RESOURCE) return;
@ -1126,7 +1126,7 @@ void send_work_locality(
// send new files if needed
//
if (reply.work_needed(true)) {
send_new_file_work(sreq, reply, platform, ss);
send_new_file_work(sreq, reply, platforms, ss);
}
}

View File

@ -18,13 +18,11 @@
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
extern void send_work_locality(
SCHEDULER_REQUEST& sreq, SCHEDULER_REPLY& reply, PLATFORM& platform,
SCHED_SHMEM& ss
SCHEDULER_REQUEST&, SCHEDULER_REPLY&, PLATFORM_LIST&, SCHED_SHMEM&
);
extern int decrement_disk_space_locality(
WORKUNIT& wu, SCHEDULER_REQUEST& request,
SCHEDULER_REPLY& reply
WORKUNIT& wu, SCHEDULER_REQUEST& request, SCHEDULER_REPLY& reply
);
extern int delete_file_from_host(SCHEDULER_REQUEST&, SCHEDULER_REPLY&);

View File

@ -85,8 +85,8 @@ static int possibly_give_result_new_deadline(
}
bool resend_lost_work(
SCHEDULER_REQUEST& sreq, SCHEDULER_REPLY& reply, PLATFORM& platform,
SCHED_SHMEM& ss
SCHEDULER_REQUEST& sreq, SCHEDULER_REPLY& reply,
PLATFORM_LIST& platforms, SCHED_SHMEM& ss
) {
DB_RESULT result;
std::vector<DB_RESULT>results;
@ -142,7 +142,7 @@ bool resend_lost_work(
sreq.core_client_major_version*100 + sreq.core_client_minor_version;
retval = get_app_version(
wu, app, avp, sreq, reply, platform, ss
wu, app, avp, sreq, reply, platforms, ss
);
if (retval) {
log_messages.printf( SCHED_MSG_LOG::MSG_CRITICAL,
@ -201,7 +201,7 @@ bool resend_lost_work(
}
retval = add_result_to_reply(
result, wu, sreq, reply, platform, app, avp
result, wu, sreq, reply, platforms, app, avp
);
if (retval) {
log_messages.printf( SCHED_MSG_LOG::MSG_CRITICAL,

View File

@ -1,4 +1,4 @@
extern bool resend_lost_work(
SCHEDULER_REQUEST&, SCHEDULER_REPLY&, PLATFORM&, SCHED_SHMEM&
SCHEDULER_REQUEST&, SCHEDULER_REPLY&, PLATFORM_LIST&, SCHED_SHMEM&
);

View File

@ -60,8 +60,8 @@ const int MAX_SECONDS_TO_SEND = (28*SECONDS_IN_DAY);
const double DEFAULT_RAM_SIZE = 64000000;
// if host sends us an impossible RAM size, use this instead
bool anonymous(PLATFORM& platform) {
return (!strcmp(platform.name, "anonymous"));
bool anonymous(PLATFORM* platform) {
return (!strcmp(platform->name, "anonymous"));
}
bool SCHEDULER_REQUEST::has_version(APP& app) {
@ -76,15 +76,15 @@ bool SCHEDULER_REQUEST::has_version(APP& app) {
return false;
}
// Find the app and app_version for the client's platform.
// Find an app and app_version for the client's platform(s).
//
int get_app_version(
WORKUNIT& wu, APP* &app, APP_VERSION* &avp,
SCHEDULER_REQUEST& sreq, SCHEDULER_REPLY& reply, PLATFORM& platform,
SCHEDULER_REQUEST& sreq, SCHEDULER_REPLY& reply, PLATFORM_LIST& platforms,
SCHED_SHMEM& ss
) {
bool found;
if (anonymous(platform)) {
if (anonymous(platforms.list[0])) {
app = ss.lookup_app(wu.appid);
found = sreq.has_version(*app);
if (!found) {
@ -95,7 +95,7 @@ int get_app_version(
}
avp = NULL;
} else {
found = find_app_version(reply.wreq, wu, platform, ss, app, avp);
found = find_app_version(reply.wreq, wu, platforms, ss, app, avp);
if (!found) {
log_messages.printf(SCHED_MSG_LOG::MSG_DEBUG, "Didn't find app version\n");
return ERR_NO_APP_VERSION;
@ -486,7 +486,7 @@ int insert_wu_tags(WORKUNIT& wu, APP& app) {
// return false if none
//
bool find_app_version(
WORK_REQ& wreq, WORKUNIT& wu, PLATFORM& platform, SCHED_SHMEM& ss,
WORK_REQ& wreq, WORKUNIT& wu, PLATFORM_LIST& platforms, SCHED_SHMEM& ss,
APP*& app, APP_VERSION*& avp
) {
app = ss.lookup_app(wu.appid);
@ -496,17 +496,19 @@ bool find_app_version(
);
return false;
}
avp = ss.lookup_app_version(app->id, platform.id, app->min_version);
if (!avp) {
log_messages.printf(
SCHED_MSG_LOG::MSG_DEBUG,
"no app version available: APP#%d PLATFORM#%d min_version %d\n",
app->id, platform.id, app->min_version
);
wreq.no_app_version = true;
return false;
unsigned int i;
for (i=0; i<platforms.list.size(); i++) {
PLATFORM* p = platforms.list[i];
avp = ss.lookup_app_version(app->id, p->id, app->min_version);
if (avp) return true;
}
return true;
log_messages.printf(
SCHED_MSG_LOG::MSG_DEBUG,
"no app version available: APP#%d PLATFORM#%d min_version %d\n",
app->id, platforms.list[0]->id, app->min_version
);
wreq.no_app_version = true;
return false;
}
// verify that the given APP_VERSION will work with the core client
@ -531,7 +533,7 @@ bool app_core_compatible(WORK_REQ& wreq, APP_VERSION& av) {
// Add the app and app_version to the reply also.
//
int add_wu_to_reply(
WORKUNIT& wu, SCHEDULER_REPLY& reply, PLATFORM& platform,
WORKUNIT& wu, SCHEDULER_REPLY& reply, PLATFORM_LIST& platforms,
APP* app, APP_VERSION* avp
) {
int retval;
@ -551,8 +553,8 @@ int add_wu_to_reply(
reply.insert_app_version_unique(*avp2);
log_messages.printf(
SCHED_MSG_LOG::MSG_DEBUG,
"[HOST#%d] Sending app_version %s %s %d\n",
reply.host.id, app->name, platform.name, avp2->version_num
"[HOST#%d] Sending app_version %s %d %d\n",
reply.host.id, app->name, avp2->platformid, avp2->version_num
);
}
@ -690,14 +692,14 @@ void SCHEDULER_REPLY::got_bad_result() {
int add_result_to_reply(
DB_RESULT& result, WORKUNIT& wu, SCHEDULER_REQUEST& request,
SCHEDULER_REPLY& reply, PLATFORM& platform,
SCHEDULER_REPLY& reply, PLATFORM_LIST& platforms,
APP* app, APP_VERSION* avp
) {
int retval;
double wu_seconds_filled;
bool resent_result = false;
retval = add_wu_to_reply(wu, reply, platform, app, avp);
retval = add_wu_to_reply(wu, reply, platforms, app, avp);
if (retval) return retval;
// in the scheduling locality case,
@ -814,7 +816,7 @@ int add_result_to_reply(
}
int send_work(
SCHEDULER_REQUEST& sreq, SCHEDULER_REPLY& reply, PLATFORM& platform,
SCHEDULER_REQUEST& sreq, SCHEDULER_REPLY& reply, PLATFORM_LIST& platforms,
SCHED_SHMEM& ss
) {
#if 1
@ -864,14 +866,14 @@ int send_work(
if (config.locality_scheduling) {
reply.wreq.infeasible_only = false;
send_work_locality(sreq, reply, platform, ss);
send_work_locality(sreq, reply, platforms, ss);
} else {
// give top priority to results that require a 'reliable host'
//
if (reply.wreq.host_info.reliable) {
reply.wreq.reliable_only = true;
reply.wreq.infeasible_only = false;
scan_work_array(sreq, reply, platform, ss);
scan_work_array(sreq, reply, platforms, ss);
}
reply.wreq.reliable_only = false;
@ -886,17 +888,17 @@ int send_work(
"[HOST#%d] will accept beta work. Scanning for beta work.\n",
reply.host.id
);
scan_work_array(sreq, reply, platform, ss);
scan_work_array(sreq, reply, platforms, ss);
}
reply.wreq.beta_only = false;
// give next priority to results that were infeasible for some other host
//
reply.wreq.infeasible_only = true;
scan_work_array(sreq, reply, platform, ss);
scan_work_array(sreq, reply, platforms, ss);
reply.wreq.infeasible_only = false;
scan_work_array(sreq, reply, platform, ss);
scan_work_array(sreq, reply, platforms, ss);
}
log_messages.printf(

View File

@ -19,23 +19,23 @@
extern int get_app_version(
WORKUNIT& wu, APP* &app, APP_VERSION* &avp,
SCHEDULER_REQUEST& sreq, SCHEDULER_REPLY& reply, PLATFORM& platform,
SCHED_SHMEM& ss
SCHEDULER_REQUEST& sreq, SCHEDULER_REPLY& reply,
PLATFORM_LIST& platforms, SCHED_SHMEM& ss
);
extern int send_work(
SCHEDULER_REQUEST&, SCHEDULER_REPLY&, PLATFORM&, SCHED_SHMEM&
SCHEDULER_REQUEST&, SCHEDULER_REPLY&, PLATFORM_LIST&, SCHED_SHMEM&
);
extern int add_result_to_reply(
DB_RESULT& result, WORKUNIT& wu, SCHEDULER_REQUEST&, SCHEDULER_REPLY&,
PLATFORM&, APP* app, APP_VERSION* avp
PLATFORM_LIST&, APP* app, APP_VERSION* avp
);
extern bool anonymous(PLATFORM&);
extern bool anonymous(PLATFORM*);
extern bool find_app_version(
WORK_REQ& wreq, WORKUNIT& wu, PLATFORM& platform, SCHED_SHMEM& ss,
WORK_REQ& wreq, WORKUNIT& wu, PLATFORM_LIST& platform, SCHED_SHMEM& ss,
APP*& app, APP_VERSION*& avp
);

View File

@ -138,6 +138,10 @@ struct CLIENT_PLATFORM {
int parse(FILE*);
};
struct PLATFORM_LIST {
std::vector<PLATFORM*> list;
};
struct SCHEDULER_REQUEST {
char authenticator[256];
CLIENT_PLATFORM platform;