X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lustre%2Ftests%2Fmetadata-updates.sh;h=eab2800059b18c4d21c2a39354e40eaff0e37551;hb=94efc0f46185fedbb4c1c9ff8b1d281b8d846d59;hp=68f80775faf626006e23e06d02558d410efffbb9;hpb=044a13ae4b617344a266c5f25f494994465363da;p=fs%2Flustre-release.git diff --git a/lustre/tests/metadata-updates.sh b/lustre/tests/metadata-updates.sh index 68f8077..eab2800 100755 --- a/lustre/tests/metadata-updates.sh +++ b/lustre/tests/metadata-updates.sh @@ -10,8 +10,9 @@ LUSTRE=${LUSTRE:-$(cd $(dirname $0)/..; echo $PWD)} . $LUSTRE/tests/test-framework.sh init_test_env $@ . ${CONFIG:=$LUSTRE/tests/cfg/$NAME.sh} +init_logging -TRACE="+x" +TRACE=${TRACE:-"+x"} TESTDIR=${TESTDIR:-$DIR/d0.$(basename $0 .sh)} @@ -19,6 +20,11 @@ NODES_TO_USE=${NODES_TO_USE:-$CLIENTS} [ -z $CLIENTS ] && NODES_TO_USE=$(hostname) +# hostname could differ from a network interface +# configured for NODES_TO_USE, bug 23961 +# the test dir on each host is created based on `hostname` of this host +HOSTS=$(comma_list $(do_nodes $NODES_TO_USE "echo \\\$(hostname)")) + FILE=testfile FILE_SIZE=1024 CURRENT_MODE=0644 @@ -26,8 +32,10 @@ NEW_MODE=0222 NEW_ATIME="2001-01-01 GMT" NEW_MTIME="2005-05-05 GMT" -test_UID=$(id -u) -test_GID=$(id -g) +test_USER=$(id -u -n) +test_GROUP=$(id -g -n) + +SUMFILE=$TESTDIR/mdsum NUM_FILES=1000 @@ -35,8 +43,6 @@ WRITE_DISJOINT=${WRITE_DISJOINT:-$(which write_disjoint 2> /dev/null)} || true WRITE_DISJOINT_FILE=$TESTDIR/f0.write_disjoint_file NUMLOOPS=1000 -SUM=$(pwd)/sum - log "===== $0 ====== " check_and_setup_lustre @@ -47,53 +53,36 @@ cleanup_prepare () { DIR=$TESTDIR/\\\$(hostname); TESTFILE=\\\$DIR/$FILE; rm -f \\\$TESTFILE; +rm -f $SUMFILE; rmdir \\\$DIR 2>/dev/null; -mkdir -p \\\$DIR" || return ${PIPESTATUS[0]} - - return 0 +mkdir -p \\\$DIR" || return ${PIPESTATUS[0]} + return 0; } do_mknod () { echo "Creating file(s) by mknod (2) ... " - do_nodes $NODES_TO_USE "set $TRACE -TESTFILE=$TESTDIR/\\\$(hostname)/$FILE -mcreate \\\$TESTFILE" || return ${PIPESTATUS[0]} - + do_nodes $NODES_TO_USE "set $TRACE; +TESTFILE=$TESTDIR/\\\$(hostname)/$FILE; +mcreate \\\$TESTFILE; " || return ${PIPESTATUS[0]} return 0 } do_write () { - echo "Writing data to file(s) ... store md5sum ... " - do_nodes $NODES_TO_USE "set $TRACE; TESTFILE=$TESTDIR/\\\$(hostname)/$FILE; -sum=${SUM}_\\\$(hostname); -dd if=/dev/zero of=\\\$TESTFILE bs=$FILE_SIZE count=1 2>/dev/null; -md5sum \\\$TESTFILE > \\\$sum " - if [ ${PIPESTATUS[0]} -ne 0 ] ; then - echo "ERROR: on file creation" - return 1 - fi - +dd if=/dev/zero of=\\\$TESTFILE bs=$FILE_SIZE count=1 2>/dev/null || exit 54; +echo \\\$(hostname) | dd of=\\\$TESTFILE conv=notrunc 2>/dev/null || exit 55; +md5sum \\\$TESTFILE >> $SUMFILE; " || return ${PIPESTATUS[0]} return 0 } do_check_data () { - local HOST - echo "Checking file(s) data ... " - - for HOST in ${NODES_TO_USE//,/ } ; do - local sum=${SUM}_$HOST - do_nodes $NODES_TO_USE "md5sum --check $sum" - if [ ${PIPESTATUS[0]} -ne 0 ] ; then - echo "ERROR: wrong data." - [ -f $sum ] && { cat $sum ; rm -f $sum; } - return 1 - fi - [ -f $sum ] && { cat $sum; rm -f $sum; } - done + echo "Checking file(s) data ... md5sum : " + cat $SUMFILE + do_nodesv $NODES_TO_USE "md5sum --check $SUMFILE" || \ + return ${PIPESTATUS[0]} return 0 } @@ -102,34 +91,29 @@ do_truncate () { do_nodes $NODES_TO_USE "set $TRACE; TESTFILE=$TESTDIR/\\\$(hostname)/$FILE; -truncate \\\$TESTFILE 0" || return ${PIPESTATUS[0]} +$TRUNCATE \\\$TESTFILE 0" || return ${PIPESTATUS[0]} FILE_SIZE=0 - return 0 } # check st_uid, st_gid, st_size, st_mode get_stat () { - local attr="$test_UID $test_GID $FILE_SIZE $CURRENT_MODE" + local attr="$test_USER $test_GROUP $FILE_SIZE $CURRENT_MODE" - echo "Checking file(s) attributes ... " + echo "Checking file(s) attributes ... " - do_nodes $NODES_TO_USE "set $TRACE; -for HOST in ${NODES_TO_USE//,/ } ; do + do_nodesv $NODES_TO_USE "set $TRACE; +for HOST in ${HOSTS//,/ } ; do TESTFILE=$TESTDIR/\\\$HOST/$FILE; - tmp=\\\$(stat -c \\\"%u %g %s 0%a\\\" \\\$TESTFILE); + tmp=\\\$(stat -c \\\"%U %G %s 0%a\\\" \\\$TESTFILE); echo \\\"\\\$TESTFILE [ uid gid size mode ] expected : $attr ; got : \\\$tmp \\\"; if [ x\\\"\\\$tmp\\\" != x\\\"$attr\\\" ] ; then echo \\\"Wrong file attributes\\\"; exit 56; fi; -done " - if [ ${PIPESTATUS[0]} -ne 0 ] ; then - return 1 - fi - - return 0 +done " || return ${PIPESTATUS[0]} + return 0 } do_chmod () { @@ -140,7 +124,6 @@ TESTFILE=$TESTDIR/\\\$(hostname)/$FILE; chmod $NEW_MODE \\\$TESTFILE" || return ${PIPESTATUS[0]} CURRENT_MODE=$NEW_MODE - return 0 } @@ -151,7 +134,6 @@ do_change_timestamps () { TESTFILE=$TESTDIR/\\\$(hostname)/$FILE; touch -c --date=\\\"$NEW_ATIME\\\" -a \\\$TESTFILE; touch -c --date=\\\"$NEW_MTIME\\\" -m \\\$TESTFILE " || return ${PIPESTATUS[0]} - return 0 } @@ -164,8 +146,8 @@ do_check_timestamps () { echo "Checking atime, mtime ... " - do_nodes $NODES_TO_USE "set $TRACE; -for HOST in ${NODES_TO_USE//,/ } ; do + do_nodesv $NODES_TO_USE "set $TRACE; +for HOST in ${HOSTS//,/ } ; do TESTFILE=$TESTDIR/\\\$HOST/$FILE; tmp=\\\$(stat -c \\\"%X %Y\\\" \\\$TESTFILE); if [ x\\\"\\\$tmp\\\" != x\\\"$times\\\" ] ; then @@ -173,13 +155,8 @@ for HOST in ${NODES_TO_USE//,/ } ; do RC=57; fi; done; -exit \\\$RC" - if [ ${PIPESTATUS[0]} -ne 0 ] ; then - echo "WARNING : Wrong atime and(or) mtime values. Hope this is expected." - return 0 - fi - - return 0 +exit \\\$RC" || return ${PIPESTATUS[0]} + return 0 } do_fill_dir () { @@ -191,8 +168,7 @@ rm -f \\\$TESTFILE; DIR=$TESTDIR/\\\$(hostname); for i in \\\$(seq $NUM_FILES) ; do touch \\\$DIR/f\\\$i; -done " || return ${PIPESTATUS[0]} - +done " || return ${PIPESTATUS[0]} return 0 } @@ -201,7 +177,7 @@ check_dir_contents () { echo "Checking dir contents ... (should exist files : f$num_files ... f$NUM_FILES) ... " do_nodes $NODES_TO_USE "set $TRACE; -for HOST in ${NODES_TO_USE//,/ } ; do +for HOST in ${HOSTS//,/ } ; do DIR=$TESTDIR/\\\$HOST; for i in \\\$(seq $NUM_FILES -1 $num_files) ; do if ! [ -f \\\$DIR/f\\\$i ] ; then @@ -216,11 +192,7 @@ for HOST in ${NODES_TO_USE//,/ } ; do fi; done; done; -exit \\\$RC " - if [ ${PIPESTATUS[0]} -ne 0 ] ; then - return 1 - fi - +exit \\\$RC " || return ${PIPESTATUS[0]} return 0 } @@ -234,8 +206,7 @@ for i in \\\$(seq $num_files) ; do if ! rm -f \\\$DIR/f\\\$i ; then exit 1; fi; -done " || return ${PIPESTATUS[0]} - +done " || return ${PIPESTATUS[0]} return 0 } @@ -245,50 +216,53 @@ chmod 0777 $MOUNT || exit 1 mkdir -p $TESTDIR || exit 1 chmod 0777 $TESTDIR || exit 1 -cleanup_prepare || exit 1 +cleanup_prepare || error_exit "cleanup failed" # create file(s) (mknod (2)), write data, check data, check file attributes echo "Part 1. create file(s) (mknod (2)), write data, check data, check file attributes." -do_mknod || exit ${PIPESTATUS[0]} -do_write || exit ${PIPESTATUS[0]} -do_check_data || exit ${PIPESTATUS[0]} -get_stat || STATUS=1 +do_mknod || error_exit "mknod failed" +echo "Writing data to file(s) ... store md5sum ... " +do_write || error_exit "write data failed" +do_check_data || error_exit "md5sum verification failed" +get_stat || { error_noexit "attributes check failed" ; STATUS=1; } # file(s) attributes modification echo "Part 2. file(s) attributes modification." -do_chmod || exit ${PIPESTATUS[0]} -get_stat || STATUS=1 +do_chmod || error_exit "chmod failed" +get_stat || { error_noexit "wrong attributes after chmod"; STATUS=1; } -do_change_timestamps || exit ${PIPESTATUS[0]} -do_check_timestamps || STATUS=1 +do_change_timestamps || error_exit "timestamps change failed" +do_check_timestamps || { error_noexit "wrong timestamps"; STATUS=1; } # truncate file(s) to 0 size, check new file size echo "Part 3. truncate file(s) to 0 size, check new file size." -do_truncate || exit ${PIPESTATUS[0]} -get_stat || STATUS=1 +do_truncate || error_exit"truncate failed" +get_stat || { error_noexit "wrong attributes after truncate"; STATUS=1; } # directory content solidity echo "Part 4. directory content solidity: fill up directory, check dir content, remove some files, check dir content." -do_fill_dir || exit ${PIPESTATUS[0]} -check_dir_contents || STATUS=1 +do_fill_dir || error_exit "dir creation failed" +check_dir_contents || { error_noexit "dir contents check failed"; STATUS=1; } -do_partial_delete $(($NUM_FILES / 2)) || exit ${PIPESTATUS[0]} -check_dir_contents $(($NUM_FILES / 2 + 1)) || STATUS=1 +do_partial_delete $(($NUM_FILES / 2)) || error_exit "delete failed" +check_dir_contents $(($NUM_FILES / 2 + 1)) || + { error_noexit "dir contents check after delete failed"; STATUS=1; } # "write_disjoint" test -echo "Part 5. write_disjoint test: see lustre/tests/write_disjoint.c for details" +echo "Part 5. write_disjoint test: see lustre/tests/mpi/write_disjoint.c for details" if [ -f "$WRITE_DISJOINT" ]; then - set $TRACE - MACHINEFILE=${MACHINEFILE:-$TMP/$(basename $0 .sh).machines} - generate_machine_file $NODES_TO_USE $MACHINEFILE - mpi_run -np $(get_node_count ${NODES_TO_USE//,/ }) $MACHINEFILE \ - $WRITE_DISJOINT -f $WRITE_DISJOINT_FILE -n $NUMLOOPS || STATUS=1 + set $TRACE + MACHINEFILE=${MACHINEFILE:-$TMP/$(basename $0 .sh).machines} + generate_machine_file $NODES_TO_USE $MACHINEFILE + mpi_run ${MACHINEFILE_OPTION} $MACHINEFILE \ + -np $(get_node_count ${NODES_TO_USE//,/ }) $WRITE_DISJOINT \ + -f $WRITE_DISJOINT_FILE -n $NUMLOOPS || STATUS=1 else - skip "$0 : write_disjoint not found " + skip_env "$0 : write_disjoint not found " fi -equals_msg `basename $0`: test complete, cleaning up +complete $SECONDS rm -rf $TESTDIR rm -f $MACHINEFILE check_and_cleanup_lustre -exit $STATUS +exit_status