--reformat $mgs_flag $mkfsoptions $fs2mdsdev $fs2mdsvdev ||
exit 10
add fs2ost $(mkfs_opts ost1 ${fs2ostdev}) --mgsnode=$MGSNID \
- --fsname=${FSNAME2} --index=8191 --reformat $fs2ostdev \
+ --fsname=${FSNAME2} --index=0x1fff --reformat $fs2ostdev \
$fs2ostvdev || exit 10
start fs2mds $fs2mdsdev $MDS_MOUNT_OPTS && trap cleanup_fs2 EXIT INT
error "$LFS getstripe $MOUNT2/hosts failed"
umount $MOUNT2
+
+ # test lctl del_ost on large index
+ do_facet mgs "$LCTL del_ost -t ${FSNAME2}-OST1fff" ||
+ error "del_ost failed with $?"
+ $MOUNT_CMD $MGSNID:/${FSNAME2} $MOUNT2 || error "$MOUNT_CMD failed"
+ echo "ok."
+ $LFS df | grep -q OST1fff && error "del_ost did not remove OST1fff!"
+ umount $MOUNT2
+
stop fs2ost -f
stop fs2mds -f
cleanup_nocli || error "cleanup_nocli failed with $?"
start_ost || error "OST0 restart failure"
wait_osc_import_state mds ost FULL
+ sleep $((TIMEOUT/2)) #object recreation requires some time
mount_client $MOUNT || error "mount client failed"
touch $DIR/$tdir/$tfile-last || error "create file after reformat"
local idx=$($LFS getstripe -i $DIR/$tdir/$tfile-last)
local iused=$($LFS df -i $MOUNT |
awk '/OST0000/ { print $3 }'; exit ${PIPESTATUS[0]})
log "On OST0, $iused used inodes rc=$?"
- [ $iused -ge $((ost_max_pre/2 + 1000)) ] &&
+ [ $iused -ge $((ost_max_pre + 1000)) ] &&
error "OST replacement created too many inodes; $iused"
cleanup || error "cleanup failed with $?"
}
{
trap 0
stopall
- rm -f $TMP/$tdir/lustre-mdt
+ do_facet mds1 rm -f $1
}
test_115() {
fi
[ -n "$FILESET" ] && skip "Not functional for FILESET set"
- local dbfs_ver=$(do_facet $SINGLEMDS $DEBUGFS -V 2>&1)
+ local dbfs_ver=$(do_facet mds1 $DEBUGFS -V 2>&1)
echo "debugfs version: $dbfs_ver"
echo "$dbfs_ver" | egrep -w "1.44.3.wc1|1.44.5.wc1|1.45.2.wc1" &&
skip_env "This version of debugfs doesn't show inode number"
- IMAGESIZE=$((3072 << 30)) # 3072 GiB
+ local IMAGESIZE=$((3072 << 30)) # 3072 GiB
stopall
- local saved_flakey=${FLAKEY}
-
- stack_trap "FLAKEY=$saved_flakey" EXIT
FLAKEY=false
echo "client1: "
- lctl dl
+ $LCTL dl
mount | grep lustre
echo "mds1: "
- do_facet mds1 "hostname; lctl dl; mount"
+ do_facet mds1 "hostname; $LCTL dl; mount"
echo "ost1: "
- do_facet ost1 "hostname; lctl dl; mount"
+ do_facet ost1 "hostname; $LCTL dl; mount"
# We need MDT size 3072GB, because it is smallest
# partition that can store 2B inodes
- do_facet $SINGLEMDS "mkdir -p $TMP/$tdir"
+ do_facet mds1 "mkdir -p $TMP/$tdir"
local mdsimgname=$TMP/$tdir/lustre-mdt
- do_facet $SINGLEMDS "rm -f $mdsimgname"
- do_facet $SINGLEMDS "touch $mdsimgname"
- trap cleanup_115 RETURN EXIT
- do_facet $SINGLEMDS "$TRUNCATE $mdsimgname $IMAGESIZE" ||
+ do_facet mds1 "rm -f $mdsimgname"
+ do_facet mds1 "touch $mdsimgname"
+ stack_trap "cleanup_115 $mdsimgname" EXIT
+ do_facet mds1 "$TRUNCATE $mdsimgname $IMAGESIZE" ||
skip "Backend FS doesn't support sparse files"
- local mdsdev=$(do_facet $SINGLEMDS "losetup -f")
+ local mdsdev=$(do_facet mds1 "losetup -f")
- do_facet $SINGLEMDS "losetup $mdsdev $mdsimgname"
+ do_facet mds1 "losetup $mdsdev $mdsimgname"
local mds_opts="$(mkfs_opts mds1 $(mdsdevname 1)) \
--mkfsoptions='-O ea_inode,^resize_inode,meta_bg \
-N 2247484000 -E lazy_itable_init' --device-size=$IMAGESIZE"
add mds1 $mds_opts --mgs --reformat $mdsdev ||
skip_env "format large MDT failed"
- opts="$(mkfs_opts ost1 $(ostdevname 1)) \
- $replace --reformat $(ostdevname 1) $(ostvdevname 1)"
+
+ local ostdev=$(ostdevname 1)
+
+ local opts="$(mkfs_opts ost1 $ostdev) \
+ --reformat $ostdev $ostdev"
add ost1 $opts || error "add ost1 failed with new params"
- start $SINGLEMDS $mdsdev $MDS_MOUNT_OPTS || error "start MDS failed"
+ start mds1 $mdsdev $MDS_MOUNT_OPTS || error "start MDS failed"
start_ost || error "start OSS failed"
mount_client $MOUNT || error "mount client failed"
mkdir -p $DIR/$tdir || error "mkdir $DIR/$tdir fail"
- goal="/sys/fs/ldiskfs/$(basename $mdsdev)/inode_goal"
+ local goal="/sys/fs/ldiskfs/$(basename $mdsdev)/inode_goal"
echo goal: $goal
# 2147483648 is 0x80000000
- do_facet $SINGLEMDS "echo 2147483648 >> $goal; grep . $goal"
+ do_facet mds1 "echo 2147483648 >> $goal; grep . $goal"
touch $DIR/$tdir/$tfile
# attrs from 1 to 16 go to block, 17th - to inode
+ local i
+
for i in {1..17}; do
local nm="trusted.ea$i"
-
setfattr -n $nm -v $(printf "xattr%0250d" $i) $DIR/$tdir/$tfile
done
- do_facet $SINGLEMDS $DEBUGFS -c -R "stat ROOT/$tdir/$tfile" $mdsdev
+ do_facet mds1 "$DEBUGFS -c -R 'stat ROOT/$tdir/$tfile' $mdsdev"
# inode <2147483649> trusted.ea16 (255)
- local inode_num=$(do_facet $SINGLEMDS \
+ local inode_num=$(do_facet mds1 \
"$DEBUGFS -c -R 'stat ROOT/$tdir/$tfile' $mdsdev" |
awk '/ea17/ { print $2 }' |
sed -e 's/>//' -e 's/<//' -e 's/\"//')
echo "inode num: $inode_num"
[ $inode_num -ge 2147483648 ] || error "inode $inode_num too small"
- do_facet $SINGLEMDS "losetup -d $mdsdev"
- cleanup_115
+ do_facet mds1 "losetup -d $mdsdev"
}
run_test 115 "Access large xattr with inodes number over 2TB"
}
run_test 123ag "llog_print skips values deleted by set_param -P -d"
+test_123ah() { #LU-7668 del_ost
+ [ "$MGS_VERSION" -ge $(version_code 2.15.50) -a \
+ "$MDS1_VERSION" -ge $(version_code 2.15.50) ] ||
+ skip "Need both MGS and MDS version at least 2.15.50"
+
+ [ -d $MOUNT/.lustre ] || setupall
+ stack_trap "do_facet mds1 $LCTL set_param fail_loc=0" EXIT
+
+ local cmd="--device MGS llog_print"
+
+ cli_llogcnt_orig=$(do_facet mgs $LCTL $cmd $FSNAME-client |
+ grep -c $FSNAME-OST0000)
+ mds1_llogcnt_orig=$(do_facet mgs $LCTL $cmd $FSNAME-MDT0000 |
+ grep -c $FSNAME-OST0000)
+
+ [ $cli_llogcnt_orig -gt 0 ] ||
+ error "$FSNAME-OST0000 not found (client)"
+ [ $mds1_llogcnt_orig -gt 0 ] || error "$FSNAME-OST0000 not found (MDT)"
+
+ # -n/--dryrun should NOT modify catalog
+ do_facet mgs "$LCTL del_ost -n -t $FSNAME-OST0000" ||
+ error "del_ost --dryrun failed with $?"
+
+ local cli_llogcnt=$(do_facet mgs $LCTL $cmd $FSNAME-client |
+ grep -c $FSNAME-OST0000)
+ local mds1_llogcnt=$(do_facet mgs $LCTL $cmd $FSNAME-MDT0000 |
+ grep -c $FSNAME-OST0000)
+
+ [ $cli_llogcnt -eq $cli_llogcnt_orig ] ||
+ error "--dryrun error: $cli_llogcnt != $cli_llogcnt_orig"
+ [ $mds1_llogcnt -eq $mds1_llogcnt_orig ] ||
+ error "--dryrun error: $mds1_llogcnt != $mds1_llogcnt_orig"
+
+ # actual run
+ do_facet mgs "$LCTL del_ost --target $FSNAME-OST0000" ||
+ error "del_ost failed with $?"
+
+ local cli_llogcnt=$(do_facet mgs $LCTL $cmd $FSNAME-client |
+ grep -c $FSNAME-OST0000)
+ local mds1_llogcnt=$(do_facet mgs $LCTL $cmd $FSNAME-MDT0000 |
+ grep -c $FSNAME-OST0000)
+
+ # every catalog entry for OST0000 should have been cancelled
+ [ $cli_llogcnt -eq 0 ] || error "$FSNAME-OST0000 not cancelled (cli)"
+ [ $mds1_llogcnt -eq 0 ] || error "$FSNAME-OST0000 not cancelled (MDT)"
+
+ umount_client $MOUNT
+ mount_client $MOUNT
+
+ $LFS df | grep -q OST0000 && error "del_ost did not remove OST0000!"
+ cleanup
+ reformat_and_config
+}
+run_test 123ah "del_ost cancels config log entries correctly"
+
test_123F() {
remote_mgs_nodsh && skip "remote MGS with nodsh"