SAVE_PWD=$PWD
LUSTRE=${LUSTRE:-`dirname $0`/..}
RLUSTRE=${RLUSTRE:-$LUSTRE}
-LUSTRE_TESTS_API_DIR=${LUSTRE_TESTS_API_DIR:-${LUSTRE}/tests/clientapi}
export MULTIOP=${MULTIOP:-multiop}
. $LUSTRE/tests/test-framework.sh
fi
[ $(facet_fstype $SINGLEMDS) = "zfs" ] &&
-# bug number for skipped test: LU-2778 LU-2059 LU-4444
- ALWAYS_EXCEPT="$ALWAYS_EXCEPT 57b 50h 69"
+# bug number for skipped test: LU-2778 LU-4444
+ ALWAYS_EXCEPT="$ALWAYS_EXCEPT 57b 69"
init_logging
}
remount_client() {
- local mountopt="-o remount,$1"
+ local mountopt="remount,$1"
local MOUNTPATH=$2
echo "remount '$1' lustre on ${MOUNTPATH}....."
zconf_mount `hostname` $MOUNTPATH "$mountopt" || return 96
wait $UMOUNT_PID
if grep " $MOUNT " /proc/mounts; then
echo "test 5: /proc/mounts after failed umount"
- umount $MOUNT &
+ umount -f $MOUNT &
UMOUNT_PID=$!
sleep 2
echo "killing umount"
grep " $MOUNT " /etc/mtab && \
error false "unexpected entry in mtab before mount" && return 10
- [ "$(facet_fstype ost1)" = "zfs" ] &&
- skip "LU-2059: no local config for ZFS OSTs" && return
-
local rc=0
start_ost
start_mds
run_test 19a "start/stop MDS without OSTs"
test_19b() {
- [ "$(facet_fstype ost1)" = "zfs" ] &&
- skip "LU-2059: no local config for ZFS OSTs" && return
-
start_ost || return 1
stop_ost -f || return 2
}
run_test 21a "start mds before ost, stop ost first"
test_21b() {
- [ "$(facet_fstype ost1)" = "zfs" ] &&
- skip "LU-2059: no local config for ZFS OSTs" && return
-
start_ost
start_mds
wait_osc_import_state mds ost FULL
start fs2mds $fs2mdsdev $MDS_MOUNT_OPTS && trap cleanup_fs2 EXIT INT
start fs2ost $fs2ostdev $OST_MOUNT_OPTS
mkdir -p $MOUNT2
- mount -t lustre $MGSNID:/${FSNAME2} $MOUNT2 || return 1
+ $MOUNT_CMD $MGSNID:/${FSNAME2} $MOUNT2 || return 1
# 1 still works
check_mount || return 2
# files written on 1 should not show up on 2
--reformat $fs2mdsdev $fs2mdsvdev || exit 10
setup
start fs2mds $fs2mdsdev $MDS_MOUNT_OPTS && return 2
+ stop fs2mds -f
cleanup || return 6
}
run_test 24b "Multiple MGSs on a single node (should return err)"
run_test 26 "MDT startup failure cleans LOV (should return errs)"
test_27a() {
- [ "$(facet_fstype ost1)" = "zfs" ] &&
- skip "LU-2059: no local config for ZFS OSTs" && return
-
start_ost || return 1
start_mds || return 2
echo "Requeue thread should have started: "
NEW=$(echo $OSTNID | sed "s/$ORIGVAL/$NEWVAL@/")
echo "Using fake nid $NEW"
- TEST="$LCTL get_param -n osc.$FSNAME-OST0000-osc-[^M]*.import | grep failover_nids | sed -n 's/.*\($NEW\).*/\1/p'"
+ TEST="$LCTL get_param -n osc.$FSNAME-OST0000-osc-[^M]*.import |
+ grep failover_nids | sed -n 's/.*\($NEW\).*/\1/p'"
set_conf_param_and_check client "$TEST" \
"$FSNAME-OST0000.failover.node" $NEW ||
error "didn't add failover nid $NEW"
- NIDS=$($LCTL get_param -n osc.$FSNAME-OST0000-osc-[^M]*.import | grep failover_nids)
+ NIDS=$($LCTL get_param -n osc.$FSNAME-OST0000-osc-[^M]*.import |
+ grep failover_nids)
echo $NIDS
- NIDCOUNT=$(($(echo "$NIDS" | wc -w) - 1))
+ # The NIDS value is the failover nid strings and "[" and "]". So
+ # we need to subtract the space taken by the delimiters. This has
+ # changed from earlier version of Lustre but this test is run only
+ # locally so this change will not break interop. See LU-3386
+ NIDCOUNT=$(($(echo "$NIDS" | wc -w) - 3))
echo "should have 2 failover nids: $NIDCOUNT"
[ $NIDCOUNT -eq 2 ] || error "Failover nid not added"
- do_facet mgs "$LCTL conf_param -d $FSNAME-OST0000.failover.node" || error "conf_param delete failed"
+ do_facet mgs "$LCTL conf_param -d $FSNAME-OST0000.failover.node" ||
+ error "conf_param delete failed"
umount_client $MOUNT
mount_client $MOUNT || return 3
- NIDS=$($LCTL get_param -n osc.$FSNAME-OST0000-osc-[^M]*.import | grep failover_nids)
+ NIDS=$($LCTL get_param -n osc.$FSNAME-OST0000-osc-[^M]*.import |
+ grep failover_nids)
echo $NIDS
- NIDCOUNT=$(($(echo "$NIDS" | wc -w) - 1))
+ NIDCOUNT=$(($(echo "$NIDS" | wc -w) - 3))
echo "only 1 final nid should remain: $NIDCOUNT"
[ $NIDCOUNT -eq 1 ] || error "Failover nids not removed"
run_test 30b "Remove failover nids"
test_31() { # bug 10734
- # ipaddr must not exist
- mount -t lustre 4.3.2.1@tcp:/lustre $MOUNT || true
+ # ipaddr must not exist
+ $MOUNT_CMD 4.3.2.1@tcp:/lustre $MOUNT || true
cleanup
}
run_test 31 "Connect to non-existent node (shouldn't crash)"
count=$(($T32_BLIMIT / 1024 / 2))
chown $T32_QID.$T32_QID $tmp/src/t32_qf_old
- formatall
+ # format ost with comma-separated NIDs to verify LU-4460
+ local failnid="$(h2$NETTYPE 1.2.3.4),$(h2$NETTYPE 4.3.2.1)"
+ MGSNID="$MGSNID,$MGSNID" OSTOPT="--failnode=$failnid" formatall
setupall
echo " Arch: $img_arch"
local version=$(version_code $img_commit)
- [[ $version -gt $(version_code 2.4.0) ]] && ff_convert="no"
+ [[ $version -ge $(version_code 2.5.0) ]] && ff_convert="no"
if [ $fstype == "zfs" ]; then
# import pool first
if [ $fstype == "ldiskfs" ]; then
mopts="loop,$mopts"
fi
- $r mount -t lustre -o $mopts $mdt_dev $tmp/mnt/mdt
+ $r $MOUNT_CMD -o $mopts $mdt_dev $tmp/mnt/mdt
$r lctl replace_nids $fsname-OST0000 $ostnid
$r lctl replace_nids $fsname-MDT0000 $nid
$r umount -d $tmp/mnt/mdt
t32_wait_til_devices_gone $node
- $r mount -t lustre -o $mopts $mdt_dev $tmp/mnt/mdt || {
+ $r $MOUNT_CMD -o $mopts $mdt_dev $tmp/mnt/mdt || {
$r losetup -a
error_noexit "Mounting the MDT"
return 1
echo "mount new MDT....$fs2mdsdev"
$r mkdir -p $tmp/mnt/mdt1
- $r mount -t lustre -o $mopts $fs2mdsdev $tmp/mnt/mdt1 || {
+ $r $MOUNT_CMD -o $mopts $fs2mdsdev $tmp/mnt/mdt1 || {
error_noexit "mount mdt1 failed"
return 1
}
+
+ $r $LCTL set_param -n mdt.${fsname}*.enable_remote_dir=1 ||
+ error_noexit "enable remote dir create failed"
+
shall_cleanup_mdt1=true
fi
mopts="loop,$mopts"
fi
fi
- $r mount -t lustre -o $mopts $ost_dev $tmp/mnt/ost || {
+ $r $MOUNT_CMD -o $mopts $ost_dev $tmp/mnt/ost || {
error_noexit "Mounting the OST"
return 1
}
fi
if [ "$writeconf" ]; then
- mount -t lustre $nid:/$fsname $tmp/mnt/lustre || {
+ $MOUNT_CMD $nid:/$fsname $tmp/mnt/lustre || {
error_noexit "Mounting the client"
return 1
}
if [ $fstype == "ldiskfs" ]; then
mopts="loop,$mopts"
fi
- $r mount -t lustre -o $mopts $mdt_dev $tmp/mnt/mdt || {
+ $r $MOUNT_CMD -o $mopts $mdt_dev $tmp/mnt/mdt || {
error_noexit "Remounting the MDT"
return 1
}
start fs2ost $fs2ostdev $OST_MOUNT_OPTS
do_facet $SINGLEMDS "$LCTL conf_param $FSNAME2.sys.timeout=200" || rc=1
mkdir -p $MOUNT2
- mount -t lustre $MGSNID:/${FSNAME2} $MOUNT2 || rc=2
+ $MOUNT_CMD $MGSNID:/${FSNAME2} $MOUNT2 || rc=2
echo "ok."
cp /etc/hosts $MOUNT2/ || rc=3
# different one than the default value here.
add fs2ost $(mkfs_opts ost1 ${fs2ostdev}) --mgsnode=$MGSNID \
--fsname=${FSNAME2} --reformat $fs2ostdev $fs2ostvdev || exit 10
- add fs3ost $(mkfs_opts ost1 ${fs3ostdev}) --mgsnode=$MGSNID \
+ add fs3ost $(mkfs_opts ost2 ${fs3ostdev}) --mgsnode=$MGSNID \
--fsname=${FSNAME2} --reformat $fs3ostdev $fs3ostvdev || exit 10
start fs2mds $fs2mdsdev $MDS_MOUNT_OPTS
start fs2ost $fs2ostdev $OST_MOUNT_OPTS
start fs3ost $fs3ostdev $OST_MOUNT_OPTS
mkdir -p $MOUNT2
- mount -t lustre $MGSNID:/${FSNAME2} $MOUNT2 || return 1
+ $MOUNT_CMD $MGSNID:/${FSNAME2} $MOUNT2 || return 1
sleep 5 # until 11778 fixed
run_test 37 "verify set tunables works for symlink device"
test_38() { # bug 14222
- if [ $(facet_fstype $SINGLEMDS) != ldiskfs ]; then
- skip "Only applicable to ldiskfs-based MDTs"
- return
- fi
+ local fstype=$(facet_fstype $SINGLEMDS)
+ local mntpt=$(facet_mntpt $SINGLEMDS)
setup
# like runtests
- COUNT=10
- SRC="/etc /bin"
- FILES=`find $SRC -type f -mtime +1 | head -n $COUNT`
+ local COUNT=10
+ local SRC="/etc /bin"
+ local FILES=$(find $SRC -type f -mtime +1 | head -n $COUNT)
log "copying $(echo $FILES | wc -w) files to $DIR/$tdir"
mkdir -p $DIR/$tdir
- tar cf - $FILES | tar xf - -C $DIR/$tdir || \
+ tar cf - $FILES | tar xf - -C $DIR/$tdir ||
error "copying $SRC to $DIR/$tdir"
sync
umount_client $MOUNT
+ do_facet $SINGLEMDS "$LCTL get_param osp.*.prealloc_next_id"
stop_mds
- log "rename lov_objid file on MDS"
- rm -f $TMP/lov_objid.orig
+ log "delete lov_objid file on MDS"
- local MDSDEV=$(mdsdevname ${SINGLEMDS//mds/})
- do_facet $SINGLEMDS "$DEBUGFS -c -R \\\"dump lov_objid $TMP/lov_objid.orig\\\" $MDSDEV"
- do_facet $SINGLEMDS "$DEBUGFS -w -R \\\"rm lov_objid\\\" $MDSDEV"
+ mount_fstype $SINGLEMDS || error "mount MDS failed (1)"
+
+ do_facet $SINGLEMDS "od -Ax -td8 $mntpt/lov_objid; rm $mntpt/lov_objid"
+
+ unmount_fstype $SINGLEMDS || error "umount failed (1)"
- do_facet $SINGLEMDS "od -Ax -td8 $TMP/lov_objid.orig"
# check create in mds_lov_connect
start_mds
mount_client $MOUNT
[ $V ] && log "verifying $DIR/$tdir/$f"
diff -q $f $DIR/$tdir/$f || ERROR=y
done
- do_facet $SINGLEMDS "$DEBUGFS -c -R \\\"dump lov_objid $TMP/lov_objid.new\\\" $MDSDEV"
- do_facet $SINGLEMDS "od -Ax -td8 $TMP/lov_objid.new"
- [ "$ERROR" = "y" ] && error "old and new files are different after connect" || true
+ do_facet $SINGLEMDS "$LCTL get_param osp.*.prealloc_next_id"
+ if [ "$ERROR" = "y" ]; then
+ # check it's updates in sync
+ umount_client $MOUNT
+ stop_mds
+ mount_fstype $SIGNLEMDS
+ do_facet $SINGLEMDS "od -Ax -td8 $mntpt/lov_objid"
+ unmount_fstype $SINGLEMDS
+ error "old and new files are different after connect" || true
+ fi
+ touch $DIR/$tdir/f2 || error "f2 file create failed"
# check it's updates in sync
umount_client $MOUNT
stop_mds
- do_facet $SINGLEMDS dd if=/dev/zero of=$TMP/lov_objid.clear bs=4096 count=1
- do_facet $SINGLEMDS "$DEBUGFS -w -R \\\"rm lov_objid\\\" $MDSDEV"
- do_facet $SINGLEMDS "$DEBUGFS -w -R \\\"write $TMP/lov_objid.clear lov_objid\\\" $MDSDEV "
+ mount_fstype $SINGLEMDS || error "mount MDS failed (3)"
+
+ do_facet $SINGLEMDS "od -Ax -td8 $mntpt/lov_objid"
+ do_facet $SINGLEMDS dd if=/dev/zero of=$mntpt/lov_objid.clear count=8
+
+ unmount_fstype $SINGLEMDS || error "umount failed (3)"
start_mds
mount_client $MOUNT
[ $V ] && log "verifying $DIR/$tdir/$f"
diff -q $f $DIR/$tdir/$f || ERROR=y
done
- do_facet $SINGLEMDS "$DEBUGFS -c -R \\\"dump lov_objid $TMP/lov_objid.new1\\\" $MDSDEV"
- do_facet $SINGLEMDS "od -Ax -td8 $TMP/lov_objid.new1"
+ touch $DIR/$tdir/f3 || error "f3 file create failed"
+ do_facet $SINGLEMDS "$LCTL get_param osp.*.prealloc_next_id"
umount_client $MOUNT
stop_mds
- [ "$ERROR" = "y" ] && error "old and new files are different after sync" || true
+ mount_fstype $SINGLEMDS || error "mount MDS failed (4)"
+ do_facet $SINGLEMDS "od -Ax -td8 $mntpt/lov_objid"
+ unmount_fstype $SINGLEMDS || error "umount failed (4)"
+
+ [ "$ERROR" = "y" ] &&
+ error "old and new files are different after sync" || true
log "files compared the same"
cleanup
}
run_test 41b "mount mds with --nosvc and --nomgs on first mount"
+test_41c() {
+ cleanup
+ # MDT concurent start
+ #define OBD_FAIL_TGT_DELAY_CONNECT 0x703
+ do_facet $SINGLEMDS "lctl set_param fail_loc=0x703"
+ start mds1 $(mdsdevname 1) $MDS_MOUNT_OPTS &
+ local pid=$!
+ sleep 2
+ do_facet $SINGLEMDS "lctl set_param fail_loc=0x0"
+ start mds1 $(mdsdevname 1) $MDS_MOUNT_OPTS &
+ local pid2=$!
+ wait $pid2
+ local rc2=$?
+ wait $pid
+ local rc=$?
+ if [ $rc == 0 ] && [ $rc2 == 114 ]; then
+ echo "1st MDT start succeed"
+ echo "2nd MDT start failed with EALREADY"
+ elif [ $rc2 == 0 ] && [ $rc == 114 ]; then
+ echo "1st MDT start failed with EALREADY"
+ echo "2nd MDT start succeed"
+ else
+ stop mds1 -f
+ error "unexpected concurent MDT mounts result, rc=$rc rc2=$rc2"
+ fi
+
+ # OST concurent start
+ #define OBD_FAIL_TGT_DELAY_CONNECT 0x703
+ do_facet ost1 "lctl set_param fail_loc=0x703"
+ start ost1 $(ostdevname 1) $OST_MOUNT_OPTS &
+ pid=$!
+ sleep 2
+ do_facet ost1 "lctl set_param fail_loc=0x0"
+ start ost1 $(ostdevname 1) $OST_MOUNT_OPTS &
+ pid2=$!
+ wait $pid2
+ rc2=$?
+ wait $pid
+ rc=$?
+ if [ $rc == 0 ] && [ $rc2 == 114 ]; then
+ echo "1st OST start succeed"
+ echo "2nd OST start failed with EALREADY"
+ elif [ $rc2 == 0 ] && [ $rc == 114 ]; then
+ echo "1st OST start failed with EALREADY"
+ echo "2nd OST start succeed"
+ else
+ stop mds1 -f
+ stop ost1 -f
+ error "unexpected concurent OST mounts result, rc=$rc rc2=$rc2"
+ fi
+ # cleanup
+ stop mds1 -f
+ stop ost1 -f
+
+ # verify everything ok
+ start_mds
+ if [ $? != 0 ]
+ then
+ stop mds1 -f
+ error "MDT(s) start failed"
+ fi
+
+ start_ost
+ if [ $? != 0 ]
+ then
+ stop mds1 -f
+ stop ost1 -f
+ error "OST(s) start failed"
+ fi
+
+ mount_client $MOUNT
+ if [ $? != 0 ]
+ then
+ stop mds1 -f
+ stop ost1 -f
+ error "client start failed"
+ fi
+ check_mount
+ if [ $? != 0 ]
+ then
+ stop mds1 -f
+ stop ost1 -f
+ error "client mount failed"
+ fi
+ cleanup
+}
+run_test 41c "concurent mounts of MDT/OST should all fail but one"
+
test_42() { #bug 14693
setup
check_mount || error "client was not mounted"
run_test 42 "allow client/server mount/unmount with invalid config param"
test_43() {
+ [[ $(lustre_version_code mgs) -ge $(version_code 2.5.58) ]] ||
+ { skip "Need MDS version at least 2.5.58" && return 0; }
[ $UID -ne 0 -o $RUNAS_ID -eq 0 ] && skip_env "run as root"
+
+ ID1=${ID1:-501}
+ USER1=$(cat /etc/passwd | grep :$ID1:$ID1: | cut -d: -f1)
+ [ -z "$USER1" ] && skip_env "missing user with uid=$ID1 gid=$ID1" &&
+ return
+
setup
chmod ugo+x $DIR || error "chmod 0 failed"
set_conf_param_and_check mds \
"lctl get_param -n mdt.$FSNAME-MDT0000.root_squash" \
"$FSNAME.mdt.root_squash" \
"0:0"
+ wait_update $HOSTNAME \
+ "lctl get_param -n llite.${FSNAME}*.root_squash" \
+ "0:0" ||
+ error "check llite root_squash failed!"
set_conf_param_and_check mds \
"lctl get_param -n mdt.$FSNAME-MDT0000.nosquash_nids" \
"$FSNAME.mdt.nosquash_nids" \
"NONE"
+ wait_update $HOSTNAME \
+ "lctl get_param -n llite.${FSNAME}*.nosquash_nids" \
+ "NONE" ||
+ error "check llite nosquash_nids failed!"
#
# create set of test files
chmod go-rwx $DIR/$tdir-rootdir || error "chmod 3 failed"
touch $DIR/$tdir-rootdir/tfile-1 || error "touch failed"
+ echo "777" > $DIR/$tfile-user1file || error "write 7 failed"
+ chmod go-rw $DIR/$tfile-user1file || error "chmod 7 failed"
+ chown $ID1.$ID1 $DIR/$tfile-user1file || error "chown failed"
+
#
# check root_squash:
# set root squash UID:GID to RUNAS_ID
"lctl get_param -n mdt.$FSNAME-MDT0000.root_squash" \
"$FSNAME.mdt.root_squash" \
"$RUNAS_ID:$RUNAS_ID"
+ wait_update $HOSTNAME \
+ "lctl get_param -n llite.${FSNAME}*.root_squash" \
+ "$RUNAS_ID:$RUNAS_ID" ||
+ error "check llite root_squash failed!"
ST=$(stat -c "%n: owner uid %u (%A)" $DIR/$tfile-userfile)
dd if=$DIR/$tfile-userfile 1>/dev/null 2>/dev/null || \
echo "$ST: root read permission is granted - ok"
echo "444" | \
- dd conv=notrunc if=$DIR/$tfile-userfile 1>/dev/null 2>/dev/null || \
+ dd conv=notrunc of=$DIR/$tfile-userfile 1>/dev/null 2>/dev/null || \
error "$ST: root write permission is denied"
echo "$ST: root write permission is granted - ok"
error "$ST: root create permission is granted"
echo "$ST: root create permission is denied - ok"
+
+ # LU-1778
+ # check root_squash is enforced independently
+ # of client cache content
+ #
+ # access file by USER1, keep access open
+ # root should be denied access to user file
+
+ runas -u $ID1 tail -f $DIR/$tfile-user1file 1>/dev/null 2>&1 &
+ pid=$!
+ sleep 1
+
+ ST=$(stat -c "%n: owner uid %u (%A)" $DIR/$tfile-user1file)
+ dd if=$DIR/$tfile-user1file 1>/dev/null 2>&1 &&
+ { kill $pid; error "$ST: root read permission is granted"; }
+ echo "$ST: root read permission is denied - ok"
+
+ echo "777" | \
+ dd conv=notrunc of=$DIR/$tfile-user1file 1>/dev/null 2>&1 &&
+ { kill $pid; error "$ST: root write permission is granted"; }
+ echo "$ST: root write permission is denied - ok"
+
+ kill $pid
+ wait $pid
+
#
# check nosquash_nids:
# put client's NID into nosquash_nids list,
"lctl get_param -n mdt.$FSNAME-MDT0000.nosquash_nids" \
"$FSNAME-MDTall.mdt.nosquash_nids" \
"$NIDLIST"
+ wait_update $HOSTNAME \
+ "lctl get_param -n llite.${FSNAME}*.nosquash_nids" \
+ "$NIDLIST" ||
+ error "check llite nosquash_nids failed!"
ST=$(stat -c "%n: owner uid %u (%A)" $DIR/$tfile-rootfile)
dd if=$DIR/$tfile-rootfile 1>/dev/null 2>/dev/null || \
test_50h() {
# prepare MDT/OST, make OSC inactive for OST1
[ "$OSTCOUNT" -lt "2" ] && skip_env "$OSTCOUNT < 2, skipping" && return
+
+ [ $(facet_fstype ost1) == zfs ] && import_zpool ost1
do_facet ost1 "$TUNEFS --param osc.active=0 `ostdevname 1`" ||
error "tunefs OST1 failed"
start_mds || error "Unable to start MDT"
do_node $ost1node 'mv '$objects' '${ost1mnt}'/lost+found'
[ $? -eq 0 ] || { error "Unable to move objects"; return 14; }
+ # recover objects dry-run
+ echo "ll_recover_lost_found_objs dry_run"
+ do_node $ost1node "ll_recover_lost_found_objs -n -d $ost1mnt/O"
+ [ $? -eq 0 ] || { error "ll_recover_lost_found_objs failed"; return 15; }
+
# recover objects
+ echo "ll_recover_lost_found_objs fix run"
do_node $ost1node "ll_recover_lost_found_objs -d $ost1mnt/lost+found"
[ $? -eq 0 ] || { error "ll_recover_lost_found_objs failed"; return 15; }
}
test_58() { # bug 22658
- if [ $(facet_fstype mds) != ldiskfs ]; then
- skip "Only applicable to ldiskfs-based MDTs"
- return
- fi
setup_noconfig
mkdir -p $DIR/$tdir
createmany -o $DIR/$tdir/$tfile-%d 100
local MNTDIR=$(facet_mntpt $SINGLEMDS)
local devname=$(mdsdevname ${SINGLEMDS//mds/})
- local opts=""
- if ! do_facet $SINGLEMDS "test -b $devname"; then
- opts="-o loop"
- fi
# remove all files from the OBJECTS dir
- do_facet $SINGLEMDS "mount -t ldiskfs $opts $devname $MNTDIR"
+ mount_fstype $SINGLEMDS
+
do_facet $SINGLEMDS "find $MNTDIR/O/1/d* -type f -delete"
- do_facet $SINGLEMDS "umount -d $MNTDIR"
+
+ unmount_fstype $SINGLEMDS
# restart MDS with missing llog files
start_mds
do_facet mds "lctl set_param fail_loc=0"
}
run_test 73 "failnode to update from mountdata properly"
-test_74() { # LU-1606
- for TESTPROG in $LUSTRE_TESTS_API_DIR/*.c; do
- gcc -Wall -Werror $LUSTRE_TESTS_API_DIR/simple_test.c \
- -I$LUSTRE/include \
- -L$LUSTRE/utils -llustreapi ||
- error "client api broken"
- done
- cleanup || return $?
-}
-run_test 74 "Lustre client api program can compile and link"
-
test_75() { # LU-2374
[[ $(lustre_version_code $SINGLEMDS) -lt $(version_code 2.4.1) ]] &&
skip "Need MDS version at least 2.4.1" && return
}
run_test 75 "The order of --index should be irrelevant"
-test_76() {
+test_76a() {
[[ $(lustre_version_code mgs) -ge $(version_code 2.4.52) ]] ||
{ skip "Need MDS version at least 2.4.52" && return 0; }
setup
error "client_cache_count is not saved after remount"
stopall
}
-run_test 76 "set permanent params set_param -P"
+run_test 76a "set permanent params set_param -P"
+
+test_76b() { # LU-4783
+ [[ $(lustre_version_code mgs) -ge $(version_code 2.5.57) ]] ||
+ { skip "Need MGS version at least 2.5.57" && return 0; }
+ stopall
+ setupall
+ do_facet mgs $LCTL get_param mgs.MGS.live.params ||
+ error "start params log failed"
+ stopall
+}
+run_test 76b "verify params log setup correctly"
test_77() { # LU-3445
local server_version=$(lustre_version_code $SINGLEMDS)
start fs2ost $fs2ostdev $OST_MOUNT_OPTS || error "start fs2ost failed"
mkdir -p $MOUNT2
- mount -t lustre $mgsnid:/$fsname $MOUNT2 || error "mount $MOUNT2 failed"
+ $MOUNT_CMD $mgsnid:/$fsname $MOUNT2 || error "mount $MOUNT2 failed"
DIR=$MOUNT2 MOUNT=$MOUNT2 check_mount || error "check $MOUNT2 failed"
cleanup_fs2
}
}
run_test 78 "run resize2fs on MDT and OST filesystems"
+test_79() { # LU-4227
+ [[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.5.59) ]] ||
+ { skip "Need MDS version at least 2.5.59"; return 0; }
+
+ local mdsdev1=$(mdsdevname 1)
+ local mdsvdev1=$(mdsvdevname 1)
+ local mdsdev2=$(mdsdevname 2)
+ local mdsvdev2=$(mdsvdevname 2)
+ local ostdev1=$(ostdevname 1)
+ local ostvdev1=$(ostvdevname 1)
+ local opts_mds1="$(mkfs_opts mds1 $mdsdev1) --reformat"
+ local opts_mds2="$(mkfs_opts mds2 $mdsdev2) --reformat"
+ local opts_ost1="$(mkfs_opts ost1 $ostdev1) --reformat"
+ local mgsnode_opt
+
+ # remove --mgs/--mgsnode from mkfs.lustre options
+ opts_mds1=$(echo $opts_mds1 | sed -e "s/--mgs//")
+
+ mgsnode_opt=$(echo $opts_mds2 |
+ awk '{ for ( i = 1; i < NF; i++ )
+ if ( $i ~ "--mgsnode" ) { print $i; break } }')
+ [ -n $mgsnode_opt ] &&
+ opts_mds2=$(echo $opts_mds2 | sed -e "s/$mgsnode_opt//")
+
+ mgsnode_opt=$(echo $opts_ost1 |
+ awk '{ for ( i = 1; i < NF; i++ )
+ if ( $i ~ "--mgsnode" ) { print $i; break } }')
+ [ -n $mgsnode_opt ] &&
+ opts_ost1=$(echo $opts_ost1 | sed -e "s/$mgsnode_opt//")
+
+ # -MGS, format a mdt without --mgs option
+ add mds1 $opts_mds1 $mdsdev1 $mdsvdev1 &&
+ error "Must specify --mgs when formatting mdt combined with mgs"
+
+ # +MGS, format a mdt/ost without --mgsnode option
+ add mds1 $(mkfs_opts mds1 $mdsdev1) --reformat $mdsdev1 $mdsvdev1 \
+ > /dev/null || error "start mds1 failed"
+ add mds2 $opts_mds2 $mdsdev2 $mdsvdev2 &&
+ error "Must specify --mgsnode when formatting a mdt"
+ add ost1 $opts_ost1 $ostdev1 $ostvdev2 &&
+ error "Must specify --mgsnode when formatting an ost"
+
+ return 0
+}
+run_test 79 "format MDT/OST without mgs option (should return errors)"
+
+test_80() {
+ start_mds
+ start_ost
+ uuid=$(do_facet ost1 lctl get_param -n mgc.*.uuid)
+#define OBD_FAIL_MGS_PAUSE_TARGET_CON 0x906
+ do_facet ost1 "lctl set_param fail_val=10 fail_loc=0x906"
+ do_facet mgs "lctl set_param fail_val=10 fail_loc=0x906"
+ do_facet mgs "lctl set_param -n mgs/MGS/evict_client $uuid"
+ sleep 30
+ start_ost2
+
+ do_facet ost1 "lctl set_param fail_loc=0"
+ stopall
+}
+run_test 80 "mgc import reconnect race"
+
if ! combined_mgs_mds ; then
stop mgs
fi