. $LUSTRE/tests/test-framework.sh
init_test_env $@
. ${CONFIG:=$LUSTRE/tests/cfg/$NAME.sh}
+get_lustre_env
init_logging
[[ $(lustre_version_code $SINGLEMDS) -ge $(version_code 2.10.56) ]] ||
verify_mirror_count() {
local tf=$1
local expected=$2
- local mirror_count=$(get_mirror_ids $tf)
+ local mirror_count=$($LFS getstripe -N $tf)
[[ $mirror_count = $expected ]] || {
$LFS getstripe -v $tf
cat $tf &> /dev/null || error "error reading file '$tf'"
# verify that the data was provided by OST1 where mirror 1 resides
- local nr_read=$($LCTL get_param -n osc.$FSNAME-OST0000-osc-ffff*.stats |
+ local nr_read=$($LCTL get_param -n osc.$FSNAME-OST0000-osc-[-0-9a-f]*.stats |
awk '/ost_read/{print $2}')
[ -n "$nr_read" ] || error "read was not provided by OST1"
}
run_test 0g "lfs mirror create flags support"
test_0h() {
- local tf=$DIR/$tfile
+ [ $MDS1_VERSION -lt $(version_code 2.11.57) ] &&
+ skip "Need MDS version at least 2.11.57"
- $LFS mirror create -N -E 1M -S 1M --flags=prefer -E eof -N2 $tf ||
- error "create mirrored file $tf failed"
+ local td=$DIR/$tdir
+ local tf=$td/$tfile
+ local ids
+ local i
+
+ # create parent directory
+ test_mkdir $td || error "mkdir $td failed"
+
+ $LFS setstripe -N -E 1M -S 1M --flags=prefer -E eof -N2 $td ||
+ error "set default mirrored layout on directory $td failed"
+
+ # verify flags are inherited from the directory
+ touch $tf
verify_comp_attr lcme_flags $tf 0x10001 prefer
verify_comp_attr lcme_flags $tf 0x10002 prefer
local osc_name
local count
- osc_name=${FSNAME}-OST$(printf "%04x" $((idx-1)))-osc-'ffff*'
+ osc_name=${FSNAME}-OST$(printf "%04x" $((idx-1)))-osc-'[-0-9a-f]*'
count=$($LCTL get_param -n ldlm.namespaces.$osc_name.lock_count)
lock_count=$((lock_count + count))
done
error "extending mirrored file $DIR/$tfile failed"
# make sure the mirrored file was created successfully
- [ $(get_mirror_ids $DIR/$tfile) -eq 2 ] ||
+ [ $($LFS getstripe -N $DIR/$tfile) -eq 2 ] ||
{ $LFS getstripe $DIR/$tfile; error "expected 2 mirrors"; }
drop_client_cache
"without verification failed"
# make sure that $tfile has two mirrors and $tfile-2 does not exist
- [ $(get_mirror_ids $DIR/$tfile) -eq 2 ] ||
+ [ $($LFS getstripe -N $DIR/$tfile) -eq 2 ] ||
{ $LFS getstripe $DIR/$tfile; error "expected count 2"; }
[[ ! -e $DIR/$tfile-2 ]] || error "$DIR/$tfile-2 was not unlinked"
start_osts 1
# read file again with ost2 failed
- $LCTL set_param ldlm.namespaces.lustre-*-osc-ffff*.lru_size=clear
+ $LCTL set_param ldlm.namespaces.lustre-*-osc-[-0-9a-f]*.lru_size=clear
fail ost2 &
sleep 1
[[ "$rs" == "ost1" ]] ||
error "file content error: expected: \"ost1\", actual: \"$rs\""
- wait_osc_import_state client ost2 FULL
+ wait_osc_import_ready client ost2
}
run_test 33 "read can choose available mirror to read"
create_file_36 $tf $tf-2 $tf-3
- [ $(get_mirror_ids $tf) -gt 1 ] || error "wrong mirror count"
+ [ $($LFS getstripe -N $tf) -gt 1 ] || error "wrong mirror count"
# test case 1 - check file write and verify layout version
$MULTIOP $tf oO_WRONLY:c ||
verify_ost_layout_version $tf
# test case 2
- local mds_idx=mds$(($($LFS getstripe -m $tf-2) + 1))
+ local mds_facet=mds$(($($LFS getstripe -m $tf-2) + 1))
local delay_sec=10
- do_facet $mds_idx $LCTL set_param fail_val=$delay_sec
+ do_facet $mds_facet $LCTL set_param fail_val=$delay_sec
#define OBD_FAIL_FLR_LV_DELAY 0x1A01
- do_facet $mds_idx $LCTL set_param fail_loc=0x1A01
+ do_facet $mds_facet $LCTL set_param fail_loc=0x1A01
# write should take at least $fail_loc seconds and succeed
local st=$(date +%s)
# verify OST layout version
verify_ost_layout_version $tf
- do_facet $mds_idx $LCTL set_param fail_loc=0
+ do_facet $mds_facet $LCTL set_param fail_loc=0
# test case 3
mds_idx=mds$(($($LFS getstripe -m $tf-3) + 1))
#define OBD_FAIL_FLR_LV_INC 0x1A02
- do_facet $mds_idx $LCTL set_param fail_loc=0x1A02
+ do_facet $mds_facet $LCTL set_param fail_loc=0x1A02
# write open file should return error
$MULTIOP $tf-3 oO_WRONLY:O_SYNC:w1024c &&
error "write a mirrored file succeeded" || true
- do_facet $mds_idx $LCTL set_param fail_loc=0
+ do_facet $mds_facet $LCTL set_param fail_loc=0
}
run_test 36 "write to mirrored files"
test_37()
{
+ [ $MDS1_VERSION -lt $(version_code 2.11.57) ] &&
+ skip "Need MDS version at least 2.11.57"
+
local tf=$DIR/$tfile
local tf2=$DIR/$tfile-2
local tf3=$DIR/$tfile-3
+ local tf4=$DIR/$tfile-4
create_files_37 $((RANDOM + 15 * 1048576)) $tf $tf2 $tf3
+ rm -f $tf4
+ cp $tf $tf4
# assume the mirror id will be 1, 2, and 3
declare -A checksums
local sum
for i in ${mirror_array[@]}; do
- sum=$($LFS mirror dump -N $i $tf | md5sum)
+ $LCTL set_param ldlm.namespaces.*.lru_size=clear > /dev/null
+ sum=$($LFS mirror read -N $i $tf | md5sum)
[ "$sum" = "${checksums[$i]}" ] ||
error "$i: mismatch: \'${checksums[$i]}\' vs. \'$sum\'"
done
+ # verify mirror write
+ echo "Verifying mirror write .."
+ $LFS mirror write -N2 $tf < $tf4
+
+ sum=$($LFS mirror read -N2 $tf | md5sum)
+ [[ "$sum" = "${checksums[1]}" ]] ||
+ error "2: mismatch \'${checksums[1]}\' vs. \'$sum\'"
+
# verify mirror copy, write to this mirrored file will invalidate
# the other two mirrors
echo "Verifying mirror copy .."
# verify copying is successful by checking checksums
remount_client $MOUNT
for i in ${mirror_array[@]}; do
- sum=$($LFS mirror dump -N $i $tf | md5sum)
+ sum=$($LFS mirror read -N $i $tf | md5sum)
[ "$sum" = "${checksums[1]}" ] ||
error "$i: mismatch checksum after copy"
done
local valid_mirror stale_mirror id mirror_cksum
for id in "${mirror_array[@]}"; do
- mirror_cksum=$($LFS mirror dump -N $id $tf | md5sum)
+ mirror_cksum=$($LFS mirror read -N $id $tf | md5sum)
[ "$ref_cksum" == "$mirror_cksum" ] &&
{ valid_mirror=$id; continue; }
mirror_io resync $tf || error "resync failed"
verify_flr_state $tf "ro"
- mirror_cksum=$($LFS mirror dump -N $stale_mirror $tf | md5sum)
+ mirror_cksum=$($LFS mirror read -N $stale_mirror $tf | md5sum)
[ "$file_cksum" = "$ref_cksum" ] || error "resync failed"
# case 2: inject an error to make mirror_io exit after changing
echo " **verify $tf-1 data consistency in all mirrors"
for i in 1 2 3; do
- local sum=$($LFS mirror dump -N$i $tf-1 | md5sum)
+ local sum=$($LFS mirror read -N$i $tf-1 | md5sum)
[[ "$sum" = "$sum0" ]] ||
error "$tf-1.$i: checksum mismatch: $sum != $sum0"
done
run_test 44 "lfs mirror split check"
test_45() {
- [ $OSTCOUNT -lt 2 ] && skip "needs >= 2 OSTs" && return
+ [ $OSTCOUNT -lt 2 ] && skip "needs >= 2 OSTs"
local file=$DIR/$tdir/$tfile
local dir=$DIR/$tdir/$dir
-N -E3m -S1m -Eeof -N -E8m -Eeof $file ||
error "Create $file failed"
- echo "getstripe --yaml $file"
- $LFS getstripe --yaml $file > $temp || error "getstripe $file failed"
- echo "setstripe --yaml=$temp $file.2"
- $LFS setstripe --yaml=$temp $file.2 || error "setstripe $file.2 failed"
+ verify_yaml_layout $file $file.copy $temp "1. FLR file"
+ rm -f $file $file.copy
- echo "compare layout"
- local layout1=$(get_layout_param $file)
- local layout2=$(get_layout_param $file.2)
- [ "$layout1" == "$layout2" ] ||
- error "FLR file $file/$file.2 layouts are not equal"
+ $LFS setstripe -N -E1m -S1m -c2 -o0,1 -E2m -Eeof -N -E4m -Eeof \
+ -N -E3m -S1m -Eeof -N -E8m --flags=prefer -Eeof $file ||
+ error "Create $file failed"
+
+ verify_yaml_layout $file $file.copy $temp "2. FLR file with flags"
}
run_test 45 "Verify setstripe/getstripe with YAML with FLR file"
run_test 47 "Verify mirror obj alloc"
test_48() {
+ [ $MDS1_VERSION -lt $(version_code 2.11.55) ] &&
+ skip "Need MDS version at least 2.11.55"
+
local tf=$DIR/$tfile
rm -f $tf
verify_flr_state $tf "wp"
verify_comp_attr lcme_flags $tf 0x20003 nosync,stale
- local sum1=$($LFS mirror dump -N1 $tf | md5sum)
- local sum2=$($LFS mirror dump -N2 $tf | md5sum)
+ local sum1=$($LFS mirror read -N1 $tf | md5sum)
+ local sum2=$($LFS mirror read -N2 $tf | md5sum)
echo " ** verify mirror 2 doesn't change"
echo "original checksum: $sum0"
verify_flr_state $tf "ro"
verify_comp_attr lcme_flags $tf 0x20003 nosync,^stale
- sum1=$($LFS mirror dump -N1 $tf | md5sum)
- sum2=$($LFS mirror dump -N2 $tf | md5sum)
+ sum1=$($LFS mirror read -N1 $tf | md5sum)
+ sum2=$($LFS mirror read -N2 $tf | md5sum)
echo " ** verify mirror 2 resync-ed"
echo "original checksum: $sum0"
mirror_io resync $tf
get_mirror_ids $tf
- local csum=$($LFS mirror dump -N ${mirror_array[0]} $tf | md5sum)
+ local csum=$($LFS mirror read -N ${mirror_array[0]} $tf | md5sum)
for id in ${mirror_array[@]:1}; do
- [ "$($LFS mirror dump -N $id $tf | md5sum)" = "$csum" ] ||
+ [ "$($LFS mirror read -N $id $tf | md5sum)" = "$csum" ] ||
error "checksum error for mirror $id"
done
run_test 202 "lfs setstripe --add-component wide striping"
test_203() {
- [[ $OSTCOUNT -lt 2 ]] && skip "need >= 2 OSTs" && return
+ [ $MDS1_VERSION -lt $(version_code 2.11.55) ] &&
+ skip "Need MDS version at least 2.11.55"
+ [[ $OSTCOUNT -lt 2 ]] && skip "need >= 2 OSTs"
local tf=$DIR/$tfile