]> Creatis software - clitk.git/blobdiff - grid/common.sh
updated common.dh for release relplicaion
[clitk.git] / grid / common.sh
index c466050077c53d5b93f20bc216fdbd292d367084..106aad617cde448936a416e5355440ce000605dd 100644 (file)
@@ -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"}_"