- assimilator: there was a bug in the situation where:

1) a WU is marked as ready for assimilation and has no errors;
    2) it has no canonical result
    In this case, the assimilate handler gets called anyway,
    typically with the canonical result of the previous WU as arg.
    Note: this situation doesn't arise normally;
    it might happen if some results are deleted accidentally.
    The fix: 
    - identify this situation, and set the WU.error_mask to a new code
        (WU_ERROR_NO_CANONICAL_RESULT)
    - zero out the "canonical_result" variable passed to the handler,
        so even if the handler fails to check wu.error_mask,
        at least it won't assimilate the same result twice.
    Thanks to Hendrik Verhoek for finding this bug.
- DB schema: team table type is MyISAM, not InnoDB

svn path=/trunk/boinc/; revision=13938
This commit is contained in:
David Anderson 2007-10-23 17:11:56 +00:00
parent f77ad4b0aa
commit 618a5c1651
6 changed files with 106 additions and 48 deletions

View File

@ -9294,7 +9294,7 @@ David 7 Oct 2007
html/inc/
team.inc
Janus 8 Oct 2007
Janus 8 Oct 2007
Bittorrent:
- Changed the torrent generator behaviour from trying only the exact path
to the file given to trying all paths given by removing the root of the
@ -9307,8 +9307,8 @@ Janus 8 Oct 2007
html/bt/
torrent_cache.php
database/
bittorrent_peers.sql
database/
bittorrent_peers.sql
Rom 8 Oct 2007
- MGR: User errors are supposed to be red, not internal errors.
@ -9411,9 +9411,9 @@ Janus 10 Oct 2007
html/bt
announce.php
scrape.php
inc/
bittorrent_ipbans.sql (new)
scrape.php
inc/
bittorrent_ipbans.sql (new)
Charlie 10 Oct 2007
- Mac V5 GFX API: In setMacPList(), if resource already exists, don't
@ -9450,7 +9450,7 @@ Eric K. 11 Oct 2007
html/
user/
create_profile.php
create_profile.php
Charlie 11 Oct 2007
- V6 GFX: Call waitpid to prevent gfx_switcher leaving zombie processes.
@ -9617,26 +9617,26 @@ Charlie 16 Oct 2007
boinc_api.C
David 17 Oct 2007
- client: improve log messages
- client: improve log messages
client/
cs_scheduler.C
pers_file_xfer.C
scheduler_op.C
clienttray/
tray_win.cpp
client/
cs_scheduler.C
pers_file_xfer.C
scheduler_op.C
clienttray/
tray_win.cpp
Charlie 18 Oct 2007
- Fix compiler warning,
- Fix compiler warning,
client/
cs_scheduler.C
David 18 Oct 2007
- client (win): fix time-zone code
- client (win): fix time-zone code
client/
hostinfo_win.C
client/
hostinfo_win.C
Rom 18 Oct 2007
- Add the Global prefix to the shared memory segment that
@ -9700,12 +9700,12 @@ Eric K 19 Oct 2007
David 20 Oct 2007
- client: cc_config.xml can contain one or more <alt_platform> elements
specifying additional alternate platforms.
- client: cc_config.xml can contain one or more <alt_platform> elements
specifying additional alternate platforms.
client/
cs_platforms.C
log_flags.C,h
client/
cs_platforms.C
log_flags.C,h
Reinhard 21 Oct 2007
- configure.ac: fixed handling of curl-libs to avoid erroneous
@ -9749,30 +9749,30 @@ Rytis 22 Oct 2007
stats.php
David 22 Oct 2007
- API: some changes relevant only to SETI@home.
- API: some changes relevant only to SETI@home.
api/
graphics2.h
reduce.h
reduce_lib.C
reduce_main.C
api/
graphics2.h
reduce.h
reduce_lib.C
reduce_main.C
David 22 Oct 2007
- GUI RPC: fix format of <auth2> request
- GUI RPC: don't enable network on bad request
- GUI RPC: fix format of <auth2> request
- GUI RPC: don't enable network on bad request
client/
gui_rpc_server_ops.C
lib/
gui_rpc_client.C
client/
gui_rpc_server_ops.C
lib/
gui_rpc_client.C
David 22 Oct 2007
- client: remove unparsed XML error for <active_task_state>
- client: remove spurious error if include <alt_platform> in cc_config.xml
- client: remove unparsed XML error for <active_task_state>
- client: remove spurious error if include <alt_platform> in cc_config.xml
client/
app.C
log_flags.C
client/
app.C
log_flags.C
Rom 23 Oct 2007
- client: read_file_string was modified sometime ago to support tail
@ -9781,3 +9781,27 @@ Rom 23 Oct 2007
client/
app_control.C
David 23 Oct 2007
- assimilator: there was a bug in the situation where:
1) a WU is marked as ready for assimilation and has no errors;
2) it has no canonical result
In this case, the assimilate handler gets called anyway,
typically with the canonical result of the previous WU as arg.
Note: this situation doesn't arise normally;
it might happen if some results are deleted accidentally.
The fix:
- identify this situation, and set the WU.error_mask to a new code
(WU_ERROR_NO_CANONICAL_RESULT)
- zero out the "canonical_result" variable passed to the handler,
so even if the handler fails to check wu.error_mask,
at least it won't assimilate the same result twice.
Thanks to Hendrik Verhoek for finding this bug.
- DB schema: team table type is MyISAM, not InnoDB
db/
boinc_db.h
schema.sql
sched/
assimilator.C

