// Here when a result has been validated and its granted_credit has been set. // Grant credit to host, user and team, and update host error rate. // int is_valid(RESULT& result, WORKUNIT& wu) { DB_HOST host; DB_CREDITED_JOB credited_job; int retval; char buf[256]; retval = host.lookup_id(result.hostid); if (retval) { log_messages.printf(MSG_CRITICAL, "[RESULT#%d] lookup of host %d failed %d\n", result.id, result.hostid, retval ); return retval; } grant_credit(host, result.sent_time, result.cpu_time, result.granted_credit); double turnaround = result.received_time - result.sent_time; compute_avg_turnaround(host, turnaround); double old_error_rate = host.error_rate; if (!is_unreplicated(wu)) { update_error_rate(host, true); } sprintf( buf, "avg_turnaround=%f, error_rate=%f", host.avg_turnaround, host.error_rate ); retval = host.update_field(buf); if (retval) { log_messages.printf(MSG_CRITICAL, "[RESULT#%d] update of host %d failed %d\n", result.id, result.hostid, retval ); } log_messages.printf(MSG_DEBUG, "[HOST#%d] error rate %f->%f\n", host.id, old_error_rate, host.error_rate ); if (update_credited_job) { credited_job.userid = host.userid; credited_job.workunitid = long(wu.opaque); retval = credited_job.insert(); if (retval) { log_messages.printf(MSG_CRITICAL, "[RESULT#%d] Warning: credited_job insert failed (userid: %d workunit: %f err: %d)\n", result.id, host.userid, wu.opaque, retval ); } else { log_messages.printf(MSG_DEBUG, "[RESULT#%d %s] added credited_job record [WU#%d OPAQUE#%f USER#%d]\n", result.id, result.name, wu.id, wu.opaque, host.userid ); } } return 0; }
// Here when a result has been validated. // - update consecutive_valid // - udpdate turnaround stats // - insert credited_job record if needed // int is_valid( DB_HOST& host, RESULT& result, WORKUNIT& wu, DB_HOST_APP_VERSION& hav ) { DB_CREDITED_JOB credited_job; int retval; double turnaround = result.received_time - result.sent_time; compute_avg_turnaround(host, turnaround); // increment daily quota // hav.max_jobs_per_day++; // increment consecutive_valid, but only if unreplicated // if (!is_unreplicated(wu)) { hav.consecutive_valid++; log_messages.printf(MSG_DEBUG, "[HAV#%lu] consecutive valid now %d\n", hav.app_version_id, hav.consecutive_valid ); } if (update_credited_job) { credited_job.userid = host.userid; credited_job.workunitid = long(wu.opaque); if (dry_run) { log_messages.printf(MSG_NORMAL, "DB not updated (dry run)\n"); } else { retval = credited_job.insert(); if (retval) { log_messages.printf(MSG_CRITICAL, "[RESULT#%lu] Warning: credited_job insert failed (userid: %lu workunit: %f err: %s)\n", result.id, host.userid, wu.opaque, boincerror(retval) ); } else { log_messages.printf(MSG_DEBUG, "[RESULT#%lu %s] added credited_job record [WU#%lu OPAQUE#%f USER#%lu]\n", result.id, result.name, wu.id, wu.opaque, host.userid ); } } } return 0; }