- server: add stage_file to project setup; add error checking to stage_file

This commit is contained in:
David Anderson 2012-10-23 09:23:35 -07:00 committed by Oliver Bock
parent d3fbcaf8d5
commit 5cbccf7126
4 changed files with 93 additions and 29 deletions

View File

@ -6323,3 +6323,12 @@ Rom 23 Oct 2012
clientscr/ clientscr/
screensaver_x11.cpp screensaver_x11.cpp
David 23 Oct 2012
- server: add stage_file to project setup; add error checking to stage_file
py/Boinc/
setup_project.py
tools/
create_work_example
stage_file

View File

@ -344,10 +344,21 @@ def install_boinc_files(dest_dir, install_web_files, install_server_files):
force_symlink(dir('bin', 'start'), dir('bin', 'stop')) force_symlink(dir('bin', 'start'), dir('bin', 'stop'))
force_symlink(dir('bin', 'start'), dir('bin', 'status')) force_symlink(dir('bin', 'start'), dir('bin', 'status'))
map(lambda (s): install(srcdir('py/Boinc',s), dir('py/Boinc',s)), map(lambda (s): install(srcdir('py/Boinc',s), dir('py/Boinc',s)),
[ '__init__.py', 'add_util.py', 'boinc_db.py', 'boinc_project_path.py', [
'boincxml.py', 'configxml.py', 'database.py', '__init__.py',
'db_base.py', 'db_mid.py', 'projectxml.py', 'add_util.py',
'sched_messages.py', 'tools.py', 'util.py' ]) 'boinc_db.py',
'boinc_project_path.py',
'boincxml.py',
'configxml.py',
'database.py',
'db_base.py',
'db_mid.py',
'projectxml.py',
'sched_messages.py',
'tools.py',
'util.py'
])
print >>open(dir('bin', 'boinc_path_config.py'), 'w'), ''' print >>open(dir('bin', 'boinc_path_config.py'), 'w'), '''
# Generated by make_project # Generated by make_project
import sys, os import sys, os
@ -372,23 +383,54 @@ sys.path.insert(0, os.path.join('%s', 'py'))
map(lambda (s): install(builddir('sched',s), dir('cgi-bin',s)), map(lambda (s): install(builddir('sched',s), dir('cgi-bin',s)),
[ 'cgi', 'file_upload_handler']) [ 'cgi', 'file_upload_handler'])
map(lambda (s): install(builddir('sched',s), dir('bin',s)), map(lambda (s): install(builddir('sched',s), dir('bin',s)),
[ 'make_work', 'feeder', 'transitioner', 'transitioner_catchup.php', [
'sample_bitwise_validator', 'sample_trivial_validator', 'antique_file_deleter',
'file_deleter', 'antique_file_deleter', 'assimilator.py',
'sample_dummy_assimilator', 'census',
'sample_assimilator', 'sample_work_generator', 'db_dump',
'single_job_assimilator', 'db_purge',
'assimilator.py', 'pymw_assimilator.py', 'delete_file',
'update_stats', 'db_dump', 'db_purge', 'show_shmem', 'census', 'feeder',
'delete_file', 'get_file', 'put_file' ]) 'file_deleter',
'get_file',
'make_work',
'put_file',
'pymw_assimilator.py',
'sample_assimilator',
'sample_bitwise_validator',
'sample_dummy_assimilator',
'sample_trivial_validator',
'sample_work_generator',
'show_shmem',
'single_job_assimilator',
'transitioner',
'transitioner_catchup.php',
'update_stats'
])
map(lambda (s): install(builddir('vda',s), dir('bin',s)), map(lambda (s): install(builddir('vda',s), dir('bin',s)),
[ 'vda', 'vdad' ]) [ 'vda', 'vdad' ])
map(lambda (s): install(srcdir('tools',s), dir('bin',s)), map(lambda (s): install(srcdir('tools',s), dir('bin',s)),
[ 'appmgr', 'create_work', 'xadd', 'dbcheck_files_exist', 'run_in_ops', [
'update_versions', 'parse_config', 'grep_logs', 'db_query', 'appmgr',
'watch_tcp', 'sign_executable', 'dir_hier_move', 'boinc_submit',
'manage_privileges', 'cancel_jobs', 'cancel_jobs',
'dir_hier_path', 'boinc_submit', 'demo_submit', 'demo_query' ]) 'create_work',
'dbcheck_files_exist',
'db_query',
'demo_query',
'demo_submit',
'dir_hier_move',
'dir_hier_path',
'grep_logs',
'manage_privileges',
'parse_config',
'run_in_ops',
'sign_executable',
'stage_file',
'update_versions',
'watch_tcp',
'xadd'
])
map(lambda (s): install(srcdir('lib',s), dir('bin',s)), map(lambda (s): install(srcdir('lib',s), dir('bin',s)),
[ 'crypt_prog' ]) [ 'crypt_prog' ])
map(lambda (s): install(srcdir('sched',s), dir('',s)), map(lambda (s): install(srcdir('sched',s), dir('',s)),

13
tools/create_work_example Normal file → Executable file
View File

@ -1,12 +1,19 @@
#!/bin/bash
# example of how to create a workunit # example of how to create a workunit
# copy the input file from a known place into the download hierarchy # stage the input file
# #
cp download/input `bin/dir_hier_path input` bin/stage_file --copy project.xml
if [ $? -ne 0 ]
then
echo "stage_file failed"
exit 1
fi
# Run create_work to create the WU. # Run create_work to create the WU.
# The WU name ("wu_nodelete") includes the string "nodelete". # The WU name ("wu_nodelete") includes the string "nodelete".
# This causes the file deleter to not delete its input files, # This causes the file deleter to not delete its input files,
# so that we can use make_work. # so that we can use make_work.
# #
bin/create_work --appname example_app --wu_name wu_nodelete --wu_template templates/example_app_in --result_template templates/example_app_out input bin/create_work --appname example_app --wu_name wu_nodelete --wu_template templates/example_app_in --result_template templates/example_app_out project.xml

View File

@ -30,18 +30,24 @@
// Use this if you specify <gzip> in the <file_info> // Use this if you specify <gzip> in the <file_info>
// --copy Copy the file (default is to move it) // --copy Copy the file (default is to move it)
function error_exit($msg) {
echo $msg;
exit(1);
}
if (!file_exists("html/inc/dir_hier.inc") if (!file_exists("html/inc/dir_hier.inc")
|| !file_exists("config.xml") || !file_exists("config.xml")
) { ) {
die("This script must be run in the project directory.\n"); error_exit("This script must be run in the project directory.\n");
} }
require_once("html/inc/dir_hier.inc"); require_once("html/inc/dir_hier.inc");
require_once("html/inc/util_basic.inc"); require_once("html/inc/util_basic.inc");
function usage() { function usage() {
die("usage: stage_file [--gzip] [--copy] file error_exit("usage: stage_file [--gzip] [--copy] file
--gzip make a gzipped version of file --gzip make a gzipped version of file for compressed download
(use with <gzip/> in the input template)
--copy copy the file (default is to move it) --copy copy the file (default is to move it)
"); ");
} }
@ -65,13 +71,13 @@ for ($i=1; $i<$argc-1; $i++) {
} }
$path = $argv[$argc-1]; $path = $argv[$argc-1];
if (!file_exists($path)) die("no such file: $path\n"); if (!file_exists($path)) error_exit("no such file: $path\n");
$file = basename($path); $file = basename($path);
$fanout = parse_config(get_config(), "<uldl_dir_fanout>"); $fanout = parse_config(get_config(), "<uldl_dir_fanout>");
if (!$fanout) die("can't find <uldl_dir_fanout> in config.xml"); if (!$fanout) error_exit("can't find <uldl_dir_fanout> in config.xml");
$download_dir = parse_config(get_config(), "<download_dir>"); $download_dir = parse_config(get_config(), "<download_dir>");
if (!$download_dir) die("can't find <download_dir> in config.xml"); if (!$download_dir) error_exit("can't find <download_dir> in config.xml");
$dl_path = dir_hier_path($file, $download_dir, $fanout); $dl_path = dir_hier_path($file, $download_dir, $fanout);
$dl_md5_path = "$dl_path.md5"; $dl_md5_path = "$dl_path.md5";
@ -89,7 +95,7 @@ if (file_exists($dl_path)) {
$dl_md5 = md5_file($dl_path); $dl_md5 = md5_file($dl_path);
} }
if ($md5 != $dl_md5) { if ($md5 != $dl_md5) {
die("There is already a file in your project's download directory error_exit("There is already a file in your project's download directory
with that name, but different contents. with that name, but different contents.
This is not allowed by BOINC, which requires that files are 'immutable'. This is not allowed by BOINC, which requires that files are 'immutable'.
Please use a different file name. Please use a different file name.
@ -119,7 +125,7 @@ if ($gzip) {
if (!file_exists($dl_gzip_path)) { if (!file_exists($dl_gzip_path)) {
$output = system("gzip -c $dl_path > $dl_gzip_path", $retval); $output = system("gzip -c $dl_path > $dl_gzip_path", $retval);
if ($retval) { if ($retval) {
die("failed to gzip file: $output\n"); error_exit("failed to gzip file: $output\n");
} }
} }
} }