diff --git a/continuousintegration/orchestration/tests/client_ar.sh b/continuousintegration/orchestration/tests/client_ar.sh index 29a402e0584770ca566b78ca36767ea32469cd07..56d85ddeb2efc864913cb359e6f3f2a8fb47fcf5 100644 --- a/continuousintegration/orchestration/tests/client_ar.sh +++ b/continuousintegration/orchestration/tests/client_ar.sh @@ -4,14 +4,28 @@ EOSINSTANCE=ctaeos EOS_BASEDIR=/eos/ctaeos/cta TEST_FILE_NAME_BASE=test DATA_SOURCE=/dev/urandom +ARCHIVEONLY=0 # Only archive files or do the full test? +DONOTARCHIVE=0 # files were already archived in a previous run NEED TARGETDIR +TARGETDIR='' + +COMMENT='' +# id of the test so that we can track it +TESTID="$(date +%y%m%d%H%M)" NB_PROCS=1 NB_FILES=1 +NB_DIRS=1 FILE_KB_SIZE=1 VERBOSE=0 REMOVE=0 TAILPID='' +TAPEAWAREGC=0 + +NB_BATCH_PROCS=500 # number of parallel batch processes +BATCH_SIZE=20 # number of files per batch process +GC_MINFREEBYTES=2000000000000000000 # value for space.tapeawaregc.minfreebytes initially (for default space). Set if TAPEAWAREGC=1 +SSH_OPTIONS='-o BatchMode=yes -o ConnectTimeout=10' die() { echo "$@" 1>&2 @@ -21,14 +35,28 @@ die() { usage() { cat <<EOF 1>&2 -Usage: $0 [-n <nb_files>] [-s <file_kB_size>] [-p <# parallel procs>] [-v] [-d <eos_dest_dir>] [-e <eos_instance>] [-S <data_source_file>] [-r] +Usage: $0 [-n <nb_files_perdir>] [-N <nb_dir>] [-s <file_kB_size>] [-p <# parallel procs>] [-v] [-d <eos_dest_dir>] [-e <eos_instance>] [-S <data_source_file>] [-r] -v Verbose mode: displays live logs of rmcd to see tapes being mounted/dismounted in real time -r Remove files at the end: launches the delete workflow on the files that were deleted. WARNING: THIS CAN BE FATAL TO THE NAMESPACE IF THERE ARE TOO MANY FILES AND XROOTD STARTS TO TIMEOUT. + -a Archiveonly mode: exits after file archival + -g Tape aware GC? EOF exit 1 } -while getopts "d:e:n:s:p:vS:r" o; do + +# Send annotations to Influxdb +annotate() { + TITLE=$1 + TEXT=$2 + TAGS=$3 + LINE="ctapps_tests title=\"${TITLE}\",text=\"${TEXT}\",tags=\"${TAGS}\" $(date +%s)" + curlcmd="curl --connect-timeout 2 -X POST 'https://ctapps-influx02.cern.ch:8086/write?db=annotations&u=annotations&p=annotations&precision=s' --data-binary '${LINE}'" + eval ${curlcmd} +} + + +while getopts "d:e:n:N:s:p:vS:rAPGt:m:" o; do case "${o}" in e) EOSINSTANCE=${OPTARG} @@ -39,6 +67,9 @@ while getopts "d:e:n:s:p:vS:r" o; do n) NB_FILES=${OPTARG} ;; + N) + NB_DIRS=${OPTARG} + ;; s) FILE_KB_SIZE=${OPTARG} ;; @@ -54,6 +85,21 @@ while getopts "d:e:n:s:p:vS:r" o; do r) REMOVE=1 ;; + A) + ARCHIVEONLY=1 + ;; + P) + DONOTARCHIVE=1 + ;; + G) + TAPEAWAREGC=1 + ;; + t) + TARGETDIR=${OPTARG} + ;; + m) + COMMENT=${OPTARG} + ;; *) usage ;; @@ -66,7 +112,38 @@ if [ ! -z "${error}" ]; then exit 1 fi +if [ "x${COMMENT}" = "x" ]; then + echo "No annotation will be pushed to Influxdb" +fi + +if [[ $DONOTARCHIVE == 1 ]]; then + if [[ "x${TARGETDIR}" = "x" ]]; then + echo "You must provide a target directory to run a test and skip archival" + exit 1 + fi + eos root://${EOSINSTANCE} ls -d ${EOS_BASEDIR}/${TARGETDIR} || die "target directory does not exist and there is no archive phase to create it." +fi + +if [[ $TAPEAWAREGC == 1 ]]; then + echo "Enabling tape aware garbage collector" + ssh ${SSH_OPTIONS} -l root ${EOSINSTANCE} eos space config default space.tapeawaregc.minfreebytes=${GC_MINFREEBYTES} || die "Could not set space.tapeawaregc.minfreebytes to ${GC_MINFREEBYTES}" + ssh ${SSH_OPTIONS} -l root ${EOSINSTANCE} eos space config default space.filearchivedgc=off || die "Could not disable filearchivedgc" +else + echo "Enabling file archived garbage collector" + # no ssh for CI + #ssh ${SSH_OPTIONS} -l root ${EOSINSTANCE} eos space config default space.tapeawaregc.minfreebytes=0 || die "Could not set space.tapeawaregc.minfreebytes to 0" + #ssh ${SSH_OPTIONS} -l root ${EOSINSTANCE} eos space config default space.filearchivedgc=on || die "Could not enable filearchivedgc" +fi + +EOS_DIR='' +if [[ "x${TARGETDIR}" = "x" ]]; then + EOS_DIR="${EOS_BASEDIR}/$(uuidgen)" +else + EOS_DIR="${EOS_BASEDIR}/${TARGETDIR}" +fi + STATUS_FILE=$(mktemp) +ERROR_FILE=$(mktemp) EOS_BATCHFILE=$(mktemp --suffix=.eosh) dd if=/dev/urandom of=/tmp/testfile bs=1k count=${FILE_KB_SIZE} || exit 1 @@ -79,65 +156,97 @@ fi # get some common useful helpers for krb5 . /root/client_helper.sh +# Get kerberos credentials for user1 +user_kinit +klist -s || die "Cannot get kerberos credentials for user ${USER}" + # Get kerberos credentials for poweruser1 eospower_kdestroy eospower_kinit +echo "Starting test ${TESTID}: ${COMMENT}" + +#echo "$(date +%s): Dumping objectstore list" +#ssh root@ctappsfrontend cta-objectstore-list + +test -z ${COMMENT} || annotate "test ${TESTID} STARTED" "comment: ${COMMENT}<br/>files: $((${NB_DIRS}*${NB_FILES}))<br/>filesize: ${FILE_KB_SIZE}kB" 'test,start' -EOS_DIR="${EOS_BASEDIR}/$(uuidgen)" -echo "Creating test dir in eos: ${EOS_DIR}" + +if [[ $DONOTARCHIVE == 0 ]]; then + +echo "$(date +%s): Creating test dir in eos: ${EOS_DIR}" # uuid should be unique no need to remove dir before... # XrdSecPROTOCOL=sss eos -r 0 0 root://${EOSINSTANCE} rm -Fr ${EOS_DIR} -eos root://${EOSINSTANCE} mkdir -p ${EOS_DIR} || die "Cannot create directory ${EOS_DIR} in eos instance ${EOSINSTANCE}." -echo -n "Copying files to ${EOS_DIR} using ${NB_PROCS} processes..." -for ((i=0;i<${NB_FILES};i++)); do - echo ${TEST_FILE_NAME_BASE}$(printf %.4d $i) -done | xargs --max-procs=${NB_PROCS} -iTEST_FILE_NAME xrdcp --silent /tmp/testfile root://${EOSINSTANCE}/${EOS_DIR}/TEST_FILE_NAME -echo Done. +eos root://${EOSINSTANCE} mkdir -p ${EOS_DIR} || die "Cannot create directory ${EOS_DIR} in eos instance ${EOSINSTANCE}." + +# Create directory for xrootd error reports +ERROR_DIR="/dev/shm/$(basename ${EOS_DIR})" +mkdir ${ERROR_DIR} +# not more than 100k files per directory so that we can rm and find as a standard user +for ((subdir=0; subdir < ${NB_DIRS}; subdir++)); do + eos root://${EOSINSTANCE} mkdir -p ${EOS_DIR}/${subdir} || die "Cannot create directory ${EOS_DIR}/{subdir} in eos instance ${EOSINSTANCE}." + echo -n "Copying files to ${EOS_DIR}/${subdir} using ${NB_PROCS} processes..." + for ((i=0;i<${NB_FILES};i++)); do + echo ${TEST_FILE_NAME_BASE}$(printf %.2d ${subdir})$(printf %.6d $i) +done | xargs --max-procs=${NB_PROCS} -iTEST_FILE_NAME bash -c "XRD_LOGLEVEL=Dump xrdcp /tmp/testfile root://${EOSINSTANCE}/${EOS_DIR}/${subdir}/TEST_FILE_NAME 2>${ERROR_DIR}/TEST_FILE_NAME && rm ${ERROR_DIR}/TEST_FILE_NAME || echo ERROR with xrootd transfer for file TEST_FILE_NAME, full logs in ${ERROR_DIR}/TEST_FILE_NAME" +#done | xargs --max-procs=${NB_PROCS} -iTEST_FILE_NAME xrdcp --silent /tmp/testfile root://${EOSINSTANCE}/${EOS_DIR}/${subdir}/TEST_FILE_NAME +# done | xargs -n ${BATCH_SIZE} --max-procs=${NB_BATCH_PROCS} ./batch_xrdcp /tmp/testfile root://${EOSINSTANCE}/${EOS_DIR}/${subdir} + echo Done. +done + +COPIED=0 +COPIED_EMPTY=0 +for ((subdir=0; subdir < ${NB_DIRS}; subdir++)); do + COPIED=$(( ${COPIED} + $(eos root://${EOSINSTANCE} find -f ${EOS_DIR}/${subdir} | wc -l) )) + COPIED_EMPTY=$(( ${COPIED_EMPTY} + $(eos root://${EOSINSTANCE} find -0 ${EOS_DIR}/${subdir} | wc -l) )) +done -eos root://${EOSINSTANCE} ls ${EOS_DIR} | egrep "${TEST_FILE_NAME_BASE}[0-9]+" | sed -e 's/$/ copied/' > ${STATUS_FILE} +# Only not empty files are archived by CTA +TO_BE_ARCHIVED=$((${COPIED} - ${COPIED_EMPTY})) -echo "Waiting for files to be on tape:" +ARCHIVING=${TO_BE_ARCHIVED} +ARCHIVED=0 +echo "$(date +%s): Waiting for files to be on tape:" SECONDS_PASSED=0 WAIT_FOR_ARCHIVED_FILE_TIMEOUT=$((40+${NB_FILES}/5)) -while test 0 != $(grep -c copied$ ${STATUS_FILE}); do - echo "Waiting for files to be archived to tape: Seconds passed = ${SECONDS_PASSED}" - sleep 1 +while test 0 != ${ARCHIVING}; do + echo "$(date +%s): Waiting for files to be archived to tape: Seconds passed = ${SECONDS_PASSED}" + sleep 3 let SECONDS_PASSED=SECONDS_PASSED+1 if test ${SECONDS_PASSED} == ${WAIT_FOR_ARCHIVED_FILE_TIMEOUT}; then - echo "Timed out after ${WAIT_FOR_ARCHIVED_FILE_TIMEOUT} seconds waiting for file to be archived to tape" + echo "$(date +%s): Timed out after ${WAIT_FOR_ARCHIVED_FILE_TIMEOUT} seconds waiting for file to be archived to tape" break fi - echo "$(egrep -c 'archived$|tapeonly' ${STATUS_FILE})/${NB_FILES} archived" - - # generating EOS batch script - grep copied$ ${STATUS_FILE} | sed -e 's/ .*$//' | sed -e "s;^;file info ${EOS_DIR}/;" > ${EOS_BATCHFILE} + ARCHIVED=0 + for ((subdir=0; subdir < ${NB_DIRS}; subdir++)); do + ARCHIVED=$(( ${ARCHIVED} + $(eos root://${EOSINSTANCE} ls -y ${EOS_DIR}/${subdir} | grep '^d0::t1' | wc -l) )) + sleep 1 # do not hammer eos too hard + done - # Updating all files statuses - eos root://${EOSINSTANCE} ls -y ${EOS_DIR} | sed -e 's/^\(d.::t.\).*\(test[0-9]\+\)$/\2 \1/;s/d[^0]::t[^0]/archived/;s/d[^0]::t0/copied/;s/d0::t0/error/;s/d0::t[^0]/tapeonly/' > ${STATUS_FILE} + echo "${ARCHIVED}/${TO_BE_ARCHIVED} archived" + ARCHIVING=$((${TO_BE_ARCHIVED} - ${ARCHIVED})) done -ARCHIVED=$(egrep -c 'archived$|tapeonly' ${STATUS_FILE}) - echo "###" -echo "${ARCHIVED}/${NB_FILES} archived" +echo "${ARCHIVED}/${TO_BE_ARCHIVED} archived" echo "###" -grep -q 'archived$' ${STATUS_FILE} && echo "Removing disk replica of $(grep -c 'archived$' ${STATUS_FILE}) archived files" || echo "$(grep -c 'tapeonly$' ${STATUS_FILE}) files are on tape with no disk replica" -for TEST_FILE_NAME in $(grep archived$ ${STATUS_FILE} | sed -e 's/ .*$//'); do - XrdSecPROTOCOL=sss eos -r 0 0 root://${EOSINSTANCE} file drop ${EOS_DIR}/${TEST_FILE_NAME} 1 &> /dev/null || echo "Could not remove disk replica for ${EOS_DIR}/${TEST_FILE_NAME}" -done -# Updating all files statuses -eos root://${EOSINSTANCE} ls -y ${EOS_DIR} | sed -e 's/^\(d.::t.\).*\(test[0-9]\+\)$/\2 \1/;s/d[^0]::t[^0]/archived/;s/d[^0]::t0/copied/;s/d0::t0/error/;s/d0::t[^0]/tapeonly/' > ${STATUS_FILE} +fi # DONOTARCHIVE +#echo "$(date +%s): Dumping objectstore list" +#ssh root@ctappsfrontend cta-objectstore-list + +if [[ $ARCHIVEONLY == 1 ]]; then + echo "Archiveonly mode: exiting" + exit 0 +fi -TAPEONLY=$(grep -c tapeonly$ ${STATUS_FILE}) echo "###" echo "${TAPEONLY}/${ARCHIVED} on tape only" @@ -146,15 +255,36 @@ echo "Sleeping 400 seconds to allow MGM-FST communication to settle after disk c sleep 400 echo "###" -echo "Trigerring EOS retrieve workflow as poweruser1:powerusers (12001:1200)" -#for TEST_FILE_NAME in $(grep tapeonly$ ${STATUS_FILE} | sed -e 's/ .*$//'); do -# XrdSecPROTOCOL=sss xrdfs ${EOSINSTANCE} prepare -s "${EOS_DIR}/${TEST_FILE_NAME}?eos.ruid=12001&eos.rgid=1200" || echo "Could not trigger retrieve for ${EOS_DIR}/${TEST_FILE_NAME}" -#done + +if [[ $TAPEAWAREGC == 1 ]]; then + echo "Disabling file tape aware garbage collector" + ssh ${SSH_OPTIONS} -l root ${EOSINSTANCE} eos space config default space.tapeawaregc.minfreebytes=0 || die "Could not set space.tapeawaregc.minfreebytes to 0" + # we do not need it for retrieves + # ssh ${SSH_OPTIONS} -l root ${EOSINSTANCE} eos space config default space.filearchivedgc=on || die "Could not enable filearchivedgc" +fi + + +echo "$(date +%s): Trigerring EOS retrieve workflow as poweruser1:powerusers (12001:1200)" + +rm -f ${STATUS_FILE} +touch ${STATUS_FILE} +for ((subdir=0; subdir < ${NB_DIRS}; subdir++)); do + eos root://${EOSINSTANCE} ls -y ${EOS_DIR}/${subdir} | grep 'd0::t1' | sed -e "s%\s\+% %g;s%.* \([^ ]\+\)$%${subdir}/\1%" >> ${STATUS_FILE} + # sleep 3 # do not hammer eos too hard +done # We need the -s as we are staging the files from tape (see xrootd prepare definition) -grep tapeonly$ ${STATUS_FILE} | sed -e 's/ .*$//' | KRB5CCNAME=/tmp/${EOSPOWER_USER}/krb5cc_0 XrdSecPROTOCOL=krb5 xargs --max-procs=${NB_PROCS} -iTEST_FILE_NAME xrdfs ${EOSINSTANCE} prepare -s ${EOS_DIR}/TEST_FILE_NAME +# cat ${STATUS_FILE} | KRB5CCNAME=/tmp/${EOSPOWER_USER}/krb5cc_0 XrdSecPROTOCOL=krb5 xargs --max-procs=${NB_PROCS} -iTEST_FILE_NAME xrdfs ${EOSINSTANCE} prepare -s ${EOS_DIR}/TEST_FILE_NAME 2>&1 | tee ${ERROR_FILE} +# CAREFULL HERE: ${STATUS_FILE} contains lines like: 99/test9900001 +for ((subdir=0; subdir < ${NB_DIRS}; subdir++)); do + echo -n "Recalling files to ${EOS_DIR}/${subdir} using ${NB_PROCS} processes..." + cat ${STATUS_FILE} | grep ^${subdir}/ | cut -d/ -f2 | xargs --max-procs=${NB_PROCS} -iTEST_FILE_NAME bash -c "XRD_LOGLEVEL=Dump KRB5CCNAME=/tmp/${EOSPOWER_USER}/krb5cc_0 XrdSecPROTOCOL=krb5 xrdfs ${EOSINSTANCE} prepare -s ${EOS_DIR}/${subdir}/TEST_FILE_NAME 2>${ERROR_DIR}/RETRIEVE_TEST_FILE_NAME && rm ${ERROR_DIR}/RETRIEVE_TEST_FILE_NAME || echo ERROR with xrootd transfer for file TEST_FILE_NAME, full logs in ${ERROR_DIR}/RETRIEVE_TEST_FILE_NAME" + echo Done. +done + -TO_BE_RETRIEVED=${ARCHIVED} +ARCHIVED=$(cat ${STATUS_FILE} | wc -l) +TO_BE_RETRIEVED=$(( ${ARCHIVED} - $(ls ${ERROR_DIR}/RETRIEVE_* 2>/dev/null | wc -l) )) RETRIEVING=${TO_BE_RETRIEVED} RETRIEVED=0 # Wait for the copy to appear on disk @@ -163,7 +293,7 @@ SECONDS_PASSED=0 WAIT_FOR_RETRIEVED_FILE_TIMEOUT=$((40+${NB_FILES}/5)) while test 0 != ${RETRIEVING}; do echo "$(date +%s): Waiting for files to be retrieved from tape: Seconds passed = ${SECONDS_PASSED}" - sleep 1 + sleep 3 let SECONDS_PASSED=SECONDS_PASSED+1 if test ${SECONDS_PASSED} == ${WAIT_FOR_RETRIEVED_FILE_TIMEOUT}; then @@ -172,7 +302,10 @@ while test 0 != ${RETRIEVING}; do fi RETRIEVED=0 - RETRIEVED=$(( ${RETRIEVED} + $(eos root://${EOSINSTANCE} ls -y ${EOS_DIR} | egrep '^d[1-9][0-9]*::t1' | wc -l) )) + for ((subdir=0; subdir < ${NB_DIRS}; subdir++)); do + RETRIEVED=$(( ${RETRIEVED} + $(eos root://${EOSINSTANCE} ls -y ${EOS_DIR}/${subdir} | egrep '^d[1-9][0-9]*::t1' | wc -l) )) + sleep 1 # do not hammer eos too hard + done RETRIEVING=$((${TO_BE_RETRIEVED} - ${RETRIEVED})) @@ -180,10 +313,41 @@ while test 0 != ${RETRIEVING}; do done echo "###" -echo "${RETRIEVED}/${TAPEONLY} retrieved files" +echo "${RETRIEVED}/${TO_BE_RETRIEVED} retrieved files" echo "###" -LASTCOUNT=${RETRIEVED} + +#echo "$(date +%s): Dumping objectstore list" +#ssh root@ctappsfrontend cta-objectstore-list + + +# Build the list of files with more than 1 disk copy that have been archived before (ie d>=1::t1) +rm -f ${STATUS_FILE} +touch ${STATUS_FILE} +for ((subdir=0; subdir < ${NB_DIRS}; subdir++)); do + eos root://${EOSINSTANCE} ls -y ${EOS_DIR}/${subdir} | egrep 'd[1-9][0-9]*::t1' | sed -e "s%\s\+% %g;s%.* \([^ ]\+\)$%${subdir}/\1%" >> ${STATUS_FILE} +done + +TO_STAGERRM=$(cat ${STATUS_FILE} | wc -l) + +echo "$(date +%s): $TO_STAGERRM files to be stagerrm'ed from EOS" +# We need the -s as we are staging the files from tape (see xrootd prepare definition) +cat ${STATUS_FILE} | sed -e "s%^%${EOS_DIR}/%" | XrdSecPROTOCOL=krb5 KRB5CCNAME=/tmp/${EOSPOWER_USER}/krb5cc_0 xargs --max-procs=10 -n 40 eos root://${EOSINSTANCE} stagerrm > /dev/null + + +LEFTOVER=0 +for ((subdir=0; subdir < ${NB_DIRS}; subdir++)); do + LEFTOVER=$(( ${LEFTOVER} + $(eos root://${EOSINSTANCE} ls -y ${EOS_DIR}/${subdir} | egrep '^d[1-9][0-9]*::t1' | wc -l) )) +done + +STAGERRMED=$((${TO_STAGERRM}-${LEFTOVER})) +echo "$(date +%s): $STAGERRMED files stagerrmed from EOS" + +LASTCOUNT=${STAGERRMED} + +#echo "$(date +%s): Dumping objectstore list" +#ssh root@ctappsfrontend cta-objectstore-list + # Updating all files statuses # Please note that s/d[^0]::t[^0] now maps to 'retrieved' and not 'archived' as @@ -218,7 +382,7 @@ echo "sys.retrieves HAS BEEN SUCCESSFULLY RESET TO 0 FOR ALL RETRIEVED FILES" DELETED=0 if [[ $REMOVE == 1 ]]; then echo "Waiting for files to be removed from EOS and tapes" - . /root/client_helper.sh + # . /root/client_helper.sh admin_kdestroy &>/dev/null admin_kinit &>/dev/null if $(admin_cta admin ls &>/dev/null); then @@ -231,11 +395,11 @@ if [[ $REMOVE == 1 ]]; then # recount the files on tape as the workflows may have gone further... INITIALFILESONTAPE=$(admin_cta archivefile ls --all | grep ${EOS_DIR} | wc -l) echo "Before starting deletion there are ${INITIALFILESONTAPE} files on tape." - # XrdSecPROTOCOL=sss eos -r 0 0 root://${EOSINSTANCE} rm -Fr ${EOS_DIR} & + #XrdSecPROTOCOL=sss eos -r 0 0 root://${EOSINSTANCE} rm -Fr ${EOS_DIR} & KRB5CCNAME=/tmp/${EOSPOWER_USER}/krb5cc_0 XrdSecPROTOCOL=krb5 eos root://${EOSINSTANCE} rm -Fr ${EOS_DIR} & EOSRMPID=$! # wait a bit in case eos prematurely fails... - sleep 1 + sleep 0.1 if test ! -d /proc/${EOSRMPID}; then # eos rm process died, get its status wait ${EOSRMPID} @@ -285,15 +449,22 @@ fi echo "###" -echo Results: -echo "REMOVED/RETRIEVED/TAPEONLY/ARCHIVED/NB_FILES" -echo "${DELETED}/${RETRIEVED}/${TAPEONLY}/${ARCHIVED}/${NB_FILES}" +echo "$(date +%s): Results:" +echo "REMOVED/STAGERRMED/RETRIEVED/ARCHIVED/NB_FILES" +echo "${DELETED}/${STAGERRMED}/${RETRIEVED}/${ARCHIVED}/$((${NB_FILES} * ${NB_DIRS}))" echo "###" +test -z ${COMMENT} || annotate "test ${TESTID} FINISHED" "Summary:</br>NB_FILES: $((${NB_FILES} * ${NB_DIRS}))</br>ARCHIVED: ${ARCHIVED}<br/>RETRIEVED: ${RETRIEVED}<br/>STAGERRMED: ${STAGERRMED}</br>DELETED: ${DELETED}" 'test,end' + + +#echo "$(date +%s): Dumping objectstore list" +#ssh root@ctappsfrontend cta-objectstore-list + + # stop tail test -z $TAILPID || kill ${TAILPID} &> /dev/null -test ${LASTCOUNT} -eq ${NB_FILES} && exit 0 +test ${LASTCOUNT} -eq $((${NB_FILES} * ${NB_DIRS})) && exit 0 echo "ERROR there were some lost files during the archive/retrieve test with ${NB_FILES} files (first 10):" grep -v retrieved ${STATUS_FILE} | sed -e "s;^;${EOS_DIR}/;" | head -10 diff --git a/continuousintegration/orchestration/tests/client_helper.sh b/continuousintegration/orchestration/tests/client_helper.sh index 3e7088d54479182798714fce4531cf5b7bd68333..a2bdfcaf820abfc0eb633c45406bda9b2b1bd22e 100644 --- a/continuousintegration/orchestration/tests/client_helper.sh +++ b/continuousintegration/orchestration/tests/client_helper.sh @@ -19,6 +19,11 @@ die() { exit 1 } +user_kinit() { + kinit -kt /root/${USER}.keytab ${USER}@TEST.CTA + klist +} + admin_cta() { KRB5CCNAME=/tmp/${CTAADMIN_USER}/krb5cc_0 cta-admin $@ 2>/dev/null }