- 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/ html/inc/
team.inc team.inc
Janus 8 Oct 2007 Janus 8 Oct 2007
Bittorrent: Bittorrent:
- Changed the torrent generator behaviour from trying only the exact path - 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 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/ html/bt/
torrent_cache.php torrent_cache.php
database/ database/
bittorrent_peers.sql bittorrent_peers.sql
Rom 8 Oct 2007 Rom 8 Oct 2007
- MGR: User errors are supposed to be red, not internal errors. - MGR: User errors are supposed to be red, not internal errors.
@ -9411,9 +9411,9 @@ Janus 10 Oct 2007
html/bt html/bt
announce.php announce.php
scrape.php scrape.php
inc/ inc/
bittorrent_ipbans.sql (new) bittorrent_ipbans.sql (new)
Charlie 10 Oct 2007 Charlie 10 Oct 2007
- Mac V5 GFX API: In setMacPList(), if resource already exists, don't - Mac V5 GFX API: In setMacPList(), if resource already exists, don't
@ -9450,7 +9450,7 @@ Eric K. 11 Oct 2007
html/ html/
user/ user/
create_profile.php create_profile.php
Charlie 11 Oct 2007 Charlie 11 Oct 2007
- V6 GFX: Call waitpid to prevent gfx_switcher leaving zombie processes. - V6 GFX: Call waitpid to prevent gfx_switcher leaving zombie processes.
@ -9617,26 +9617,26 @@ Charlie 16 Oct 2007
boinc_api.C boinc_api.C
David 17 Oct 2007 David 17 Oct 2007
- client: improve log messages - client: improve log messages
client/ client/
cs_scheduler.C cs_scheduler.C
pers_file_xfer.C pers_file_xfer.C
scheduler_op.C scheduler_op.C
clienttray/ clienttray/
tray_win.cpp tray_win.cpp
Charlie 18 Oct 2007 Charlie 18 Oct 2007
- Fix compiler warning, - Fix compiler warning,
client/ client/
cs_scheduler.C cs_scheduler.C
David 18 Oct 2007 David 18 Oct 2007
- client (win): fix time-zone code - client (win): fix time-zone code
client/ client/
hostinfo_win.C hostinfo_win.C
Rom 18 Oct 2007 Rom 18 Oct 2007
- Add the Global prefix to the shared memory segment that - Add the Global prefix to the shared memory segment that
@ -9700,12 +9700,12 @@ Eric K 19 Oct 2007
David 20 Oct 2007 David 20 Oct 2007
- client: cc_config.xml can contain one or more <alt_platform> elements - client: cc_config.xml can contain one or more <alt_platform> elements
specifying additional alternate platforms. specifying additional alternate platforms.
client/ client/
cs_platforms.C cs_platforms.C
log_flags.C,h log_flags.C,h
Reinhard 21 Oct 2007 Reinhard 21 Oct 2007
- configure.ac: fixed handling of curl-libs to avoid erroneous - configure.ac: fixed handling of curl-libs to avoid erroneous
@ -9749,30 +9749,30 @@ Rytis 22 Oct 2007
stats.php stats.php
David 22 Oct 2007 David 22 Oct 2007
- API: some changes relevant only to SETI@home. - API: some changes relevant only to SETI@home.
api/ api/
graphics2.h graphics2.h
reduce.h reduce.h
reduce_lib.C reduce_lib.C
reduce_main.C reduce_main.C
David 22 Oct 2007 David 22 Oct 2007
- GUI RPC: fix format of <auth2> request - GUI RPC: fix format of <auth2> request
- GUI RPC: don't enable network on bad request - GUI RPC: don't enable network on bad request
client/ client/
gui_rpc_server_ops.C gui_rpc_server_ops.C
lib/ lib/
gui_rpc_client.C gui_rpc_client.C
David 22 Oct 2007 David 22 Oct 2007
- client: remove unparsed XML error for <active_task_state> - client: remove unparsed XML error for <active_task_state>
- client: remove spurious error if include <alt_platform> in cc_config.xml - client: remove spurious error if include <alt_platform> in cc_config.xml
client/ client/
app.C app.C
log_flags.C log_flags.C
Rom 23 Oct 2007 Rom 23 Oct 2007
- client: read_file_string was modified sometime ago to support tail - client: read_file_string was modified sometime ago to support tail
@ -9781,3 +9781,27 @@ Rom 23 Oct 2007
client/ client/
app_control.C 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_SUCCESS_RESULTS 4
#define WU_ERROR_TOO_MANY_TOTAL_RESULTS 8 #define WU_ERROR_TOO_MANY_TOTAL_RESULTS 8
#define WU_ERROR_CANCELLED 16 #define WU_ERROR_CANCELLED 16
#define WU_ERROR_NO_CANONICAL_RESULT 32
struct WORKUNIT { struct WORKUNIT {
int id; int id;

View File

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

View File

@ -466,14 +466,14 @@ array('boinc_server_status.zip',
); );
$web = array( $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', 'Boinc LCS',
'', '3.0 beta',
'Live Client State for an unlimited number of clients (needs a webserver)', 'Shows the current state and other information from an unlimited number of BOINC clients connected to the Internet.',
'http://conmunich.dyndns.org/cm/development/boinc2/', 'http://www.conmunix.net/boinc-lcs',
'Mysql, Perl and PHP', 'Apache, 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.', '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!',
'1139033692' '1193023938'
), ),
array('boincphpgui-2.3.tar.gz', array('boincphpgui-2.3.tar.gz',
'BoincPHP5-GUI', 'BoincPHP5-GUI',

View File

@ -2,6 +2,19 @@
$project_news = array( $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", 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>, "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." a brief history of BOINC."

View File

@ -98,15 +98,35 @@ bool do_pass(APP& app) {
); );
sprintf(buf, "where workunitid=%d", wu.id); sprintf(buf, "where workunitid=%d", wu.id);
canonical_result.clear();
bool found = false;
while (!result.enumerate(buf)) { while (!result.enumerate(buf)) {
results.push_back(result); results.push_back(result);
if (result.id == wu.canonical_resultid) { if (result.id == wu.canonical_resultid) {
canonical_result = result; 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); retval = assimilate_handler(wu, results, canonical_result);
if (retval) { 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, log_messages.printf(SCHED_MSG_LOG::MSG_CRITICAL,
"[%s] handler returned error %d; exiting\n", wu.name, retval "[%s] handler returned error %d; exiting\n", wu.name, retval
); );