Whamcloud - gitweb
LU-14707 tests: Bashify scripts for Ubuntu et. al.
[fs/lustre-release.git] / lustre / tests / functions.sh
index 50ff899..1807bb8 100644 (file)
@@ -126,35 +126,35 @@ $msg"
 #
 # In the second usage the new value is appended to the old.
 setmodopts() {
-        local _append=false
+       local _append=false
 
-        if [ "$1" = -a ]; then
-            _append=true
-            shift
-        fi
+       if [ "$1" = -a ]; then
+               _append=true
+               shift
+       fi
 
-        local _var=MODOPTS_$1
-        local _newvalue=$2
-        local _savevar=$3
-        local _oldvalue
+       local _var=MODOPTS_$1
+       local _newvalue=$2
+       local _savevar=$3
+       local _oldvalue
 
-        # Dynamic naming of variables is a pain in bash.  In ksh93 we could
-        # write "nameref opts_var=${modname}_MODOPTS" then assign directly
-        # to opts_var.  Associative arrays would also help, alternatively.
-        # Alas, we're stuck with eval until all distros move to a more recent
-        # version of bash.  Fortunately we don't need to eval unset and export.
+       # Dynamic naming of variables is a pain in bash.  In ksh93 we could
+       # write "nameref opts_var=${modname}_MODOPTS" then assign directly
+       # to opts_var.  Associative arrays would also help, alternatively.
+       # Alas, we're stuck with eval until all distros move to a more recent
+       # version of bash.  Fortunately we don't need to eval unset and export.
 
-        if [ -z "$_newvalue" ]; then
-            unset $_var
-            return 0
-        fi
+       if [ -z "$_newvalue" ]; then
+               unset $_var
+               return 0
+       fi
 
-        _oldvalue=${!var}
-        $_append && _newvalue="$_oldvalue $_newvalue"
-        export $_var="$_newvalue"
-        echo setmodopts: ${_var}=${_newvalue}
+       _oldvalue=${!_var}
+       $_append && _newvalue="$_oldvalue $_newvalue"
+       export $_var="$_newvalue"
+       echo setmodopts: ${_var}=${_newvalue}
 
-        [ -n "$_savevar" ] && eval $_savevar=\""$_oldvalue"\"
+       [ -n "$_savevar" ] && eval $_savevar=\""$_oldvalue"\"
 }
 
 echoerr () { echo "$@" 1>&2 ; }