View File

@ -324,6 +324,7 @@ struct HOST {
#define WU_ERROR_TOO_MANY_SUCCESS_RESULTS 4
#define WU_ERROR_TOO_MANY_TOTAL_RESULTS 8
#define WU_ERROR_CANCELLED 16
#define WU_ERROR_NO_CANONICAL_RESULT 32
struct WORKUNIT {
int id;

View File

@ -115,7 +115,7 @@ create table team (
ping_user integer not null default 0,
ping_time integer unsigned not null default 0,
primary key (id)
) type=InnoDB;
) type=MyISAM;
create table host (
id integer not null auto_increment,

View File

@ -466,14 +466,14 @@ array('boinc_server_status.zip',
);
$web = array(
array('boinc_lcs_2.1.tar.gz',
array('http://download.conmunix.net/pub/boinc_lcs/boinc_lcs_3.0_beta.tar.gz',
'Boinc LCS',
'',
'Live Client State for an unlimited number of clients (needs a webserver)',
'http://conmunich.dyndns.org/cm/development/boinc2/',
'Mysql, Perl and PHP',
'Shows the current status from up to 4 clients on a webserver. Files will be transported by a small Perl server within the network that runs on each client. You can configure all options over a Mysql backend.',
'1139033692'
'3.0 beta',
'Shows the current state and other information from an unlimited number of BOINC clients connected to the Internet.',
'http://www.conmunix.net/boinc-lcs',
'Apache, PHP',
'Boinc LCS is a free PHP based script, that allows you to monitor the current state (and other information) from each of your connected BOINC clients. It runs on a simple webserver and since version 2.1 it is also platform independent. Boinc LCS is released under the GNU/GPL license. You can modify and redistribute or just using it!',
'1193023938'
),
array('boincphpgui-2.3.tar.gz',
'BoincPHP5-GUI',

View File

@ -2,6 +2,19 @@
$project_news = array(
array("October 22, 2007",
"The BOINC-based <a href=http://www.bbc.co.uk/sn/climateexperiment>BBC
Climate Change Experiment</a> has won the prestigious
<a href=http://www.prix-europa.de/>Prix Europa</a>
award in the Internet category."
),
array("October 21, 2007",
'Conmunix has released version 3.0 beta of
<a href=http://www.conmunix.net/boinc-lcs>Boinc LCS</a>
(Live Client State), a PHP script that allows you to monitor
the current state and other information from each of
your BOINC clients.'
),
array("October 18, 2007",
"BOINC user John Koulouris has written <a href=http://www.angelfire.com/jkoulouris-boinc/>The Big BOINC! Projects and Chronology Page</a>,
a brief history of BOINC."

View File

@ -98,15 +98,35 @@ bool do_pass(APP& app) {
);
sprintf(buf, "where workunitid=%d", wu.id);
canonical_result.clear();
bool found = false;
while (!result.enumerate(buf)) {
results.push_back(result);
if (result.id == wu.canonical_resultid) {
canonical_result = result;
found = true;
}
}
// If no canonical result found and WU had no other errors,
// something is wrong, e.g. result records got deleted prematurely.
// This is probably unrecoverable, so mark the WU as having
// an assimilation error and keep going.
//
if (!found && !wu.error_mask) {
log_messages.printf(SCHED_MSG_LOG::MSG_CRITICAL,
"[%s] no canonical result\n", wu.name
);
wu.error_mask = WU_ERROR_NO_CANONICAL_RESULT;
sprintf(buf, "error_mask=%d", wu.error_mask);
wu.update_field(buf);
}
retval = assimilate_handler(wu, results, canonical_result);
if (retval) {
// If handler failed, there's probably a volume offline
// or something like that. Better to quit.
//
log_messages.printf(SCHED_MSG_LOG::MSG_CRITICAL,
"[%s] handler returned error %d; exiting\n", wu.name, retval
);