#!/bin/bash
-# FIXME - there is no reason to use all of these different
-# return codes, espcially when most of them are mapped to something
-# else anyway. The combination of test number and return code
-# figure out what failed.
+# FIXME - there is no reason to use all of these different return codes,
+# espcially when most of them are mapped to something else anyway.
+# The tests should use error() to describe the failure more clearly,
+# and reduce the need to look into the tests to see what failed.
set -e
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
- ALWAYS_EXCEPT="$ALWAYS_EXCEPT 57b 50h"
+# bug number for skipped test: LU-2778 LU-4444
+ ALWAYS_EXCEPT="$ALWAYS_EXCEPT 57b 69"
init_logging
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
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: "
}
run_test 28 "permanent parameter setting"
+test_28a() { # LU-4221
+ [[ $(lustre_version_code ost1) -ge $(version_code 2.5.52) ]] ||
+ { skip "Need OST version at least 2.5.52" && return 0; }
+ [ "$(facet_fstype ost1)" = "zfs" ] &&
+ skip "LU-4221: no such proc params for ZFS OSTs" && return
+
+ local name
+ local param
+ local cmd
+ local old
+ local new
+ local device="$FSNAME-OST0000"
+
+ setup
+
+ # In this test we will set three kinds of proc parameters with
+ # lctl conf_param:
+ # 1. the ones moved from the OFD to the OSD, and only their
+ # symlinks kept in obdfilter
+ # 2. non-symlink ones in the OFD
+ # 3. non-symlink ones in the OSD
+
+ # Check 1.
+ # prepare a symlink parameter in the OFD
+ name="writethrough_cache_enable"
+ param="$device.ost.$name"
+ cmd="$LCTL get_param -n obdfilter.$device.$name"
+
+ # conf_param the symlink parameter in the OFD
+ old=$(do_facet ost1 $cmd)
+ new=$(((old + 1) % 2))
+ set_conf_param_and_check ost1 "$cmd" "$param" $new ||
+ error "lctl conf_param $device.ost.$param=$new failed"
+
+ # conf_param the target parameter in the OSD
+ param="$device.osd.$name"
+ cmd="$LCTL get_param -n osd-*.$device.$name"
+ set_conf_param_and_check ost1 "$cmd" "$param" $old ||
+ error "lctl conf_param $device.osd.$param=$old failed"
+
+ # Check 2.
+ # prepare a non-symlink parameter in the OFD
+ name="client_cache_seconds"
+ param="$device.ost.$name"
+ cmd="$LCTL get_param -n obdfilter.$device.$name"
+
+ # conf_param the parameter in the OFD
+ old=$(do_facet ost1 $cmd)
+ new=$((old * 2))
+ set_conf_param_and_check ost1 "$cmd" "$param" $new ||
+ error "lctl conf_param $device.ost.$param=$new failed"
+ set_conf_param_and_check ost1 "$cmd" "$param" $old ||
+ error "lctl conf_param $device.ost.$param=$old failed"
+
+ # Check 3.
+ # prepare a non-symlink parameter in the OSD
+ name="lma_self_repair"
+ param="$device.osd.$name"
+ cmd="$LCTL get_param -n osd-*.$device.$name"
+
+ # conf_param the parameter in the OSD
+ old=$(do_facet ost1 $cmd)
+ new=$(((old + 1) % 2))
+ set_conf_param_and_check ost1 "$cmd" "$param" $new ||
+ error "lctl conf_param $device.osd.$param=$new failed"
+ set_conf_param_and_check ost1 "$cmd" "$param" $old ||
+ error "lctl conf_param $device.osd.$param=$old failed"
+
+ cleanup
+}
+run_test 28a "set symlink parameters permanently with conf_param"
+
test_29() {
[ "$OSTCOUNT" -lt "2" ] && skip_env "$OSTCOUNT < 2, skipping" && return
setup > /dev/null 2>&1
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
t32_test_cleanup() {
local tmp=$TMP/t32
+ local fstype=$(facet_fstype $SINGLEMDS)
local rc=$?
if $shall_cleanup_lustre; then
$r rm -rf $tmp
rm -rf $tmp
+ if [ $fstype == "zfs" ]; then
+ $r $ZPOOL destroy t32fs-mdt1 || rc=$?
+ $r $ZPOOL destroy t32fs-ost1 || rc=$?
+ fi
return $rc
}
t32_wait_til_devices_gone() {
local node=$1
local devices
+ local loops
local i=0
echo wait for devices to go
while ((i < 20)); do
devices=$(do_rpc_nodes $node $LCTL device_list | wc -l)
- ((devices == 0)) && return 0
+ loops=$(do_rpc_nodes $node losetup -a | grep -c t32)
+ ((devices == 0 && loops == 0)) && return 0
sleep 5
i=$((i + 1))
done
- echo "waiting for devices on $node: Given up"
+ echo "waiting for dev on $node: dev $devices loop $loops given up"
+ do_rpc_nodes $node "losetup -a"
+ do_rpc_nodes $node "$LCTL devices_list"
return 1
}
local nrpcs
local list
local fstype=$(facet_fstype $SINGLEMDS)
+ local mdt_dev=$tmp/mdt
+ local ost_dev=$tmp/ost
trap 'trap - RETURN; t32_test_cleanup' RETURN
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
+ $r $ZPOOL import -f -d $tmp t32fs-mdt1
+ $r $ZPOOL import -f -d $tmp t32fs-ost1
+ mdt_dev=t32fs-mdt1/mdt1
+ ost_dev=t32fs-ost1/ost1
+ wait_update_facet $SINGLEMDS "$ZPOOL list |
+ awk '/^t32fs-mdt1/ { print \\\$1 }'" "t32fs-mdt1" || {
+ error_noexit "import zfs pool failed"
+ return 1
+ }
+ fi
$r $LCTL set_param debug="$PTLDEBUG"
- $r $TUNEFS --dryrun $tmp/mdt || {
+ $r $TUNEFS --dryrun $mdt_dev || {
+ $r losetup -a
error_noexit "tunefs.lustre before mounting the MDT"
return 1
}
if [ "$writeconf" ]; then
- mopts=loop,writeconf
+ mopts=writeconf
if [ $fstype == "ldiskfs" ]; then
- $r $TUNEFS --quota $tmp/mdt || {
+ mopts="loop,$mopts"
+ $r $TUNEFS --quota $mdt_dev || {
+ $r losetup -a
error_noexit "Enable mdt quota feature"
return 1
}
local osthost=$(facet_active_host ost1)
local ostnid=$(do_node $osthost $LCTL list_nids | head -1)
- $r mount -t lustre -o loop,nosvc $tmp/mdt $tmp/mnt/mdt
+ mopts=nosvc
+ if [ $fstype == "ldiskfs" ]; then
+ mopts="loop,$mopts"
+ fi
+ $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
fi
- mopts=loop,exclude=$fsname-OST0000
+ mopts=exclude=$fsname-OST0000
+ if [ $fstype == "ldiskfs" ]; then
+ mopts="loop,$mopts"
+ fi
fi
t32_wait_til_devices_gone $node
- $r mount -t lustre -o $mopts $tmp/mdt $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
return 1
fi
- $r $TUNEFS --dryrun $tmp/ost || {
+ $r $TUNEFS --dryrun $ost_dev || {
error_noexit "tunefs.lustre before mounting the OST"
return 1
}
if [ "$writeconf" ]; then
- mopts=loop,mgsnode=$nid,$writeconf
+ mopts=mgsnode=$nid,$writeconf
if [ $fstype == "ldiskfs" ]; then
- $r $TUNEFS --quota $tmp/ost || {
+ mopts="loop,$mopts"
+ $r $TUNEFS --quota $ost_dev || {
+ $r losetup -a
error_noexit "Enable ost quota feature"
return 1
}
fi
else
- mopts=loop,mgsnode=$nid
+ mopts=mgsnode=$nid
+ if [ $fstype == "ldiskfs" ]; then
+ mopts="loop,$mopts"
+ fi
fi
- $r mount -t lustre -o $mopts $tmp/ost $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
}
}
# mount a second time to make sure we didnt leave upgrade flag on
- $r $TUNEFS --dryrun $tmp/mdt || {
+ $r $TUNEFS --dryrun $mdt_dev || {
+ $r losetup -a
error_noexit "tunefs.lustre before remounting the MDT"
return 1
}
- $r mount -t lustre -o loop,exclude=$fsname-OST0000 $tmp/mdt \
- $tmp/mnt/mdt || {
+
+ mopts=exclude=$fsname-OST0000
+ if [ $fstype == "ldiskfs" ]; then
+ mopts="loop,$mopts"
+ fi
+ $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
test_43() {
[ $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 || \
run_test 48 "too many acls on file"
# check PARAM_SYS_LDLM_TIMEOUT option of MKFS.LUSTRE
-test_49() { # bug 17710
+test_49a() { # bug 17710
local timeout_orig=$TIMEOUT
local ldlm_timeout_orig=$LDLM_TIMEOUT
local LOCAL_TIMEOUT=20
reformat
setup_noconfig
- check_mount || return 1
+ check_mount || error "client mount failed"
echo "check ldlm_timout..."
- LDLM_MDS="`do_facet $SINGLEMDS lctl get_param -n ldlm_timeout`"
- LDLM_OST1="`do_facet ost1 lctl get_param -n ldlm_timeout`"
- LDLM_CLIENT="`do_facet client lctl get_param -n ldlm_timeout`"
+ local LDLM_MDS="$(do_facet $SINGLEMDS lctl get_param -n ldlm_timeout)"
+ local LDLM_OST1="$(do_facet ost1 lctl get_param -n ldlm_timeout)"
+ local LDLM_CLIENT="$(do_facet client lctl get_param -n ldlm_timeout)"
- if [ $LDLM_MDS -ne $LDLM_OST1 ] || [ $LDLM_MDS -ne $LDLM_CLIENT ]; then
+ if [ $LDLM_MDS -ne $LDLM_OST1 -o $LDLM_MDS -ne $LDLM_CLIENT ]; then
error "Different LDLM_TIMEOUT:$LDLM_MDS $LDLM_OST1 $LDLM_CLIENT"
fi
if [ $LDLM_MDS -ne $((LOCAL_TIMEOUT / 3)) ]; then
- error "LDLM_TIMEOUT($LDLM_MDS) is not correct"
+ error "LDLM_TIMEOUT($LDLM_MDS) is not $((LOCAL_TIMEOUT / 3))"
fi
umount_client $MOUNT
- stop_ost || return 2
- stop_mds || return 3
+ stop_ost || error "problem stopping OSS"
+ stop_mds || error "problem stopping MDS"
+
+ LDLM_TIMEOUT=$ldlm_timeout_orig
+ TIMEOUT=$timeout_orig
+}
+run_test 49a "check PARAM_SYS_LDLM_TIMEOUT option of mkfs.lustre"
+
+test_49b() { # bug 17710
+ local timeout_orig=$TIMEOUT
+ local ldlm_timeout_orig=$LDLM_TIMEOUT
+ local LOCAL_TIMEOUT=20
LDLM_TIMEOUT=$((LOCAL_TIMEOUT - 1))
+ TIMEOUT=$LOCAL_TIMEOUT
reformat
setup_noconfig
- check_mount || return 7
+ check_mount || error "client mount failed"
- LDLM_MDS="`do_facet $SINGLEMDS lctl get_param -n ldlm_timeout`"
- LDLM_OST1="`do_facet ost1 lctl get_param -n ldlm_timeout`"
- LDLM_CLIENT="`do_facet client lctl get_param -n ldlm_timeout`"
+ local LDLM_MDS="$(do_facet $SINGLEMDS lctl get_param -n ldlm_timeout)"
+ local LDLM_OST1="$(do_facet ost1 lctl get_param -n ldlm_timeout)"
+ local LDLM_CLIENT="$(do_facet client lctl get_param -n ldlm_timeout)"
- if [ $LDLM_MDS -ne $LDLM_OST1 ] || [ $LDLM_MDS -ne $LDLM_CLIENT ]; then
+ if [ $LDLM_MDS -ne $LDLM_OST1 -o $LDLM_MDS -ne $LDLM_CLIENT ]; then
error "Different LDLM_TIMEOUT:$LDLM_MDS $LDLM_OST1 $LDLM_CLIENT"
fi
if [ $LDLM_MDS -ne $((LOCAL_TIMEOUT - 1)) ]; then
- error "LDLM_TIMEOUT($LDLM_MDS) is not correct"
+ error "LDLM_TIMEOUT($LDLM_MDS) is not $((LOCAL_TIMEOUT - 1))"
fi
- cleanup || return $?
+ cleanup || error "cleanup failed"
LDLM_TIMEOUT=$ldlm_timeout_orig
TIMEOUT=$timeout_orig
}
-run_test 49 "check PARAM_SYS_LDLM_TIMEOUT option of MKFS.LUSTRE"
+run_test 49b "check PARAM_SYS_LDLM_TIMEOUT option of mkfs.lustre"
lazystatfs() {
# Test both statfs and lfs df and fail if either one fails
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 68 "be able to reserve specific sequences in FLDB"
test_69() {
+ local server_version=$(lustre_version_code $SINGLEMDS)
+
+ [[ $server_version -lt $(version_code 2.4.2) ]] &&
+ skip "Need MDS version at least 2.4.2" && return
+
+ [[ $server_version -ge $(version_code 2.4.50) ]] &&
+ [[ $server_version -lt $(version_code 2.5.0) ]] &&
+ skip "Need MDS version at least 2.5.0" && return
+
setup
# use OST0000 since it probably has the most creations
mkdir -p $DIR/$tdir
$LFS setstripe -i 0 $DIR/$tdir
- createmany -o $DIR/$tdir/$tfile- $num_create
+ createmany -o $DIR/$tdir/$tfile- $num_create ||
+ error "createmany: failed to create $num_create files: $?"
# delete all of the files with objects on OST0 so the
# filesystem is not inconsistent later on
$LFS find $MOUNT --ost 0 | xargs rm
}
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
}