X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Ftests%2Frun_tar.sh;h=6425dc8e2bc068ada005c4415ed78f4f6dd559f0;hb=c67a74b55c126ec1be6c195cb2e8cb8c2e6cf868;hp=5f40e688b793c69c5ce8e2b8aa33d12c186a1663;hpb=852f34ac50727d3a012b9b325f9614b2b4fa7db7;p=fs%2Flustre-release.git diff --git a/lustre/tests/run_tar.sh b/lustre/tests/run_tar.sh index 5f40e68..6425dc8 100755 --- a/lustre/tests/run_tar.sh +++ b/lustre/tests/run_tar.sh @@ -1,68 +1,75 @@ #!/bin/bash -set -x TMP=${TMP:-/tmp} -TESTSUITELOG=${TESTSUITELOG:-$TMP/recovery-mds-scale} -LOG=${TESTSUITELOG}_$(basename $0)-$(hostname) -DEBUGLOG=${LOG}.debug +TESTLOG_PREFIX=${TESTLOG_PREFIX:-$TMP/recovery-mds-scale} +TESTNAME=${TESTNAME:-""} +[ -n "$TESTNAME" ] && TESTLOG_PREFIX=$TESTLOG_PREFIX.$TESTNAME + +LOG=$TESTLOG_PREFIX.$(basename $0 .sh)_stdout.$(hostname -s).log +DEBUGLOG=$(echo $LOG | sed 's/\(.*\)stdout/\1debug/') mkdir -p ${LOG%/*} rm -f $LOG $DEBUGLOG exec 2>$DEBUGLOG +set -x -if [ -z "$MOUNT" -o -z "$END_RUN_FILE" -o -z "$LOAD_PID_FILE" ]; then - echo "The following must be set: MOUNT END_RUN_FILE LOAD_PID_FILE" - exit 1 -fi - -echoerr () { echo "$@" 1>&2 ; } +. $(dirname $0)/functions.sh -signaled() { - echoerr "$(date +'%F %H:%M:%S'): client load was signaled to terminate" - kill -TERM -$PPID - sleep 5 - kill -KILL -$PPID -} +assert_env MOUNT END_RUN_FILE LOAD_PID_FILE LFS CLIENT_COUNT trap signaled TERM -# recovery-mds-scale uses this to signal the client loads to die +# recovery-*-scale scripts use this to signal the client loads to die echo $$ >$LOAD_PID_FILE TESTDIR=$MOUNT/d0.tar-$(hostname) +do_tar() { + tar cf - /etc | tar xf - >$LOG 2>&1 + return ${PIPESTATUS[1]} +} + CONTINUE=true while [ ! -e "$END_RUN_FILE" ] && $CONTINUE; do - echoerr "$(date +'%F %H:%M:%S'): tar run starting" - mkdir -p $TESTDIR - cd $TESTDIR - tar cf - /etc | tar xf - 2>&1 | tee $LOG & - load_pid=$! -ps -e f -o "pid ppid pgrp comm" >$TMP/client-load.ps-list - wait $load_pid - RC=${PIPESTATUS[0]} - PREV_ERRORS=$(grep "exit delayed from previous errors" $LOG) || true - if [ $RC -ne 0 -a "$ERRORS_OK" -a "$PREV_ERRORS" ]; then - echoerr "$(date +'%F %H:%M:%S'): tar errors earlier, ignoring" - RC=0 - fi - if [ $RC -eq 0 ]; then - echoerr "$(date +'%F %H:%M:%S'): tar succeeded" - cd $TMP - rm -rf $TESTDIR - echoerr "$(date +'%F %H:%M:%S'): tar run finished" - else - echoerr "$(date +'%F %H:%M:%S'): tar failed" - if [ -z "$ERRORS_OK" ]; then - echo $(hostname) >> $END_RUN_FILE + echoerr "$(date +'%F %H:%M:%S'): tar run starting" + mkdir -p $TESTDIR + USAGE=$(du -s /etc | awk '{print $1}') + FREE_SPACE=$($LFS df $TESTDIR | awk '/filesystem summary:/ {print $5}') + AVAIL=$((FREE_SPACE * 9 / 10 / CLIENT_COUNT)) + if [ $AVAIL -lt $USAGE ]; then + echoerr "no enough free disk space: need $USAGE, avail $AVAIL" + echo $(hostname) >> $END_RUN_FILE + break + fi + + cd $TESTDIR + + sync + do_tar & + wait $! + RC=$? + PREV_ERRORS=$(grep "exit delayed from previous errors" $LOG) || true + if [ $RC -ne 0 -a "$ERRORS_OK" -a "$PREV_ERRORS" ]; then + echoerr "$(date +'%F %H:%M:%S'): tar errors earlier, ignoring" + RC=0 fi - if [ $BREAK_ON_ERROR ]; then - # break - CONTINUE=false + if [ $RC -eq 0 ]; then + echoerr "$(date +'%F %H:%M:%S'): tar succeeded" + cd $TMP + rm -rf $TESTDIR + echoerr "$(date +'%F %H:%M:%S'): tar run finished" + else + echoerr "$(date +'%F %H:%M:%S'): tar failed" + if [ -z "$ERRORS_OK" ]; then + echo $(hostname) >> $END_RUN_FILE + fi + if [ $BREAK_ON_ERROR ]; then + # break + CONTINUE=false + fi fi - fi done echoerr "$(date +'%F %H:%M:%S'): tar run exiting"