X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=grid%2Fcommon.sh;h=106aad617cde448936a416e5355440ce000605dd;hb=7cd4de9d40dbafc8d2a42a044143e7ab85328397;hp=c466050077c53d5b93f20bc216fdbd292d367084;hpb=1f5bb620cbb7768762c16914775fa7412b431c5b;p=clitk.git diff --git a/grid/common.sh b/grid/common.sh index c466050..106aad6 100644 --- a/grid/common.sh +++ b/grid/common.sh @@ -27,19 +27,89 @@ test "${answer}" == "n" && return 1 check_user "${prompt}" } +# checks if the lfn file exists function file_exists { lfnfile="${1:?"provide lfn to file"}" lfc-ls ${lfnfile} 2>&1 > /dev/null } +# upload file to grid storage element +# source can be a relative or an absolute path to the source file +# dest must be the lfn to the target **file** (not the directory) +# if dest already exists, it prompts the user for overwritting +function upload_file { +sourcefile=${1:?"provide source file"} +destlfn=${2:?"provide destination file lfn"} +sourcefile="$(readlink -f "${sourcefile}")" # convert to absolute path +test -f "${sourcefile}" || error "can't find ${sourcefile}" +echo "uploading ${sourcefile} to ${destlfn}" +if file_exists "${destlfn}"; then + check_user "${destlfn} already exists. overwrite it?" || return 2 + lcg-del -a "lfn:${destlfn}" || error "lcg-del error" +fi +echo "lets roll" + +local pending_ses=${SES} +local registered=false +while [ "x${pending_ses}" != "x" ] +do + #select a se from list + local S=`echo ${pending_ses} | awk '{print $1}'` + #update list of SEs + local new_list="" + for i in `echo ${pending_ses}` + do + if [ "$i" != "${S}" ] + then + new_list="${new_list} ${i}" + fi + done + pending_ses=${new_list} + local TEMP=`mktemp lcg-XXXXX` + if [ "${registered}" = "false" ] + then + echo -n "Registering release to ${S}..." + lcg-cr -v -d ${S} -l "lfn:${destlfn}" "file:${sourcefile}" &>${TEMP} + if [ $? != 0 ] + then + echo -e "\t [\033[31m FAILED \033[0m]" + cat ${TEMP} + \rm ${TEMP} + else + echo -e "\t [\033[32m OK \033[0m]" + registered=true + \rm ${TEMP} + fi + else + echo -n "Replicating release to ${S}..." + lcg-rep -v -d ${S} "lfn:${destlfn}" &>${TEMP} + if [ $? != 0 ] + then + echo -e "\t [\033[31m FAILED \033[0m]" + cat ${TEMP} + \rm ${TEMP} + else + echo -e "\t [\033[32m OK \033[0m]" + \rm ${TEMP} + fi + fi +done +} + + # common path used lfnbase="/grid/biomed/creatis/fgate/" -lfnrelease="${lfnbase}releases/" -lfnworkflow="${lfnbase}" +lfnrelease="/grid/biomed/creatis/vip/data/groups/GateLab/releases/" +lfnworkflow="${lfnbase}workflow/" lfngasw="${lfnbase}gasw/" lfnscript="${lfnbase}bin/" +#list of SEs used for storage. Don't modify this list unless you know +# what you're doing. Replicating the release in a bad place (e.g. on a +# remote continent) can dramatically slow down the transfers +SES="ccsrm02.in2p3.fr sbgse1.in2p3.fr marsedpm.in2p3.fr" + # define the prefix for uploaded file # default to local machine username prefix="${USER:?"USER must be set"}_"