- wrapper: tell the client when we checkpoint

(else checkpoint_elapsed_time etc. don't get set)
- make_project: enable update_stats by default
- update_stats: add --min_age option


svn path=/trunk/boinc/; revision=23509
This commit is contained in:
David Anderson 2011-05-06 12:33:12 +00:00
parent d2b3c97ea7
commit 2385c00b67
5 changed files with 54 additions and 22 deletions

View File

@ -2806,3 +2806,16 @@ David 5 May 2011
html/user/
team_search.php
David 6 May 2011
- wrapper: tell the client when we checkpoint
(else checkpoint_elapsed_time etc. don't get set)
- make_project: enable update_stats by default
- update_stats: add --min_age option
sched/
update_stats.cpp
tools/
make_project
samples/wrapper/
wrapper.cpp

View File

@ -21,6 +21,8 @@
// bossa_example4_make_jobs.php
// --dir dir
$app_name = "bossa_example4";
$cli_only = true;
require_once("../inc/bossa.inc");
require_once("../inc/util_ops.inc");
@ -64,7 +66,7 @@ if (!is_dir("../user/$dir")) {
exit("../user/$dir is not a directory\n");
}
$appid = bossa_app_lookup("bossa_example4");
if (!$appid) exit("No application 'bossa_example4'\n");
$appid = bossa_app_lookup($app_name);
if (!$appid) exit("No application $app_name\n");
make_jobs($dir, $appid);

View File

@ -652,10 +652,12 @@ void send_status_message(
// and how much CPU time has been used so far
//
void write_checkpoint(int ntasks_completed, double cpu) {
boinc_begin_critical_section();
FILE* f = fopen(CHECKPOINT_FILENAME, "w");
if (!f) return;
fprintf(f, "%d %f\n", ntasks_completed, cpu);
fclose(f);
boinc_checkpoint_completed();
}
void read_checkpoint(int& ntasks_completed, double& cpu) {

View File

@ -20,11 +20,17 @@
// These fields are updates as new credit is granted;
// the purpose of this program is to decay credit of entities
// that are inactive for long periods.
// Hence it should be run about once a day at most.
// Run it about once a day.
//
// Also updates the nusers field of teams
//
// usage: update_stats [--update_teams] [--update_users] [--update_hosts]
// usage: update_stats args
// [--update_teams]
// [--update_users]
// [--update_hosts]
// [--min_age nsec] don't update items updated more recently than this
#include "config.h"
#include <cstdio>
#include <cstring>
@ -42,13 +48,12 @@
#include "sched_util.h"
#include "sched_msgs.h"
#ifdef EINSTEIN_AT_HOME
#define UPDATE_INTERVAL 3600*24;
#else
#define UPDATE_INTERVAL 3600*24*4;
#endif
// If the item's average credit has been updated more recently than this,
// don't update it (optimizes performance).
double update_time_cutoff;
#define MIN_AGE 86400
double max_update_time;
int update_users() {
DB_USER user;
@ -57,7 +62,8 @@ int update_users() {
double now = dtime();
while (1) {
retval = user.enumerate("where expavg_credit>0.1");
sprintf(buf, "where expavg_credit>0.1 and expavg_time < %f", max_update_time);
retval = user.enumerate(buf);
if (retval) {
if (retval != ERR_DB_NOT_FOUND) {
log_messages.printf(MSG_CRITICAL, "lost DB conn\n");
@ -65,8 +71,6 @@ int update_users() {
}
break;
}
if (user.expavg_time > update_time_cutoff) continue;
update_average(
now, 0, 0, CREDIT_HALF_LIFE, user.expavg_credit, user.expavg_time
);
@ -90,7 +94,8 @@ int update_hosts() {
double now = dtime();
while (1) {
retval = host.enumerate("where expavg_credit>0.1");
sprintf(buf, "where expavg_credit>0.1 and expavg_time < %f", max_update_time);
retval = host.enumerate(buf);
if (retval) {
if (retval != ERR_DB_NOT_FOUND) {
log_messages.printf(MSG_CRITICAL, "lost DB conn\n");
@ -98,8 +103,6 @@ int update_hosts() {
}
break;
}
if (host.expavg_time > update_time_cutoff) continue;
update_average(
now, 0, 0, CREDIT_HALF_LIFE, host.expavg_credit, host.expavg_time
);
@ -169,7 +172,7 @@ int update_teams() {
);
continue;
}
if (team.expavg_time < update_time_cutoff) {
if (team.expavg_time < max_update_time) {
update_average(
now, 0, 0, CREDIT_HALF_LIFE, team.expavg_credit,
team.expavg_time
@ -210,10 +213,11 @@ void usage(char *name) {
int main(int argc, char** argv) {
int retval, i;
bool do_update_teams = false, do_update_users = false;
bool do_update_teams = false;
bool do_update_users = false;
bool do_update_hosts = false;
update_time_cutoff = time(0) - UPDATE_INTERVAL;
max_update_time = time(0) - MIN_AGE;
check_stop_daemons();
@ -224,6 +228,9 @@ int main(int argc, char** argv) {
do_update_users = true;
} else if (is_arg(argv[i], "update_hosts")) {
do_update_hosts = true;
} else if (is_arg(argv[i], "min_age")) {
double x = atof(argv[++i]);
max_update_time = time(0) - x;
} else if (!strcmp(argv[i], "-d")) {
if (!argv[++i]) {
log_messages.printf(MSG_CRITICAL, "%s requires an argument\n\n", argv[--i]);
@ -246,6 +253,14 @@ int main(int argc, char** argv) {
}
}
// if no do_update flags set, set them all
//
if (!do_update_teams && !do_update_users && !do_update_hosts) {
do_update_teams = true;
do_update_users = true;
do_update_hosts = true;
}
log_messages.printf(MSG_NORMAL, "Starting\n");
retval = config.parse_file();

View File

@ -256,10 +256,10 @@ t.cmd = 'run_in_ops ./update_forum_activities.php'
t.disabled = 1
t = project.config.tasks.make_node_and_append("task")
t.period = '7 days'
t.period = '1 days'
t.output = 'update_stats.out'
t.cmd = 'update_stats --update_users --update_teams --update_hosts'
t.disabled = 1
t.cmd = 'update_stats'
t.disabled = 0
t = project.config.tasks.make_node_and_append("task")
t.period = '24 hours'