mirror of https://github.com/BOINC/boinc.git
285 lines
5.3 KiB
Plaintext
285 lines
5.3 KiB
Plaintext
|
$Id: NOTE 192 2009-04-20 16:07:25Z toni $
|
||
|
|
||
|
|
||
|
----------------------------------------
|
||
|
|
||
|
|
||
|
* The unity for a submission is the Job.
|
||
|
** A Job has a set of input files
|
||
|
which are associated to it as soon as it is created.
|
||
|
** Jobs are created by "submit" operations.
|
||
|
** A job has a user-decided JOBID, which is required for retrieval.
|
||
|
*** The user-decided JOBID can also be left empty,
|
||
|
in which case a random one will be generated
|
||
|
** A job may have ore or more TAGs, which are used to facilitate retrieval
|
||
|
** Current step, maximum step
|
||
|
** Owner (user name)
|
||
|
** Current safety level
|
||
|
** URL (or project)
|
||
|
|
||
|
|
||
|
|
||
|
* Files are cached in a pool to avoid duplicate uploads
|
||
|
|
||
|
* Files are cached in a pool to avoid duplicate storage
|
||
|
** cache is in <WR>/pool
|
||
|
|
||
|
* Retrieve operations fetch a given ID or all those with a given TAG
|
||
|
|
||
|
* Workflow files are kept in <WR>/userid_jobid
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
----------------------------------------
|
||
|
|
||
|
RBOINC_TRASH_DIR=/home/boinc/projects/LUNA/workflow_results/rboinc_trash_dir
|
||
|
0 * * * * find $RBOINC_TRASH_DIR -depth -not -type d -mtime +2 -print
|
||
|
0 * * * * find $RBOINC_TRASH_DIR -depth -not -type d -mtime +2 -delete
|
||
|
0 * * * * find $RBOINC_TRASH_DIR -depth -mindepth 1 -type d -empty -delete
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
----------------------------------------
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
SUBMIT
|
||
|
|
||
|
* die if files !xsist OK
|
||
|
* die if !authenticator OK
|
||
|
* make description xml OK
|
||
|
* make random upload_id OK
|
||
|
* create 0 index, if not given OK
|
||
|
* up to dav OK
|
||
|
* call rpc, send random id OK
|
||
|
|
||
|
(Better? first authenticate, get rid from server.
|
||
|
Alternatively: use webdav authentication based on server tables)
|
||
|
|
||
|
|
||
|
* rpc callee
|
||
|
- args: random_id
|
||
|
url
|
||
|
auth
|
||
|
- authenticate (-)
|
||
|
- if OK
|
||
|
- build work_id=name/dir in wft
|
||
|
- cp/mv to wfr
|
||
|
- create_work
|
||
|
- return work_id
|
||
|
- if NOTOK
|
||
|
- remove dav dir (not)
|
||
|
- return error code
|
||
|
|
||
|
|
||
|
* get result id
|
||
|
* if error: remove dav upload_id
|
||
|
* print result
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
* dav area
|
||
|
Enable mod_dav, mod_dav_fs. On debian: use a2enmod
|
||
|
Need a DAV area $DAV_AREA
|
||
|
Make an user for uploading and an user file OUTSIDE of the DAV area
|
||
|
A good solution: put them in PROJECT_DIR
|
||
|
|
||
|
The dav area will be good for downloading (via symlinks), as well.
|
||
|
No indexes will be shown.
|
||
|
|
||
|
|
||
|
|
||
|
* wfr area
|
||
|
- */user/job
|
||
|
|
||
|
Remember that it must be writable by the user which executes
|
||
|
apache (on debian: www-data)
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
----------------------------------------
|
||
|
|
||
|
|
||
|
|
||
|
RETRIEVE
|
||
|
|
||
|
|
||
|
|
||
|
* call rpc
|
||
|
|
||
|
* callee:
|
||
|
- authenticate user with boinc
|
||
|
- generate a random identifier
|
||
|
- create dir in DAV
|
||
|
- make symlinks from a download area to the wfr
|
||
|
all non-recent result files can be symlinked
|
||
|
- return id as xml
|
||
|
|
||
|
* cd to the DAV/code dir
|
||
|
- retrieve stuff
|
||
|
- optionally delete them
|
||
|
|
||
|
Note that symlinks in the DAV directory are not visible when listed.
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
----------------------------------------
|
||
|
|
||
|
Cpan: add modules on boinc@grosso
|
||
|
|
||
|
export PERL5LIB=/home/boinc/toni/perl/lib/
|
||
|
perl -MCPAN -eshell
|
||
|
o conf makepl_arg "LIB=~/toni/perl/lib PREFIX=~/toni/perl"
|
||
|
|
||
|
DEPLOY:
|
||
|
copy perl modules from boinc to ps3grid
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
----------------------------------------
|
||
|
|
||
|
SECURITY TODO
|
||
|
|
||
|
* Add boinc authentication to S/R
|
||
|
* Retrieve: check for user "owning" the directory
|
||
|
* Restrict TCL command set
|
||
|
* Restrict parameters:
|
||
|
- Priority
|
||
|
- N. of runs
|
||
|
- ...
|
||
|
* Possibly, add digest authentication to DAV (pre-shared secret, not great).
|
||
|
* Refuse odd chars in tag name OK
|
||
|
* get DAV from authentication step
|
||
|
|
||
|
|
||
|
TODO
|
||
|
|
||
|
* Remove getopt::simple
|
||
|
* Refactor server OK
|
||
|
* stop/resume
|
||
|
* status/status all
|
||
|
|
||
|
|
||
|
|
||
|
----------------------------------------
|
||
|
|
||
|
# Figure out the current step with respect to the others
|
||
|
|
||
|
|
||
|
pushd $GROUP_DIR
|
||
|
shopt -s nullglob
|
||
|
|
||
|
namelist=`ls -1 *_0 | cut -f1 -d- | sort | uniq`
|
||
|
catchup=0
|
||
|
|
||
|
if [[ -n $namelist ]]; then
|
||
|
maxlist=""
|
||
|
for i in $namelist; do
|
||
|
maxstepi=`ls -1 $i-*_0 | cut -f3 -d- |sort -n|tail -1`
|
||
|
maxlist="$maxlist $maxstepi"
|
||
|
done
|
||
|
|
||
|
# use perl to decide
|
||
|
threshold=`perl -e '
|
||
|
@l=reverse sort {$a<=>$b} @ARGV;
|
||
|
print $l[0]-2;
|
||
|
' $maxlist`
|
||
|
|
||
|
if (( $NEW_STEP < $threshold )); then
|
||
|
echo "I should run in catchup mode, thr $threshold"
|
||
|
catchup=1
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
shopt -u nullglob
|
||
|
popd
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
----------------------------------------
|
||
|
|
||
|
|
||
|
http://www.perl.com/pub/a/2002/11/14/exception.html
|
||
|
|
||
|
|
||
|
|
||
|
use Error qw(:try);
|
||
|
|
||
|
try {
|
||
|
some code;
|
||
|
code that might thrown an exception;
|
||
|
more code;
|
||
|
return;
|
||
|
}
|
||
|
catch Error with {
|
||
|
my $ex = shift; # Get hold of the exception object
|
||
|
handle the exception;
|
||
|
}
|
||
|
finally {
|
||
|
cleanup code;
|
||
|
}; # <-- Remember the semicolon
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
----------------------------------------
|
||
|
|
||
|
Installing Perl packages as non-root
|
||
|
|
||
|
http://tldp.org/LDP/LGNET/139/okopnik.html
|
||
|
|
||
|
|
||
|
----------------------------------------
|
||
|
|
||
|
http://boinc.berkeley.edu/trac/wiki/WebRpc#lookup_account
|
||
|
|
||
|
----------------------------------------
|
||
|
|
||
|
|
||
|
EXAMPLE INVOCATION
|
||
|
|
||
|
|
||
|
ON GROSSO
|
||
|
|
||
|
echo \
|
||
|
perl -w boinc_submit.pl -name N1 -group TONIR3 \
|
||
|
-conf sample/TONI/input_boinc_gpu.conf -pdb sample/TONI/grama.ionized.pdb \
|
||
|
-psf sample/TONI/grama.ionized.psf -coor sample/TONI/equil.coor \
|
||
|
-vel sample/TONI/equil.vel -par sample/TONI/parameters \
|
||
|
-url http://www.ps3grid.net:8383/rboinc_cgi -dry
|
||
|
|
||
|
echo \
|
||
|
perl -w boinc_retrieve.pl -group TONIR3 -name N1 \
|
||
|
-url http://www.ps3grid.net:8383/rboinc_cgi \
|
||
|
-into /tmp/
|
||
|
|
||
|
|
||
|
|
||
|
Prerequisites for client:
|
||
|
|
||
|
XML::Simple
|
||
|
Error
|
||
|
|
||
|
|