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 {