*** empty log message ***

svn path=/trunk/boinc/; revision=2634
This commit is contained in:
David Anderson 2003-11-06 00:00:00 +00:00
parent ccc4b5ebfd
commit 1de6f097da
8 changed files with 112 additions and 42 deletions

View File

@ -7464,3 +7464,25 @@ David 4 Nov 2003
win_build/
boinc_cli.dsp
boinc_gui.dsp
David 5 Nov 2003
- The following changes fix core client crashes that occur when
reset a project, then quickly detach from the project
while downloads are occurring.
In once instance, this produced a state file that caused
the client to crash each time it started up.
- when parse an ACTIVE_TASK in state file,
verify that the corresponding result is in the right state
(RESULT_FILES_DOWNLOADED, with got_server_ack and ready_to_report false)
- when parse a RESULT in state file,
make sure it's consistent: in particular, if got_server_ack or ready_to_report
is true, the state must be RESULT_FILES_UPLOADED
- CLIENT_STATE::detach_project(): delete all the project's FILE_INFOs
(reset_project() doesn't do this)
client/
app.C
client_state.C
client_types.C
lib/
error_numbers.h

View File

@ -1288,20 +1288,33 @@ int ACTIVE_TASK::parse(FILE* fin, CLIENT_STATE* cs) {
result = cs->lookup_result(project, result_name);
if (!result) {
msg_printf(
NULL, MSG_ERROR, "ACTIVE_TASK::parse(): result not found\n"
project, MSG_ERROR, "ACTIVE_TASK::parse(): result not found\n"
);
return ERR_NULL;
}
// various sanity checks
//
if (result->got_server_ack
|| result->ready_to_report
|| result->state != RESULT_FILES_DOWNLOADED
) {
msg_printf(project, MSG_ERROR,
"ACTIVE_TASK::parse(): result is in wrong state\n"
);
return ERR_BAD_RESULT_STATE;
}
wup = result->wup;
app_version = cs->lookup_app_version(
result->app, app_version_num
);
if (!app_version) {
msg_printf(
NULL, MSG_ERROR,
project, MSG_ERROR,
"ACTIVE_TASK::parse(): app_version not found\n"
);
return -1;
return ERR_NULL;
}
return 0;
}

View File

@ -956,7 +956,8 @@ int CLIENT_STATE::report_result_error(
// - delete all apps and app_versions
// - garbage collect to delete unneeded files
//
// Note: does NOT delete persistent files or delete project dir
// Note: does NOT delete persistent files or user-supplied files;
// does not delete project dir
//
int CLIENT_STATE::reset_project(PROJECT* project) {
unsigned int i;
@ -989,6 +990,10 @@ int CLIENT_STATE::reset_project(PROJECT* project) {
http_ops->remove(&scheduler_op->http_op);
}
// mark results as server-acked.
// This will cause garbage_collect to delete them,
// and in turn their WUs will be deleted
//
for (i=0; i<results.size(); i++) {
rp = results[i];
if (rp->project == project) {
@ -1028,7 +1033,9 @@ int CLIENT_STATE::reset_project(PROJECT* project) {
// - delete account directory
//
int CLIENT_STATE::detach_project(PROJECT* project) {
vector<PROJECT*>::iterator iter;
vector<PROJECT*>::iterator project_iter;
vector<FILE_INFO*>::iterator fi_iter;
FILE_INFO* fip;
PROJECT* p;
char path[256];
int retval;
@ -1037,12 +1044,24 @@ int CLIENT_STATE::detach_project(PROJECT* project) {
msg_printf(project, MSG_INFO, "Detaching from project");
// delete all FILE_INFOs associated with this project
//
fi_iter = file_infos.begin();
while (fi_iter != file_infos.end()) {
fip = *fi_iter;
if (fip->project == project) {
file_infos.erase(fi_iter);
} else {
fi_iter++;
}
}
// find project and remove it from the vector
//
for (iter = projects.begin(); iter != projects.end(); iter++) {
p = *iter;
for (project_iter = projects.begin(); project_iter != projects.end(); project_iter++) {
p = *project_iter;
if (p == project) {
projects.erase(iter);
projects.erase(project_iter);
break;
}
}

View File

@ -879,7 +879,14 @@ int RESULT::parse_state(FILE* in) {
clear();
while (fgets(buf, 256, in)) {
if (match_tag(buf, "</result>")) return 0;
if (match_tag(buf, "</result>")) {
// restore some invariants in case of bad state file
//
if (got_server_ack || ready_to_report) {
state = RESULT_FILES_UPLOADED;
}
return 0;
}
if (parse_str(buf, "<name>", name, sizeof(name))) continue;
if (parse_str(buf, "<wu_name>", wu_name, sizeof(wu_name))) continue;
if (parse_int(buf, "<report_deadline>", report_deadline)) continue;

View File

@ -173,12 +173,12 @@ int GLOBAL_PREFS::parse(FILE* in, char* host_venue) {
}
if (strlen(host_venue)) {
if (found_venue) {
msg_printf(NULL, MSG_INFO, "Using general preferences for '%s'\n", host_venue);
msg_printf(NULL, MSG_INFO, "Using your general preferences for '%s'\n", host_venue);
} else {
msg_printf(NULL, MSG_INFO, "No general preferences for '%s'; using default preferences\n", host_venue);
msg_printf(NULL, MSG_INFO, "No general preferences for '%s'; using your default preferences\n", host_venue);
}
} else {
msg_printf(NULL, MSG_INFO, "Using default general preferences\n");
msg_printf(NULL, MSG_INFO, "Using your default general preferences\n");
}
return 0;
}

View File

@ -85,6 +85,14 @@ Several other distributed computing projects are evaluating BOINC.
<center>
<h2>News</h2>
</center>
<b>November 5, 2003</b>
<br>
The graphics of running application are updated whenever
preferences are changed.
The scheduler now issues only as many results as will fit in
the allotted amount of disk space.
<br><br>
<b>October 30, 2003</b>
<br>
New minor versions of the core client and beta-test apps have been released.
@ -103,36 +111,6 @@ Don't send two results from the same workunit to a single user.
Added JPEG support to application graphics.
Added "confirm before accept executable" mechanism.
<br><br>
<b>September 11, 2003</b>
<br>
BOINC is discussed in
<a href=http://www.nytimes.com/2003/09/11/technology/circuits/11dist.html>
an article by Joan Oleck in the New York TImes</a>.
<br><br>
<b>September 4, 2003</b>
<br>
We've released BOINC version 2.0.
All BOINC components must be upgraded to major version 2.
We've upgraded the <a
href=http://maggie.ssl.Berkeley.edu/ap/>Astropulse</a> server to 2.01 and
released <a href=http://setiboinc.ssl.Berkeley.edu/ap/download.php>BOINC core
client 2.01</a>.
This was due to an architecture and protocol change in
specifying resource estimates and limits.
<br><br>
<b>September 1, 2003</b>
<br>
BOINC server tools are now Python-based. A <a href=python.php>database
back-end API</a> allows quick development of data-manipulation utilities.
<br><br>
<b>August 15, 2003</b>
<br>
We rewrote parts of the scheduling server architecture to make operations
more flexible and efficient.
The <code>timeout_check</code>
daemon has been replaced by a more general <code>transitioner</code> daemon.
<br><br>
<a href=old_news.php>Archived news</a>
</td> </tr></table>

View File

@ -3,6 +3,36 @@ require_once("docutil.php");
page_head("Archived news");
echo "
<br><br>
<b>September 11, 2003</b>
<br>
BOINC is discussed in
<a href=http://www.nytimes.com/2003/09/11/technology/circuits/11dist.html>
an article by Joan Oleck in the New York TImes</a>.
<br><br>
<b>September 4, 2003</b>
<br>
We've released BOINC version 2.0.
All BOINC components must be upgraded to major version 2.
We've upgraded the <a
href=http://maggie.ssl.Berkeley.edu/ap/>Astropulse</a> server to 2.01 and
released <a href=http://setiboinc.ssl.Berkeley.edu/ap/download.php>BOINC core
client 2.01</a>.
This was due to an architecture and protocol change in
specifying resource estimates and limits.
<br><br>
<b>September 1, 2003</b>
<br>
BOINC server tools are now Python-based. A <a href=python.php>database
back-end API</a> allows quick development of data-manipulation utilities.
<br><br>
<b>August 15, 2003</b>
<br>
We rewrote parts of the scheduling server architecture to make operations
more flexible and efficient.
The <code>timeout_check</code>
daemon has been replaced by a more general <code>transitioner</code> daemon.
<br><br>
<b>July 25, 2003</b>
<br>
We've added two new web-site features for BOINC projects:

View File

@ -102,3 +102,4 @@
#define ERR_SCHED_SHMEM -156
// sched shmem has bad contents
#define ERR_ASYNCSELECT -157
#define ERR_BAD_RESULT_STATE -158