diff --git a/checkin_notes b/checkin_notes
index 8189d528fa..64b617d952 100755
--- a/checkin_notes
+++ b/checkin_notes
@@ -19631,11 +19631,14 @@ David 16 Nov 2004
validate_util.C
Bruce 16 Nov 2004
- - Fix bug in ops pages displaying counts of zero if 'additional clauses' includes string
- names such as name='first_workunit'
- - Result summary pages corrected for boundary condition errors in arrays and to cover
- additional result.outcome==6 case. Result summaries now sum correctly over outcomes!
- - Add validate state to result tables, color code for validate state information
+ - Fix bug in ops pages displaying counts of zero if 'additional
+ clauses' includes string names such as name='first_workunit'
+
+ - Result summary pages corrected for boundary condition errors in
+ arrays and to cover additional result.outcome==6 case. Result
+ summaries now sum correctly over outcomes!
+ - Add validate state to result tables, color code for validate
+ state information
html/inc/
db_ops.inc
util_ops.inc
@@ -19706,10 +19709,12 @@ Bruce 17 Nov 2004
all possible states (including ones with value 0) and
eliminated the 'Unknown' values that previously appeared on the form.
These were in error. This is a clean fix, by defining (for example)
- outcome='CHOOSE_ALL', eg a non-numerical value, for the 'select ALL' case.
+ outcome='CHOOSE_ALL', eg a non-numerical value, for the 'select
+ ALL' case.
- Added a select menu for validate_state to the RESULT form.
- - In forms for outcome, validate_state, client_state and server_state, indicate
- numeric values (helpful if using additional clauses for more sophisticated queries)
+ - In forms for outcome, validate_state, client_state and
+ server_state, indicate numeric values (helpful if using
+ additional clauses for more sophisticated queries)
html/inc/
db_ops.inc
html/ops/
@@ -19985,8 +19990,10 @@ Bruce 20 Nov 2004 UTC
in building it, since CVS replaces $Id:... with a complete version ID
string. Declaration is volatile so that the compiler won't remove
it even under agressive optimizations.
- - Fixed initialization bug where calling boinc_init_graphics() would not initialize
- options correctly, creating lockfile/finished havoc in graphics APP. Thanks Reinhard!
+
+ - Fixed initialization bug where calling boinc_init_graphics()
+ would not initialize options correctly, creating
+ lockfile/finished havoc in graphics APP. Thanks Reinhard!
David, please bless this.
ALL files of form *.C affected.
@@ -20256,8 +20263,10 @@ Bruce and Reinhard 2004-11-26
under Mac OSX. Also make dist now works (make distcheck still
broken). Karl, since you were the last
person to fix up this mess, how about taking a look??
- - Added placeholders in sched/ for user: assimilator_placeholder.C and validator_placeholder.C.
- These are built by the build system, but can be replaced by user code as desired.
+ - Added placeholders in sched/ for user: assimilator_placeholder.C
+ and validator_placeholder.C.
+ These are built by the build system, but can be replaced by user
+ code as desired.
Makefile.am
configure.ac
@@ -20290,8 +20299,11 @@ Bruce and Reinhard 2004-11-26
boinc_db.inc [removed: this file is autogenerated]
Bruce 2004-11-27
- - Added a -dont_update_db command-line option to assimilator.C which prevents it from updating
- the database, and so is useful for testing.
+
+ - Added a -dont_update_db command-line option to assimilator.C
+ which prevents it from updating the database, and so is useful
+ for testing.
+
sched/
assimilator.C
@@ -20302,6 +20314,18 @@ Karl 2004-11-27
db_base.py
Bruce 2004-11-28
- - Sanity check args to parse_str(doc, tag, ...) and return false if !doc, !tag, or !strlen(tag)
+ - Sanity check args to parse_str(doc, tag, ...) and return false
+ if !doc, !tag, or !strlen(tag)
lib/
parse.C
+
+Bruce 2004-11-29
+ - Added command-line options -preserve_wu_file and -preserve_result_files
+ to the file deleter. This are useful to implement
+ for all input or output files respectively.
+ - Documented file tag.
+ sched/
+ file_deleter.C
+ doc/
+ files.php
+
diff --git a/doc/files.php b/doc/files.php
index a7ad35486f..8549acf653 100644
--- a/doc/files.php
+++ b/doc/files.php
@@ -27,6 +27,7 @@ A file is described by an XML element of the form
[ <upload_when_present/> ]
[ <sticky/> ]
[ <signature_required/> ]
+ [ <no_delete/> ]
</file_info>
The elements are as follows:
@@ -58,6 +59,16 @@ the file should be retained on the client after its initial use.");
list_item("signature_required", "If present,
indicates that the file should be verified with an RSA signature.
This generally only applies to executable files.");
+list_item("no_delete", "If present for an input (workunit) file,
+indicates that the file should NOT be removed from the download/
+directory when the workunit is completed. You should use this
+if a particular input file or files are used by more than one
+workunit, or will be used by future, unqueued workunits.");
+list_item("no_delete", "If present for an output (result) file,
+indicates that the file should NOT be removed from the upload/
+directory when the corresponding workunit is completed. This is
+probably a bad idea since your upload/ directory will eventually
+overflow!");
list_end();
echo "
These attributes allow the specification of various types of files: for
diff --git a/sched/file_deleter.C b/sched/file_deleter.C
index ad3095fb9f..7ae3dd0a99 100644
--- a/sched/file_deleter.C
+++ b/sched/file_deleter.C
@@ -1,3 +1,4 @@
+ /* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
static volatile const char *BOINCrcsid="$Id$";
// The contents of this file are subject to the BOINC Public License
// Version 1.0 (the "License"); you may not use this file except in
@@ -45,7 +46,7 @@ int wu_delete_files(WORKUNIT& wu) {
int count_deleted = 0, retval;
safe_strcpy(buf, wu.xml_doc);
-
+
p = strtok(buf, "\n");
strcpy(filename, "");
while (p) {
@@ -60,7 +61,7 @@ int wu_delete_files(WORKUNIT& wu) {
retval = dir_hier_path(
filename, config.download_dir, config.uldl_dir_fanout,
pathname
- );
+ );
if (retval) {
log_messages.printf(SCHED_MSG_LOG::CRITICAL, "[%s] dir_hier_path: %d\n", wu.name, retval);
} else {
@@ -125,6 +126,10 @@ int result_delete_files(RESULT& result) {
return 0;
}
+// set by corresponding command line arguments.
+static bool preserve_wu_files=false;
+static bool preserve_result_files=false;
+
// return nonzero if did anything
//
bool do_pass() {
@@ -139,7 +144,9 @@ bool do_pass() {
sprintf(buf, "where file_delete_state=%d limit 1000", FILE_DELETE_READY);
while (!wu.enumerate(buf)) {
did_something = true;
- wu_delete_files(wu);
+
+ if (!preserve_wu_files)
+ wu_delete_files(wu);
wu.file_delete_state = FILE_DELETE_DONE;
sprintf(buf, "file_delete_state=%d", wu.file_delete_state);
retval= wu.update_field(buf);
@@ -154,7 +161,8 @@ bool do_pass() {
sprintf(buf, "where file_delete_state=%d limit 1000", FILE_DELETE_READY);
while (!result.enumerate(buf)) {
did_something = true;
- result_delete_files(result);
+ if (!preserve_result_files)
+ result_delete_files(result);
result.file_delete_state = FILE_DELETE_DONE;
sprintf(buf, "file_delete_state=%d", result.file_delete_state);
retval= result.update_field(buf);
@@ -179,6 +187,20 @@ int main(int argc, char** argv) {
asynch = true;
} else if (!strcmp(argv[i], "-one_pass")) {
one_pass = true;
+ } else if (!strcmp(argv[i], "-preserve_wu_files")) {
+ // This option is primarily for testing. If enabled, the
+ // file_deleter will function 'normally' and will update
+ // the database, but will not actually delete the workunit
+ // input files. It's equivalent to setting
+ // [undocumented] for all workunit input files.
+ preserve_wu_files = true;
+ } else if (!strcmp(argv[i], "-preserve_result_files")) {
+ // This option is primarily for testing. If enabled, the
+ // file_deleter will function 'normally' and will update
+ // the database but will not actually delete the result
+ // output files. It's equivalent to setting
+ // [undocumented] for all result output files.
+ preserve_result_files = true;
} else if (!strcmp(argv[i], "-d")) {
log_messages.set_debug_level(atoi(argv[++i]));
} else {