mirror of https://github.com/BOINC/boinc.git
parent
73d1cf466e
commit
bd4dfc7df1
|
@ -54,7 +54,8 @@ PROJECT::PROJECT() {
|
||||||
master_fetch_failures = 0;
|
master_fetch_failures = 0;
|
||||||
resource_debt = 0;
|
resource_debt = 0;
|
||||||
debt_order = 0;
|
debt_order = 0;
|
||||||
master_url_fetch_pending = 0;
|
master_url_fetch_pending = false;
|
||||||
|
sched_rpc_pending = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
PROJECT::~PROJECT() {
|
PROJECT::~PROJECT() {
|
||||||
|
|
|
@ -128,8 +128,7 @@ PROJECT* CLIENT_STATE::next_project(PROJECT* old) {
|
||||||
pbest = 0;
|
pbest = 0;
|
||||||
for (i=0; i<projects.size(); i++) {
|
for (i=0; i<projects.size(); i++) {
|
||||||
p = projects[i];
|
p = projects[i];
|
||||||
if (p->master_url_fetch_pending)
|
if (p->master_url_fetch_pending) continue;
|
||||||
continue;
|
|
||||||
if (p->min_rpc_time > now ) continue;
|
if (p->min_rpc_time > now ) continue;
|
||||||
if (old && p->debt_order <= old->debt_order) continue;
|
if (old && p->debt_order <= old->debt_order) continue;
|
||||||
if (p->debt_order < best) {
|
if (p->debt_order < best) {
|
||||||
|
|
|
@ -309,6 +309,7 @@ bool SCHEDULER_OP::poll() {
|
||||||
if (http_op.http_op_state == HTTP_STATE_DONE) {
|
if (http_op.http_op_state == HTTP_STATE_DONE) {
|
||||||
action = true;
|
action = true;
|
||||||
project->master_url_fetch_pending = false;
|
project->master_url_fetch_pending = false;
|
||||||
|
gstate.set_client_state_dirty("master URL fetch done");
|
||||||
http_ops->remove(&http_op);
|
http_ops->remove(&http_op);
|
||||||
if (http_op.http_op_retval == 0) {
|
if (http_op.http_op_retval == 0) {
|
||||||
if (log_flags.sched_op_debug) {
|
if (log_flags.sched_op_debug) {
|
||||||
|
|
|
@ -45,7 +45,23 @@ using namespace std;
|
||||||
// return true if the WU can be executed on the host
|
// return true if the WU can be executed on the host
|
||||||
//
|
//
|
||||||
bool wu_is_feasible(WORKUNIT& wu, HOST& host) {
|
bool wu_is_feasible(WORKUNIT& wu, HOST& host) {
|
||||||
return ((wu.rsc_disk <= host.d_free) && (wu.rsc_memory <= host.m_nbytes));
|
char buf[256];
|
||||||
|
|
||||||
|
if(host.d_free && wu.rsc_disk > host.d_free) {
|
||||||
|
sprintf(buf, "WU %d needs %f disk; host %d has %f\n",
|
||||||
|
wu.id, wu.rsc_disk, host.id, host.d_free
|
||||||
|
);
|
||||||
|
write_log(buf);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (host.m_nbytes && wu.rsc_memory > host.m_nbytes) {
|
||||||
|
sprintf(buf, "WU %d needs %f mem; host %d has %f\n",
|
||||||
|
wu.id, wu.rsc_memory, host.id, host.m_nbytes
|
||||||
|
);
|
||||||
|
write_log(buf);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// estimate the time that a WU will take on a host
|
// estimate the time that a WU will take on a host
|
||||||
|
@ -177,7 +193,8 @@ int authenticate_user(SCHEDULER_REQUEST& sreq, SCHEDULER_REPLY& reply) {
|
||||||
);
|
);
|
||||||
strcpy(reply.message_priority, "low");
|
strcpy(reply.message_priority, "low");
|
||||||
reply.request_delay = 120;
|
reply.request_delay = 120;
|
||||||
write_log("bad authenticator\n");
|
sprintf(buf, "Bad authenticator: %s\n", sreq.authenticator);
|
||||||
|
write_log(buf);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -202,7 +219,8 @@ int authenticate_user(SCHEDULER_REQUEST& sreq, SCHEDULER_REPLY& reply) {
|
||||||
"Visit this project's web site to get an authenticator.");
|
"Visit this project's web site to get an authenticator.");
|
||||||
strcpy(reply.message_priority, "low");
|
strcpy(reply.message_priority, "low");
|
||||||
reply.request_delay = 120;
|
reply.request_delay = 120;
|
||||||
write_log("bad authenticator\n");
|
sprintf(buf, "Bad authenticator: %s\n", sreq.authenticator);
|
||||||
|
write_log(buf);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
new_host:
|
new_host:
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
#! /usr/local/bin/php
|
||||||
|
<?php
|
||||||
|
|
||||||
|
// General-purpose watchdog script.
|
||||||
|
// Run this from crontab.
|
||||||
|
// We use the mod time of a file "watchdog_exec_time"
|
||||||
|
// to keep track of the last time we ran.
|
||||||
|
|
||||||
|
// BOINC uses a number of "error log files".
|
||||||
|
// If any error log file has been updated since the last time we ran,
|
||||||
|
// sound the alarm.
|
||||||
|
|
||||||
|
// TODO: to detect file system full errors,
|
||||||
|
// have this program attempt to create/read a file.
|
||||||
|
|
||||||
|
function sound_alarm($x) {
|
||||||
|
echo "alarm: $x\n";
|
||||||
|
//email("davea@ssl.berkeley.edu", "BOINC problem", $x);
|
||||||
|
}
|
||||||
|
|
||||||
|
function check_log_file($file, $last_time) {
|
||||||
|
$t = filemtime($file);
|
||||||
|
if ($t == false) {
|
||||||
|
sound_alarm("log file ".$file." missing");
|
||||||
|
} else if ($t > $last_time) {
|
||||||
|
$lines = file($file);
|
||||||
|
$last_line = $lines[count($lines)-1];
|
||||||
|
sound_alarm($last_line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$last_time = filemtime("watchdog_exec_time");
|
||||||
|
if (!$last_time) {
|
||||||
|
alarm("foo");
|
||||||
|
}
|
||||||
|
touch("watchdog_exec_time");
|
||||||
|
|
||||||
|
check_log_file("error_log", $last_time);
|
||||||
|
|
||||||
|
?>
|
|
@ -0,0 +1,65 @@
|
||||||
|
#! /usr/local/bin/php
|
||||||
|
<?php
|
||||||
|
|
||||||
|
// watchdog script to ensure that the number of result records
|
||||||
|
// increases at least every X seconds (X = crontab period)
|
||||||
|
|
||||||
|
include_once("util.inc");
|
||||||
|
|
||||||
|
function fail($x) {
|
||||||
|
$f = fopen("error_log", "a");
|
||||||
|
if (!$f) return false;
|
||||||
|
fputs($f, "[".strftime("%T %D")."] ");
|
||||||
|
fputs($f, $x);
|
||||||
|
fclose($f);
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
|
||||||
|
function read_count_file() {
|
||||||
|
if (!file_exists("nresults")) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
$lines = file("nresults");
|
||||||
|
if (!$lines) return false;
|
||||||
|
return $lines[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
function write_count_file($n) {
|
||||||
|
$f = fopen("nresults", "w");
|
||||||
|
if (!$f) return false;
|
||||||
|
$x = sprintf("%d", $n);
|
||||||
|
fwrite($f, $x);
|
||||||
|
fclose($f);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_count_from_db() {
|
||||||
|
$result = mysql_query("select count(*) from result");
|
||||||
|
if (!$result) return false;
|
||||||
|
$count = mysql_fetch_array($result);
|
||||||
|
mysql_free_result($result);
|
||||||
|
return $count[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
$retval = db_init();
|
||||||
|
if (!$retval) {
|
||||||
|
fail("Can't open database");
|
||||||
|
}
|
||||||
|
$m = get_count_from_db();
|
||||||
|
echo "Count: $m\n";
|
||||||
|
if ($m == false) {
|
||||||
|
fail("Can't get result count from DB");
|
||||||
|
}
|
||||||
|
$n = read_count_file();
|
||||||
|
echo "Count: $n\n";
|
||||||
|
if ($n == false) {
|
||||||
|
write_count_file($m);
|
||||||
|
exit();
|
||||||
|
}
|
||||||
|
if ($n == $m) {
|
||||||
|
echo "fail\n";
|
||||||
|
fail("Result count hasn't changed\n");
|
||||||
|
}
|
||||||
|
write_count_file($m);
|
||||||
|
|
||||||
|
?>
|
Loading…
Reference in New Issue