Whamcloud - gitweb
b=20308
authorgrev <grev>
Tue, 27 Oct 2009 10:33:19 +0000 (10:33 +0000)
committergrev <grev>
Tue, 27 Oct 2009 10:33:19 +0000 (10:33 +0000)
i=Robert.Read
statahead test: N mountpoints on all available clients

lustre/tests/parallel-scale.sh
lustre/tests/test-framework.sh

index a7613e0..5dac40a 100644 (file)
@@ -479,6 +479,73 @@ test_parallel_grouplock() {
 }
 run_test parallel_grouplock "parallel_grouplock"
 
 }
 run_test parallel_grouplock "parallel_grouplock"
 
+statahead_NUMMNTPTS=${statahead_NUMMNTPTS:-5}
+statahead_NUMFILES=${statahead_NUMFILES:-500000}
+
+cleanup_statahead () {
+    trap 0
+
+    local clients=$1
+    local mntpt_root=$2
+    local num_mntpts=$3
+
+    for i in $(seq 0 $num_mntpts);do
+        zconf_umount_clients $clients ${mntpt_root}$i ||
+            error_exit "Failed to umount lustre on ${mntpt_root}$i"
+    done
+}
+
+test_statahead () {
+   
+    # create large dir
+
+    local dir=d0.statahead
+    # FIXME has to use DIR
+    local testdir=$DIR/$dir
+
+    mkdir -p $testdir
+
+    local num_files=$statahead_NUMFILES
+
+    local IFree=$(inodes_available)
+    if [ $IFree -lt $num_files ]; then
+      num_files=$IFree
+    fi
+
+    cancel_lru_locks mdc
+
+    log "createmany -o $testdir/f-%d $num_files"
+    createmany -o $testdir/$f-%d $num_files
+
+    local rc=$?
+    if [ $rc != 0 ] ; then
+        error "createmany failed to create $rc"
+        return $rc
+    fi
+
+    local num_mntpts=$statahead_NUMMNTPTS
+    local mntpt_root=$TMP/mntpt/lustre
+    mntopts=${MNTOPTSTATAHEAD:-$MOUNTOPT}
+
+    local clients=$CLIENTS
+    [ -z $clients ] && clients=$(hostname)
+
+    echo "Mounting $num_mntpts lustre clients starts on $clients"
+    trap "cleanup_statahead $clients $mntpt_root $num_mntpts" EXIT ERR
+    for i in $(seq 0 $num_mntpts);do
+        zconf_mount_clients $clients ${mntpt_root}$i $mntopts ||
+            error_exit "Failed to mount lustre on ${mntpt_root}$i on $clients"
+    done
+
+    do_rpc_nodes $clients cancel_lru_locks mdc
+
+    do_rpc_nodes $clients do_ls $mntpt_root $num_mntpts $dir
+
+    cleanup_statahead $clients $mntpt_root $num_mntpts
+}
+
+run_test statahead "statahead test, multiple clients"
+
 equals_msg `basename $0`: test complete, cleaning up
 check_and_cleanup_lustre
 [ -f "$TESTSUITELOG" ] && cat $TESTSUITELOG && grep -q FAIL $TESTSUITELOG && exit 1 || true
 equals_msg `basename $0`: test complete, cleaning up
 check_and_cleanup_lustre
 [ -f "$TESTSUITELOG" ] && cat $TESTSUITELOG && grep -q FAIL $TESTSUITELOG && exit 1 || true
index 302fcf5..aa76cc4 100644 (file)
@@ -700,14 +700,13 @@ sanity_mount_check () {
 
 # mount clients if not mouted
 zconf_mount_clients() {
 
 # mount clients if not mouted
 zconf_mount_clients() {
-    local OPTIONS
     local clients=$1
     local mnt=$2
     local clients=$1
     local mnt=$2
-
+    local OPTIONS=${3:-$MOUNTOPT}
 
     # Only supply -o to mount if we have options
 
     # Only supply -o to mount if we have options
-    if [ -n "$MOUNTOPT" ]; then
-        OPTIONS="-o $MOUNTOPT"
+    if [ "$OPTIONS" ]; then
+        OPTIONS="-o $OPTIONS"
     fi
     local device=$MGSNID:/$FSNAME
     if [ -z "$mnt" -o -z "$FSNAME" ]; then
     fi
     local device=$MGSNID:/$FSNAME
     if [ -z "$mnt" -o -z "$FSNAME" ]; then
@@ -747,7 +746,7 @@ zconf_umount_clients() {
     echo "Stopping clients: $clients $mnt (opts:$force)"
     do_nodes $clients "running=\\\$(grep -c $mnt' ' /proc/mounts);
 if [ \\\$running -ne 0 ] ; then
     echo "Stopping clients: $clients $mnt (opts:$force)"
     do_nodes $clients "running=\\\$(grep -c $mnt' ' /proc/mounts);
 if [ \\\$running -ne 0 ] ; then
-echo Stopping client \\\$(hostname) client $mnt opts:$force;
+echo Stopping client \\\$(hostname) $mnt opts:$force;
 lsof -t $mnt || need_kill=no;
 if [ "x$force" != "x" -a "x\\\$need_kill" != "xno" ]; then
     pids=\\\$(lsof -t $mnt | sort -u);
 lsof -t $mnt || need_kill=no;
 if [ "x$force" != "x" -a "x\\\$need_kill" != "xno" ]; then
     pids=\\\$(lsof -t $mnt | sort -u);
@@ -3208,3 +3207,26 @@ cleanup_logs () {
     [ -n ${TESTSUITE} ] && do_nodes $list "rm -f $TMP/*${TESTSUITE}*" || true
 }
 
     [ -n ${TESTSUITE} ] && do_nodes $list "rm -f $TMP/*${TESTSUITE}*" || true
 }
 
+do_ls () {
+    local mntpt_root=$1
+    local num_mntpts=$2
+    local dir=$3
+    local i
+    local cmd
+    local pids
+    local rc=0
+
+    for i in $(seq 0 $num_mntpts); do
+        cmd="ls -laf ${mntpt_root}$i/$dir"
+        echo + $cmd;
+        $cmd > /dev/null &
+        pids="$pids $!"
+    done
+    echo pids=$pids
+    for pid in $pids; do
+        wait $pid || rc=$?
+    done
+
+    return $rc
+}
+