mirror of https://github.com/BOINC/boinc.git
*** empty log message ***
svn path=/trunk/boinc/; revision=2634
This commit is contained in:
parent
ccc4b5ebfd
commit
1de6f097da
|
@ -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
|
||||
|
|
19
client/app.C
19
client/app.C
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -102,3 +102,4 @@
|
|||
#define ERR_SCHED_SHMEM -156
|
||||
// sched shmem has bad contents
|
||||
#define ERR_ASYNCSELECT -157
|
||||
#define ERR_BAD_RESULT_STATE -158
|
||||
|
|
Loading…
Reference in New Issue