@@ -169,26 +169,26 @@ signaled() {
 }
 
 mpi_run () {
-    local mpirun="$MPIRUN $MPIRUN_OPTIONS --oversubscribe"
-    local command="$mpirun $@"
-    local mpilog=$TMP/mpi.log
-    local rc
-
-    if [ -n "$MPI_USER" -a "$MPI_USER" != root -a -n "$mpirun" ]; then
-        echo "+ chmod 0777 $MOUNT"
-        chmod 0777 $MOUNT
-        command="su $MPI_USER sh -c \"$command \""
-    fi
+       local mpirun="$MPIRUN $MPIRUN_OPTIONS"
+       local command="$mpirun $@"
+       local mpilog=$TMP/mpi.log
+       local rc
+
+       if [ -n "$MPI_USER" -a "$MPI_USER" != root -a -n "$mpirun" ]; then
+               echo "+ chmod 0777 $MOUNT"
+               chmod 0777 $MOUNT
+               command="su $MPI_USER bash -c \"$command \""
+       fi
 
-    ls -ald $MOUNT
-    echo "+ $command"
-    eval $command 2>&1 | tee $mpilog || true
+       ls -ald $MOUNT
+       echo "+ $command"
+       eval $command 2>&1 | tee $mpilog || true
 
-    rc=${PIPESTATUS[0]}
-    if [ $rc -eq 0 ] && grep -q "p4_error:" $mpilog ; then
-       rc=1
-    fi
-    return $rc
+       rc=${PIPESTATUS[0]}
+       if [ $rc -eq 0 ] && grep -q "p4_error:" $mpilog ; then
+               rc=1
+       fi
+       return $rc
 }
 
 nids_list () {
@@ -333,7 +333,7 @@ run_compilebench() {
        # for new "test_foo" functions names
        # local testdir=$DIR/$tdir
        local testdir=$dir/d0.compilebench.$$
-       mkdir -p $testdir
+       test_mkdir -p $testdir
        setstripe_getstripe $testdir $cbench_STRIPEPARAMS
 
     local savePWD=$PWD
@@ -367,7 +367,7 @@ run_metabench() {
        print_opts METABENCH clients mbench_NFILES mbench_THREADS
 
        local testdir=$dir/d0.metabench
-       mkdir -p $testdir
+       test_mkdir -p $testdir
        setstripe_getstripe $testdir $mbench_STRIPEPARAMS
 
        # mpi_run uses mpiuser
@@ -417,7 +417,7 @@ run_simul() {
        print_opts SIMUL clients simul_REP simul_THREADS
 
        local testdir=$DIR/d0.simul
-       mkdir -p $testdir
+       test_mkdir $testdir
        setstripe_getstripe $testdir $simul_STRIPEPARAMS
 
        # mpi_run uses mpiuser
@@ -460,17 +460,33 @@ run_mdtest() {
        local mdtest_custom_params=${mdtest_custom_params:-""}
        local type=${1:-"ssf"}
 
+       local mdtest_Nmntp=${mdtest_Nmntp:-1}
+
+       if [ $type = "ssf" ] && [ $mdtest_Nmntp -ne 1 ]; then
+               skip "shared directory mode is not compatible" \
+                       "with multiple directory paths"
+       fi
+
        # FIXME
        # Need space estimation here.
 
        print_opts MDTEST mdtest_iteration mdtest_THREADS mdtest_nFiles
 
        local testdir=$DIR/d0.mdtest
-       mkdir -p $testdir
+       test_mkdir $testdir
        setstripe_getstripe $testdir $mdtest_STRIPEPARAMS
+       chmod 0777 $testdir
 
+       for ((i=1; i<mdtest_Nmntp; i++)); do
+               zconf_mount_clients $clients $MOUNT$i "$mntopts" ||
+                       error_exit "Failed $clients on $MOUNT$i"
+               local dir=$DIR$i/d0.mdtest$i
+               test_mkdir $dir
+               setstripe_getstripe $dir $mdtest_SETSTRIPEPARAMS
+               chmod 0777 $dir
+               testdir="$testdir@$dir"
+       done
        # mpi_run uses mpiuser
-       chmod 0777 $testdir
 
        # -i # : repeat each test # times
        # -d   : test dir
@@ -497,7 +513,13 @@ run_mdtest() {
     if [ $rc != 0 ] ; then
         error "mdtest failed! $rc"
     fi
-    rm -rf $testdir
+       rm -rf $testdir
+       for ((i=1; i<mdtest_Nmntp; i++)); do
+               local dir=$DIR$i/d0.mdtest$i
+               rm -rf $dir
+               zconf_umount_clients $clients $MOUNT$i ||
+                       error_exit "Failed umount $MOUNT$i on $clients"
+       done
 }
 
 run_connectathon() {
@@ -520,7 +542,7 @@ run_connectathon() {
        echo "free space = $space KB"
 
        local testdir=$dir/d0.connectathon
-       mkdir -p $testdir
+       test_mkdir -p $testdir
        setstripe_getstripe $testdir $cnt_STRIPEPARAMS
 
        local savePWD=$PWD
@@ -589,6 +611,7 @@ run_ior() {
        ior_xferSize=${ior_xferSize:-1M}
        ior_type=${ior_type:-POSIX}
        ior_DURATION=${ior_DURATION:-30}        # minutes
+       ior_CLEANUP=${ior_CLEANUP:-true}
        local multiplier=1
        case ${ior_blockUnit} in
                [G])
@@ -621,7 +644,7 @@ run_ior() {
 
        print_opts IOR ior_THREADS ior_DURATION MACHINEFILE
 
-       mkdir -p $testdir
+       test_mkdir -p $testdir
 
        # mpi_run uses mpiuser
        chmod 0777 $testdir
@@ -645,7 +668,7 @@ run_ior() {
 
        local cmd
        if [ -n "$ior_custom_params" ]; then
-               cmd="$IOR $ior_custom_params -o $testdir/iorData"
+               cmd="$IOR -o $testdir/iorData $ior_custom_params"
        else
                cmd="$IOR -a $ior_type -b ${ior_blockSize}${ior_blockUnit} \
                -o $testdir/iorData -t $ior_xferSize -v -C -w -r -W \
@@ -670,7 +693,7 @@ run_ior() {
     if [ $rc != 0 ] ; then
         error "ior failed! $rc"
     fi
-    rm -rf $testdir
+    $ior_CLEANUP && rm -rf $testdir || true
 }
 
 run_mib() {
@@ -689,7 +712,7 @@ run_mib() {
                MACHINEFILE
 
        local testdir=$DIR/d0.mib
-       mkdir -p $testdir
+       test_mkdir $testdir
        setstripe_getstripe $testdir $mib_STRIPEPARAMS
 
        # mpi_run uses mpiuser
@@ -738,7 +761,7 @@ run_cascading_rw() {
        print_opts CASC_RW clients casc_THREADS casc_REP MACHINEFILE
 
        local testdir=$DIR/d0.cascading_rw
-       mkdir -p $testdir
+       test_mkdir $testdir
        setstripe_getstripe $testdir $casc_STRIPEPARAMS
 
        # mpi_run uses mpiuser
@@ -779,7 +802,7 @@ run_write_append_truncate() {
 
        print_opts clients write_REP write_THREADS MACHINEFILE
 
-       mkdir -p $testdir
+       test_mkdir $testdir
        # mpi_run uses mpiuser
        setstripe_getstripe $testdir $write_STRIPEPARAMS
 
@@ -816,7 +839,7 @@ run_write_disjoint() {
        print_opts WRITE_DISJOINT clients wdisjoint_THREADS wdisjoint_REP \
                MACHINEFILE
        local testdir=$DIR/d0.write_disjoint
-       mkdir -p $testdir
+       test_mkdir $testdir
        setstripe_getstripe $testdir $wdisjoint_STRIPEPARAMS
 
        # mpi_run uses mpiuser
@@ -848,7 +871,7 @@ run_parallel_grouplock() {
        print_opts clients parallel_grouplock_MINTASKS MACHINEFILE
 
        local testdir=$DIR/d0.parallel_grouplock
-       mkdir -p $testdir
+       test_mkdir $testdir
        setstripe_getstripe $testdir $parallel_grouplock_STRIPEPARAMS
 
        # mpi_run uses mpiuser
@@ -917,7 +940,7 @@ run_statahead () {
        mdsrate_cleanup $((num_clients * 32)) $MACHINEFILE \
                $statahead_NUMFILES $testdir 'f%%d' --ignore
 
-       mkdir -p $testdir
+       test_mkdir $testdir
        setstripe_getstripe $testdir $statahead_STRIPEPARAMS
 
     # mpi_run uses mpiuser
@@ -1002,11 +1025,7 @@ run_rr_alloc() {
        local rr_alloc_MNTPTS=${rr_alloc_MNTPTS:-11}
        local total_MNTPTS=$((rr_alloc_MNTPTS * num_clients))
        local mntpt_root="${TMP}/rr_alloc_mntpt/lustre"
-       if [ $MDSCOUNT -lt 2 ]; then
-               [ -e $DIR/$tdir ] || mkdir -p $DIR/$tdir
-       else
-               [ -e $DIR/$tdir ] || $LFS mkdir -i 0 $DIR/$tdir
-       fi
+       test_mkdir $DIR/$tdir
        setstripe_getstripe $DIR/$tdir $rr_alloc_STRIPEPARAMS
 
        chmod 0777 $DIR/$tdir
@@ -1023,7 +1042,7 @@ run_rr_alloc() {
        # Save mdt values, set threshold to 100% i.e always Round Robin,
        # restore the saved values again after creating files...
        save_lustre_params mds1 \
-               "lov.$FSNAME-MDT0000*.qos_threshold_rr" > $qos_prec_objs
+               "lod.$FSNAME-MDT0000*.qos_threshold_rr" > $qos_prec_objs
        save_lustre_params mds1 \
                "osp.$FSNAME-OST*-osc-MDT0000.create_count" >> $qos_prec_objs
 
@@ -1039,10 +1058,17 @@ run_rr_alloc() {
 
        foeo_calc=$((rr_alloc_NFILES * total_MNTPTS / OSTCOUNT))
        local create_count=$((2 * foeo_calc))
-       do_facet mds1 "$LCTL set_param -n \
-               lov.$FSNAME-MDT0000*.qos_threshold_rr 100 \
-               osp.$FSNAME-OST*-osc-MDT0000.create_count $create_count" ||
-               error "failed while setting qos_threshold_rr & creat_count"
+
+       # create_count accepted values:
+       #   [OST_MIN_PRECREATE=32, OST_MAX_PRECREATE=20000]
+       # values exceeding OST_MAX_PRECREATE are lowered to the maximum.
+       [[ $create_count -lt 32 ]] && create_count=32
+       local i
+       for i in $(seq $MDSCOUNT); do
+               do_facet mds$i "$LCTL set_param -n \
+                       lod.$FSNAME-MDT*.qos_threshold_rr=100 \
+                       osp.$FSNAME-OST*-osc-MDT*.create_count=$create_count"
+       done
 
        # Create few temporary files in order to increase the precreated objects
        # to a desired value, before starting 'rr_alloc' app. Due to default
@@ -1137,7 +1163,7 @@ run_fs_test() {
 
        print_opts FS_TEST clients fs_test_threads fs_test_objsize MACHINEFILE
 
-       mkdir -p $testdir
+       test_mkdir $testdir
        setstripe_getstripe $testdir $fs_test_STRIPEPARAMS
 
        # mpi_run uses mpiuser
@@ -1209,7 +1235,7 @@ run_fio() {
 
        [ x$FIO = x ] && skip_env "FIO not found"
 
-       mkdir -p $testdir
+       test_mkdir $testdir
        setstripe_getstripe $testdir $fio_STRIPEPARAMS
 
        # use fio job file if exists,
@@ -1279,7 +1305,7 @@ run_xdd() {
        print_opts XDD clients xdd_queuedepth xdd_blocksize xdd_reqsize \
                xdd_mbytes xdd_passes xdd_rwratio
 
-       mkdir -p $testdir
+       test_mkdir $testdir
        setstripe_getstripe $testdir $xdd_STRIPEPARAMS
 
        local files=""