Whamcloud - gitweb
Revert "LU-2469 tests: use MDS/OSTDEV and MDS/OSTDEVBASE with zfs"
[fs/lustre-release.git] / lustre / tests / test-framework.sh
index d7a7a83..8a08dff 100644 (file)
@@ -336,7 +336,7 @@ version_code() {
     # split arguments like "1.8.6-wc3" into "1", "8", "6", "wc3"
     eval set -- $(tr "[:punct:]" " " <<< $*)
 
-    echo -n $((($1 << 16) | ($2 << 8) | $3))
+    echo -n "$((($1 << 16) | ($2 << 8) | $3))"
 }
 
 export LINUX_VERSION=$(uname -r | sed -e "s/[-.]/ /3" -e "s/ .*//")
@@ -697,7 +697,7 @@ cleanup_gss() {
 facet_type() {
        local facet=$1
 
-       echo -n $facet | sed -e 's/^fs[0-9]\+//' -e 's/[0-9]\+//' |
+       echo -n $facet | sed -e 's/^fs[0-9]\+//' -e 's/[0-9_]\+//' |
                tr '[:lower:]' '[:upper:]'
 }
 
@@ -1531,6 +1531,7 @@ TESTLOG_PREFIX=$TESTLOG_PREFIX \
 TESTNAME=$TESTNAME \
 DBENCH_LIB=$DBENCH_LIB \
 DBENCH_SRC=$DBENCH_SRC \
+LFS=$LFS \
 run_${load}.sh" &
     local ppid=$!
     log "Started client load: ${load} on $client"
@@ -2109,42 +2110,42 @@ obd_name() {
 }
 
 replay_barrier() {
-    local facet=$1
-    do_facet $facet "sync; sync; sync"
-    df $MOUNT
+       local facet=$1
+       do_facet $facet "sync; sync; sync"
+       df $MOUNT
 
-    # make sure there will be no seq change
-    local clients=${CLIENTS:-$HOSTNAME}
-    local f=fsa-\\\$\(hostname\)
-    do_nodes $clients "mcreate $MOUNT/$f; rm $MOUNT/$f"
-    do_nodes $clients "if [ -d $MOUNT2 ]; then mcreate $MOUNT2/$f; rm $MOUNT2/$f; fi"
+        # make sure there will be no seq change
+       local clients=${CLIENTS:-$HOSTNAME}
+       local f=fsa-\\\$\(hostname\)
+       do_nodes $clients "mcreate $MOUNT/$f; rm $MOUNT/$f"
+       do_nodes $clients "if [ -d $MOUNT2 ]; then mcreate $MOUNT2/$f; rm $MOUNT2/$f; fi"
 
-    local svc=${facet}_svc
-    do_facet $facet $LCTL --device %${!svc} notransno
-    do_facet $facet $LCTL --device %${!svc} readonly
-    do_facet $facet $LCTL mark "$facet REPLAY BARRIER on ${!svc}"
-    $LCTL mark "local REPLAY BARRIER on ${!svc}"
+       local svc=${facet}_svc
+       do_facet $facet $LCTL --device ${!svc} notransno
+       do_facet $facet $LCTL --device ${!svc} readonly
+       do_facet $facet $LCTL mark "$facet REPLAY BARRIER on ${!svc}"
+       $LCTL mark "local REPLAY BARRIER on ${!svc}"
 }
 
 replay_barrier_nodf() {
-    local facet=$1    echo running=${running}
-    do_facet $facet "sync; sync; sync"
-    local svc=${facet}_svc
-    echo Replay barrier on ${!svc}
-    do_facet $facet $LCTL --device %${!svc} notransno
-    do_facet $facet $LCTL --device %${!svc} readonly
-    do_facet $facet $LCTL mark "$facet REPLAY BARRIER on ${!svc}"
-    $LCTL mark "local REPLAY BARRIER on ${!svc}"
+       local facet=$1    echo running=${running}
+       do_facet $facet "sync; sync; sync"
+       local svc=${facet}_svc
+       echo Replay barrier on ${!svc}
+       do_facet $facet $LCTL --device ${!svc} notransno
+       do_facet $facet $LCTL --device ${!svc} readonly
+       do_facet $facet $LCTL mark "$facet REPLAY BARRIER on ${!svc}"
+       $LCTL mark "local REPLAY BARRIER on ${!svc}"
 }
 
 replay_barrier_nosync() {
-    local facet=$1    echo running=${running}
-    local svc=${facet}_svc
-    echo Replay barrier on ${!svc}
-    do_facet $facet $LCTL --device %${!svc} notransno
-    do_facet $facet $LCTL --device %${!svc} readonly
-    do_facet $facet $LCTL mark "$facet REPLAY BARRIER on ${!svc}"
-    $LCTL mark "local REPLAY BARRIER on ${!svc}"
+       local facet=$1    echo running=${running}
+       local svc=${facet}_svc
+       echo Replay barrier on ${!svc}
+       do_facet $facet $LCTL --device ${!svc} notransno
+       do_facet $facet $LCTL --device ${!svc} readonly
+       do_facet $facet $LCTL mark "$facet REPLAY BARRIER on ${!svc}"
+       $LCTL mark "local REPLAY BARRIER on ${!svc}"
 }
 
 mds_evict_client() {
@@ -2882,21 +2883,22 @@ formatall() {
        if ! combined_mgs_mds ; then
                echo "Format mgs: $(mgsdevname)"
                add mgs $(mkfs_opts mgs $(mgsdevname)) --reformat \
-               $(mgsdevname) $(mgsvdevname) ${quiet:+>/dev/null} || exit 10
+                       $(mgsdevname) $(mgsvdevname) ${quiet:+>/dev/null} ||
+                       exit 10
        fi
 
        for num in $(seq $MDSCOUNT); do
                echo "Format mds$num: $(mdsdevname $num)"
                add mds$num $(mkfs_opts mds$num $(mdsdevname ${num})) \
-               --reformat $(mdsdevname $num) $(mdsvdevname $num) \
-               ${quiet:+>/dev/null} || exit 10
+                       --reformat $(mdsdevname $num) $(mdsvdevname $num) \
+                       ${quiet:+>/dev/null} || exit 10
        done
 
        for num in $(seq $OSTCOUNT); do
                echo "Format ost$num: $(ostdevname $num)"
                add ost$num $(mkfs_opts ost$num $(ostdevname ${num})) \
-               --reformat $(ostdevname $num) $(ostvdevname ${num}) \
-               ${quiet:+>/dev/null} || exit 10
+                       --reformat $(ostdevname $num) $(ostvdevname ${num}) \
+                       ${quiet:+>/dev/null} || exit 10
        done
 }
 
@@ -3771,6 +3773,17 @@ drop_reint_reply() {
     return $RC
 }
 
+drop_update_reply() {
+# OBD_FAIL_MDS_OBJ_UPDATE_NET
+       local index=$1
+       shift 1
+       RC=0
+       do_facet mds${index} lctl set_param fail_loc=0x188
+       do_facet client "$@" || RC=$?
+       do_facet mds${index} lctl set_param fail_loc=0
+       return $RC
+}
+
 pause_bulk() {
 #define OBD_FAIL_OST_BRW_PAUSE_BULK      0x214
     RC=0
@@ -4326,9 +4339,45 @@ mdtuuid_from_index()
     $LFS mdts $2 | sed -ne "/^$1: /s/.* \(.*\) .*$/\1/p"
 }
 
+# Description:
+#   Return unique identifier for given hostname
+host_id() {
+       local host_name=$1
+       echo $host_name | md5sum | cut -d' ' -f1
+}
+
+# Description:
+#   Returns list of ip addresses for each interface
+local_addr_list() {
+       ip addr | awk '/inet\ / {print $2}' | awk -F\/ '{print $1}'
+}
+
+is_local_addr() {
+       local addr=$1
+       # Cache address list to avoid mutiple execution of local_addr_list
+       LOCAL_ADDR_LIST=${LOCAL_ADDR_LIST:-$(local_addr_list)}
+       local i
+       for i in $LOCAL_ADDR_LIST ; do
+               [[ "$i" == "$addr" ]] && return 0
+       done
+       return 1
+}
+
+local_node() {
+       local host_name=$1
+       local is_local="IS_LOCAL_$(host_id $host_name)"
+       if [ -z "${!is_local-}" ] ; then
+               eval $is_local=0
+               local host_ip=$($LUSTRE/tests/resolveip $host_name)
+               is_local_addr "$host_ip" && eval $is_local=1
+       fi
+       [[ "${!is_local}" == "1" ]]
+}
+
 remote_node () {
-    local node=$1
-    [ "$node" != "$(hostname)" ]
+       local node=$1
+       local_node $node && return 1
+       return 0
 }
 
 remote_mds ()
@@ -5896,3 +5945,64 @@ generate_logname() {
 
        echo "$TESTLOG_PREFIX.$TESTNAME.$logname.$(hostname -s).log"
 }
+
+# mkdir directory on different MDTs
+test_mkdir() {
+       local option
+       local parent
+       local child
+       local path
+       local dir
+       local rc=0
+
+       if [ $# -eq 2 ]; then
+               option=$1
+               path=$2
+       else
+               path=$1
+       fi
+
+       child=${path##*/}
+       parent=${path%/*}
+
+       if [ "$parent" == "$child" ]; then
+               parent=$(pwd)
+       fi
+
+       if [ "$option" == "-p" -a -d ${parent}/${child} ]; then
+               return $rc
+       fi
+
+       # it needs to check whether there is further / in child
+       dir=$(echo $child | awk -F '/' '{print $2}')
+       if [ ! -z "$dir" ]; then
+               local subparent=$(echo $child | awk -F '/' '{ print $1 }')
+               parent=${parent}"/"${subparent}
+               child=$dir
+       fi
+
+       if [ ! -d ${parent} ]; then
+               if [ "$option" == "-p" ]; then
+                       mkdir -p ${parent}
+               else
+                       return 1
+               fi
+       fi
+
+       if [ $MDSCOUNT -le 1 ]; then
+               mkdir $option ${parent}/${child} || rc=$?
+       else
+               local mdt_idx=$($LFS getstripe -M $parent)
+
+               if [ "$mdt_idx" -ne 0 ]; then
+                       mkdir $option ${parent}/${child} || rc=$?
+                       return $rc
+               fi
+
+               local test_num=$(echo $testnum | sed -e 's/[^0-9]*//g')
+               local mdt_idx=$((test_num % MDSCOUNT))
+               echo "mkdir $mdt_idx for ${parent}/${child}"
+               $LFS setdirstripe -i $mdt_idx ${parent}/${child} || rc=$?
+       fi
+       return $rc
+}