ONLY=${ONLY:-"$*"}
# bug number for skipped test: 13739
-HEAD_EXCEPT=" 32a 32b"
+HEAD_EXCEPT=" 32a"
# bug number for skipped test:
ALWAYS_EXCEPT=" $CONF_SANITY_EXCEPT $HEAD_EXCEPT"
}
writeconf() {
- local facet=$SINGLEMDS
- local dev=${facet}_dev
- shift
- stop ${facet} -f
- rm -f ${facet}active
- # who knows if/where $TUNEFS is installed? Better reformat if it fails...
- do_facet ${facet} "$TUNEFS --writeconf ${!dev}" || echo "tunefs failed, reformatting instead" && reformat
+ local facet=$SINGLEMDS
+ local dev=${facet}_dev
+ shift
+ stop ${facet} -f
+ rm -f ${facet}active
+ # who knows if/where $TUNEFS is installed? Better reformat if it fails...
+ do_facet ${facet} "$TUNEFS --writeconf ${!dev}" || echo "tunefs failed, reformatting instead" && reformat
+
+ gen_config
}
gen_config() {
- reformat
- # The MGS must be started before the OSTs for a new fs, so start
- # and stop to generate the startup logs.
+ # The MGS must be started before the OSTs for a new fs, so start
+ # and stop to generate the startup logs.
start_mds
start_ost
sleep 5
stop_mds
}
+reformat_and_config() {
+ reformat
+ gen_config
+}
+
start_mds() {
local facet=$SINGLEMDS
# we can not use MDSDEV1 here because SINGLEMDS could be set not to mds1 only
mount_client $MOUNT
}
+setup_noconfig() {
+ start_mds
+ start_ost
+ mount_client $MOUNT
+}
+
cleanup_nocli() {
stop_mds || return 201
stop_ost || return 202
#create single point mountpoint
-gen_config
+reformat_and_config
test_0() {
setup
cleanup || return $?
log "read the mode of OBJECTS and check if they has been changed properly"
- EXPECTEDOBJECTSMODE=`do_facet $SINGLEMDS "debugfs -R 'stat OBJECTS' $MDSDEV 2> /dev/null" | grep 'Mode: ' | sed -e "s/.*Mode: *//" -e "s/ *Flags:.*//"`
+ EXPECTEDOBJECTSMODE=`do_facet $SINGLEMDS "$DEBUGFS -R 'stat OBJECTS' $MDSDEV 2> /dev/null" | grep 'Mode: ' | sed -e "s/.*Mode: *//" -e "s/ *Flags:.*//"`
if [ "$EXPECTEDOBJECTSMODE" = "0777" ]; then
log "Success:Lustre change the mode of OBJECTS correctly"
fi
echo "Remove mds config log"
- do_facet $SINGLEMDS "debugfs -w -R 'unlink CONFIGS/$FSNAME-MDT0000' $MDSDEV || return \$?" || return $?
+ do_facet $SINGLEMDS "$DEBUGFS -w -R 'unlink CONFIGS/$FSNAME-MDT0000' $MDSDEV || return \$?" || return $?
start_ost
start_mds && return 42
- gen_config
+ reformat_and_config
}
run_test 17 "Verify failed mds_postsetup won't fail assertion (2936) (should return errs)"
MDS_MKFS_OPTS="--mgs --mdt --fsname=$FSNAME --device-size=$myMDSSIZE --param sys.timeout=$TIMEOUT $MDSOPT"
- gen_config
+ reformat_and_config
echo "mount lustre system..."
setup
check_mount || return 41
echo "check journal size..."
- local FOUNDSIZE=`do_facet mds "debugfs -c -R 'stat <8>' $MDSDEV" | awk '/Size: / { print $NF; exit;}'`
+ local FOUNDSIZE=`do_facet mds "$DEBUGFS -c -R 'stat <8>' $MDSDEV" | awk '/Size: / { print $NF; exit;}'`
if [ $FOUNDSIZE -gt $((32 * 1024 * 1024)) ]; then
log "Success: mkfs creates large journals. Size: $((FOUNDSIZE >> 20))M"
else
cleanup || return $?
MDS_MKFS_OPTS=$OLD_MDS_MKFS_OPTS
- gen_config
+ reformat_and_config
}
run_test 18 "check mkfs creates large journals"
echo Client mount with ost in logs, but none running
start_ost
+ # wait until mds connected to ost and open client connection
+ # ping_interval + 1
+ sleep $((TIMEOUT / 4 + 1))
stop_ost
mount_client $MOUNT
# check_mount will block trying to contact ost
}
run_test 26 "MDT startup failure cleans LOV (should return errs)"
-wait_update () {
- local node=$1
- local TEST=$2
- local FINAL=$3
-
- local RESULT
- local MAX=90
- local WAIT=0
- local sleep=5
- while [ $WAIT -lt $MAX ]; do
- RESULT=$(do_node $node "$TEST")
- if [ $RESULT -eq $FINAL ]; then
- echo "Updated config after $WAIT sec: wanted $FINAL got $RESULT"
- return 0
- fi
- WAIT=$((WAIT + sleep))
- echo "Waiting $((MAX - WAIT)) secs for config update"
- sleep $sleep
- done
- echo "Config update not seen after $MAX sec: wanted $FINAL got $RESULT"
- return 3
-}
-
set_and_check() {
local myfacet=$1
local TEST=$2
FINAL=$(($ORIG + 5))
fi
echo "Setting $PARAM from $ORIG to $FINAL"
- do_facet $SINGLEMDS "$LCTL conf_param $PARAM=$FINAL" || error conf_param failed
+ do_facet $SINGLEMDS "$LCTL conf_param $PARAM='$FINAL'" || error conf_param failed
- wait_update $(facet_host $myfacet) "$TEST" $FINAL || error check failed!
+ wait_update $(facet_host $myfacet) "$TEST" "$FINAL" || error check failed!
}
test_27a() {
cleanup_nocli
#writeconf to remove all ost2 traces for subsequent tests
writeconf
- start_mds
- start_ost
- sleep 5
- cleanup
}
run_test 29 "permanently remove an OST"
}
cleanup_nocli32 () {
- stop32 mds -f
+ stop32 mds1 -f
stop32 ost1 -f
wait_exit_ST client
}
[ "$NETTYPE" = "tcp" ] || { skip "NETTYPE != tcp" && return 0; }
[ -z "$TUNEFS" ] && skip "No tunefs" && return
- local DISK1_8=$LUSTRE/tests/disk1_8.tgz
+ local DISK1_8=$LUSTRE/tests/disk1_8.tar.bz2
[ ! -r $DISK1_8 ] && skip "Cannot find $DISK1_8" && return 0
local tmpdir=$TMP/$tdir
mkdir -p $tmpdir
local fs2mdsdev=${fs2mds_DEV:-${MDSDEV}_2}
local fs2ostdev=${fs2ost_DEV:-$(ostdevname 1)_2}
- add fs2mds $MDS_MKFS_OPTS --fsname=${FSNAME2} --reformat $fs2mdsdev || exit 10
+ add fs2mds $MDS_MKFS_OPTS --mkfsoptions='\"-J size=8\"' --fsname=${FSNAME2} --reformat $fs2mdsdev || exit 10
add fs2ost $OST_MKFS_OPTS --fsname=${FSNAME2} --index=8191 --mgsnode=$MGSNID --reformat $fs2ostdev || exit 10
start fs2mds $fs2mdsdev $MDS_MOUNT_OPTS && trap cleanup_24a EXIT INT
# contact after the connection loss
$LCTL dk $TMP/lustre-log-$TESTNAME.log
NEXTCONN=`awk "/${MSG}/ {start = 1;}
- /import_select_connection.$device-mdc.* using connection/ {
+ /import_select_connection.*$device-mdc.* using connection/ {
if (start) {
if (\\\$NF ~ /$FAKENID/)
print \\\$NF;
local dev=${SINGLEMDS}_dev
local MDSDEV=${!dev}
- do_facet $SINGLEMDS "debugfs -c -R \\\"dump lov_objid $TMP/lov_objid.orig\\\" $MDSDEV"
- do_facet $SINGLEMDS "debugfs -w -R \\\"rm lov_objid\\\" $MDSDEV"
+ do_facet $SINGLEMDS "$DEBUGFS -c -R \\\"dump lov_objid $TMP/lov_objid.orig\\\" $MDSDEV"
+ do_facet $SINGLEMDS "$DEBUGFS -w -R \\\"rm lov_objid\\\" $MDSDEV"
do_facet $SINGLEMDS "od -Ax -td8 $TMP/lov_objid.orig"
# check create in mds_lov_connect
[ $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 "$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
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 "
+ do_facet $SINGLEMDS "$DEBUGFS -w -R \\\"rm lov_objid\\\" $MDSDEV"
+ do_facet $SINGLEMDS "$DEBUGFS -w -R \\\"write $TMP/lov_objid.clear lov_objid\\\" $MDSDEV "
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 "$DEBUGFS -c -R \\\"dump lov_objid $TMP/lov_objid.new1\\\" $MDSDEV"
do_facet $SINGLEMDS "od -Ax -td8 $TMP/lov_objid.new1"
umount_client $MOUNT
stop_mds
}
run_test 42 "invalid config param should not prevent client from mounting"
+test_43() {
+ [ $UID -ne 0 -o $RUNAS_ID -eq 0 ] && skip "run as root"
+ setup
+ chmod ugo+x $DIR || error "chmod 0 failed"
+ set_and_check mds \
+ "lctl get_param -n mdt.$FSNAME-MDT0000.root_squash" \
+ "$FSNAME.mdt.root_squash" \
+ "0:0"
+ set_and_check mds \
+ "lctl get_param -n mdt.$FSNAME-MDT0000.nosquash_nids" \
+ "$FSNAME.mdt.nosquash_nids" \
+ "NONE"
+
+ #
+ # create set of test files
+ #
+ echo "111" > $DIR/$tfile-userfile || error "write 1 failed"
+ chmod go-rw $DIR/$tfile-userfile || error "chmod 1 failed"
+ chown $RUNAS_ID.$RUNAS_ID $DIR/$tfile-userfile || error "chown failed"
+
+ echo "222" > $DIR/$tfile-rootfile || error "write 2 failed"
+ chmod go-rw $DIR/$tfile-rootfile || error "chmod 2 faield"
+
+ mkdir $DIR/$tdir-rootdir -p || error "mkdir failed"
+ chmod go-rwx $DIR/$tdir-rootdir || error "chmod 3 failed"
+ touch $DIR/$tdir-rootdir/tfile-1 || error "touch failed"
+
+ #
+ # check root_squash:
+ # set root squash UID:GID to RUNAS_ID
+ # root should be able to access only files owned by RUNAS_ID
+ #
+ set_and_check mds \
+ "lctl get_param -n mdt.$FSNAME-MDT0000.root_squash" \
+ "$FSNAME.mdt.root_squash" \
+ "$RUNAS_ID:$RUNAS_ID"
+
+ ST=$(stat -c "%n: owner uid %u (%A)" $DIR/$tfile-userfile)
+ dd if=$DIR/$tfile-userfile 1>/dev/null 2>/dev/null || \
+ error "$ST: root read permission is denied"
+ echo "$ST: root read permission is granted - ok"
+
+ echo "444" | \
+ dd conv=notrunc if=$DIR/$tfile-userfile 1>/dev/null 2>/dev/null || \
+ error "$ST: root write permission is denied"
+ echo "$ST: root write permission is granted - ok"
+
+ ST=$(stat -c "%n: owner uid %u (%A)" $DIR/$tfile-rootfile)
+ dd if=$DIR/$tfile-rootfile 1>/dev/null 2>/dev/null && \
+ error "$ST: root read permission is granted"
+ echo "$ST: root read permission is denied - ok"
+
+ echo "555" | \
+ dd conv=notrunc of=$DIR/$tfile-rootfile 1>/dev/null 2>/dev/null && \
+ error "$ST: root write permission is granted"
+ echo "$ST: root write permission is denied - ok"
+
+ ST=$(stat -c "%n: owner uid %u (%A)" $DIR/$tdir-rootdir)
+ rm $DIR/$tdir-rootdir/tfile-1 1>/dev/null 2>/dev/null && \
+ error "$ST: root unlink permission is granted"
+ echo "$ST: root unlink permission is denied - ok"
+
+ touch $DIR/tdir-rootdir/tfile-2 1>/dev/null 2>/dev/null && \
+ error "$ST: root create permission is granted"
+ echo "$ST: root create permission is denied - ok"
+
+ #
+ # check nosquash_nids:
+ # put client's NID into nosquash_nids list,
+ # root should be able to access root file after that
+ #
+ local NIDLIST=$(lctl list_nids all | tr '\n' ' ')
+ NIDLIST="2@elan $NIDLIST 192.168.0.[2,10]@tcp"
+ NIDLIST=$(echo $NIDLIST | tr -s ' ' ' ')
+ set_and_check mds \
+ "lctl get_param -n mdt.$FSNAME-MDT0000.nosquash_nids" \
+ "$FSNAME-MDTall.mdt.nosquash_nids" \
+ "$NIDLIST"
+
+ ST=$(stat -c "%n: owner uid %u (%A)" $DIR/$tfile-rootfile)
+ dd if=$DIR/$tfile-rootfile 1>/dev/null 2>/dev/null || \
+ error "$ST: root read permission is denied"
+ echo "$ST: root read permission is granted - ok"
+
+ echo "666" | \
+ dd conv=notrunc of=$DIR/$tfile-rootfile 1>/dev/null 2>/dev/null || \
+ error "$ST: root write permission is denied"
+ echo "$ST: root write permission is granted - ok"
+
+ ST=$(stat -c "%n: owner uid %u (%A)" $DIR/$tdir-rootdir)
+ rm $DIR/$tdir-rootdir/tfile-1 || \
+ error "$ST: root unlink permission is denied"
+ echo "$ST: root unlink permission is granted - ok"
+ touch $DIR/$tdir-rootdir/tfile-2 || \
+ error "$ST: root create permission is denied"
+ echo "$ST: root create permission is granted - ok"
+
+ return 0
+}
+run_test 43 "check root_squash and nosquash_nids"
+
umount_client $MOUNT
cleanup_nocli
start ost4 `ostdevname 4` $OST_MOUNT_OPTS || return 6
start ost5 `ostdevname 5` $OST_MOUNT_OPTS || return 7
# wait until ost2-5 is sync
- sleep 5
+ # ping_interval + 1
+ sleep $((TIMEOUT / 4 + 1))
#second client see both ost's
mount_client $MOUNT2 || return 8
run_test 46a "handle ost additional - wide striped file"
test_47() { #17674
- setup
+ reformat
+ setup_noconfig
check_mount || return 2
$LCTL set_param ldlm.namespaces.$FSNAME-*-*-*.lru_size=100
}
run_test 47 "server restart does not make client loss lru_resize settings"
+cleanup_48() {
+ trap 0
+
+ # reformat after this test is needed - if test will failed
+ # we will have unkillable file at FS
+ reformat_and_config
+}
+
+test_48() { # bug 17636
+ reformat
+ setup_noconfig
+ check_mount || return 2
+
+ $LFS setstripe $MOUNT -c -1 || return 9
+ $LFS getstripe $MOUNT || return 10
+
+ echo "ok" > $MOUNT/widestripe
+ $LFS getstripe $MOUNT/widestripe || return 11
+
+ trap cleanup_48 EXIT ERR
+
+ # fill acl buffer for avoid expand lsm to them
+ getent passwd | awk -F : '{ print "u:"$1":rwx" }' | while read acl; do
+ setfacl -m $acl $MOUNT/widestripe
+ done
+
+ stat $MOUNT/widestripe || return 12
+
+ cleanup_48
+ return 0
+}
+run_test 48 "too many acls on file"
+
+# check PARAM_SYS_LDLM_TIMEOUT option of MKFS.LUSTRE
+test_49() { # bug 17710
+ local OLD_MDS_MKFS_OPTS=$MDS_MKFS_OPTS
+ local OLD_OST_MKFS_OPTS=$OST_MKFS_OPTS
+ local LOCAL_TIMEOUT=20
+
+
+ OST_MKFS_OPTS="--ost --fsname=$FSNAME --device-size=$OSTSIZE --mgsnode=$MGSNID --param sys.timeout=$LOCAL_TIMEOUT --param sys.ldlm_timeout=$LOCAL_TIMEOUT $MKFSOPT $OSTOPT"
+
+ reformat
+ start_mds
+ start_ost
+ mount_client $MOUNT
+ check_mount || return 1
+
+ echo "check ldlm_timout..."
+ LDLM_MDS="`do_facet mds 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`"
+
+ if [ $LDLM_MDS -ne $LDLM_OST1 ] || [ $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"
+ fi
+
+ umount_client $MOUNT
+ stop_ost || return 2
+ stop_mds || return 3
+
+ OST_MKFS_OPTS="--ost --fsname=$FSNAME --device-size=$OSTSIZE --mgsnode=$MGSNID --param sys.timeout=$LOCAL_TIMEOUT --param sys.ldlm_timeout=$((LOCAL_TIMEOUT - 1)) $MKFSOPT $OSTOPT"
+
+ reformat
+ start_mds || return 4
+ start_ost || return 5
+ mount_client $MOUNT || return 6
+ check_mount || return 7
+
+ LDLM_MDS="`do_facet mds 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`"
+
+ if [ $LDLM_MDS -ne $LDLM_OST1 ] || [ $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"
+ fi
+
+ cleanup || return $?
+
+ MDS_MKFS_OPTS=$OLD_MDS_MKFS_OPTS
+ OST_MKFS_OPTS=$OLD_OST_MKFS_OPTS
+}
+run_test 49 "check PARAM_SYS_LDLM_TIMEOUT option of MKFS.LUSTRE"
+
cleanup_gss
equals_msg `basename $0`: test complete
[ -f "$TESTSUITELOG" ] && cat $TESTSUITELOG && grep -q FAIL $TESTSUITELOG && exit 1 || true