Whamcloud - gitweb
Branch HEAD
[fs/lustre-release.git] / lustre / tests / run_tar.sh
1 #!/bin/bash
2 set -x
3
4 TMP=${TMP:-/tmp}
5
6 TESTSUITELOG=${TESTSUITELOG:-$TMP/recovery-mds-scale}
7 LOG=${TESTSUITELOG}_$(basename $0)-$(hostname)
8 DEBUGLOG=${LOG}.debug
9
10 mkdir -p ${LOG%/*}
11
12 rm -f $LOG $DEBUGLOG
13 exec 2>$DEBUGLOG
14
15 if [ -z "$MOUNT" -o -z "$END_RUN_FILE" -o -z "$LOAD_PID_FILE" ]; then
16     echo "The following must be set: MOUNT END_RUN_FILE LOAD_PID_FILE"
17     exit 1
18 fi
19
20 echoerr () { echo "$@" 1>&2 ; }
21
22 signaled() {
23     echoerr "$(date +'%F %H:%M:%S'): client load was signaled to terminate"
24     kill -TERM -$PPID
25     sleep 5
26     kill -KILL -$PPID
27 }
28
29 trap signaled TERM
30
31 # recovery-mds-scale uses this to signal the client loads to die
32 echo $$ >$LOAD_PID_FILE
33
34 TESTDIR=$MOUNT/d0.tar-$(hostname)
35
36 CONTINUE=true
37 while [ ! -e "$END_RUN_FILE" ] && $CONTINUE; do
38     echoerr "$(date +'%F %H:%M:%S'): tar run starting"
39     mkdir -p $TESTDIR
40     cd $TESTDIR
41     tar cf - /etc | tar xf - 2>&1 | tee $LOG &
42     load_pid=$!
43 ps -e f -o "pid ppid pgrp comm" >$TMP/client-load.ps-list
44     wait $load_pid
45     RC=${PIPESTATUS[0]}
46     PREV_ERRORS=$(grep "exit delayed from previous errors" $LOG) || true
47     if [ $RC -ne 0 -a "$ERRORS_OK" -a "$PREV_ERRORS" ]; then
48         echoerr "$(date +'%F %H:%M:%S'): tar errors earlier, ignoring"
49         RC=0
50     fi
51     if [ $RC -eq 0 ]; then
52         echoerr "$(date +'%F %H:%M:%S'): tar succeeded"
53         cd $TMP
54         rm -rf $TESTDIR
55         echoerr "$(date +'%F %H:%M:%S'): tar run finished"
56     else
57         echoerr "$(date +'%F %H:%M:%S'): tar failed"
58         if [ -z "$ERRORS_OK" ]; then
59             echo $(hostname) >> $END_RUN_FILE
60         fi
61         if [ $BREAK_ON_ERROR ]; then
62             # break
63             CONTINUE=false
64         fi
65     fi
66 done
67
68 echoerr "$(date +'%F %H:%M:%S'): tar run exiting"