# ensure that all stripes have some grant before we test client-side cache
setup_test42() {
- [ "$SETUP_TEST42" ] && return
for i in `seq -f $DIR/f42-%g 1 $OSTCOUNT`; do
dd if=/dev/zero of=$i bs=4k count=1
rm $i
done
- SETUP_TEST42=DONE
}
# Tests 42* verify that our behaviour is correct WRT caching, file closure,
}
run_test 101 "check read-ahead for random reads ================"
-export SETUP_TEST101=no
setup_test101() {
- [ "$SETUP_TEST101" = "yes" ] && return
mkdir -p $DIR/$tdir
STRIPE_SIZE=1048576
STRIPE_COUNT=$OSTCOUNT
$SETSTRIPE $DIR/$tfile -s $STRIPE_SIZE -i $STRIPE_OFFSET -c $OSTCOUNT
dd if=/dev/zero of=$DIR/$tfile bs=1024k count=100 2> /dev/null
- SETUP_TEST101=yes
}
cleanup_test101() {
- [ "$SETUP_TEST101" = "yes" ] || return
trap 0
rm -rf $DIR/$tdir
- rm -f $DIR/$tfile
- SETUP_TEST101=no
+ rm -f $DIR/$tfile
}
calc_total() {
cancel_lru_locks osc
ra_check_101 $BSIZE
done
- cleanup_test101
true
}
run_test 101b "check stride-io mode read-ahead ================="
}
run_test 101d "file read with and without read-ahead enabled ================="
-export SETUP_TEST102=no
setup_test102() {
- [ "$SETUP_TEST102" = "yes" ] && return
mkdir -p $DIR/$tdir
chown $RUNAS_ID $DIR/$tdir
STRIPE_SIZE=65536
cd $DIR
$1 $TAR cf $TMP/f102.tar $tdir --xattrs
- SETUP_TEST102=yes
}
cleanup_test102() {
trap 0
- [ "$SETUP_TEST102" = "yes" ] || return 0
rm -f $TMP/f102.tar
- SETUP_TEST102=no
+ rm -rf $DIR/d0.sanity/d102
}
test_102a() {
[ $MINC -gt 0 ] && echo "Wrote $(($MAXC * 100 / $MINC - 100))% more files to larger OST $MAXI1"
[ $MAXC -gt $MINC ] || error_ignore "stripe QOS didn't balance free space"
- rm -rf $DIR/$tdir/OST${MINI}
+ rm -rf $DIR/$tdir
}
run_test 116 "stripe QOS: free space balance ==================="
set_nodes_failloc "$(osts_nodes)" 0x20e
mkdir -p $DIR/$tdir
- for ((i=0;i<10;i++)); do
- (dd if=/dev/zero of=$DIR/$tdir/$tfile-$i bs=1M count=10 || \
+ for ((i=0;i<10;i++)); do
+ (dd if=/dev/zero of=$DIR/$tdir/$tfile-$i bs=1M count=10 || \
error "dd to $DIR/$tdir/$tfile-$i failed" )&
- SLEEPPID=$!
- sleep 0.500s
- kill $SLEEPPID
- wait $SLEEPPID
- done
+ SLEEPPID=$!
+ sleep 0.500s
+ kill $SLEEPPID
+ wait $SLEEPPID
+ done
- set_nodes_failloc "$(osts_nodes)" 0
+ set_nodes_failloc "$(osts_nodes)" 0
+ rm -rf $DIR/$tdir
}
run_test 118k "bio alloc -ENOMEM and IO TERM handling ========="
if [ x$som = x"enabled" ]; then
[ $((gl2 - gl1)) -gt 0 ] && error "no glimpse RPC is expected"
+ MOUNTOPT=`echo $MOUNTOPT | sed 's/som_preview//g'`
do_facet mgs "$LCTL conf_param $FSNAME.mdt.som=disabled"
else
[ $((gl2 - gl1)) -gt 0 ] || error "some glimpse RPC is expected"
+ MOUNTOPT="$MOUNTOPT,som_preview"
do_facet mgs "$LCTL conf_param $FSNAME.mdt.som=enabled"
fi
}
test_132() { #1028, SOM
- local num=$(get_mds_dir $DIR)
- local mymds=mds${num}
+ local num=$(get_mds_dir $DIR)
+ local mymds=mds${num}
+ local MOUNTOPT_SAVE=$MOUNTOPT
dd if=/dev/zero of=$DIR/$tfile count=1 2>/dev/null
cancel_lru_locks osc
gl1=$(get_ost_param "ldlm_glimpse_enqueue")
stat $DIR/$tfile >/dev/null
gl2=$(get_ost_param "ldlm_glimpse_enqueue")
- echo "SOM is "$som2", "$((gl2 - gl1))" glimpse RPC occured"
+ echo "====> SOM is "$som2", "$((gl2 - gl1))" glimpse RPC occured"
som_mode_switch $som2 $gl1 $gl2
+ MOUNTOPT=$MOUNTOPT_SAVE
}
run_test 132 "som avoids glimpse rpc"
rm $DIR/$tdir/$tfile
# rename
mv $DIR/$tdir/foo1/sofia $DIR/$tdir/foo2/maggie
- if [ "$($LFS fid2path $DIR --link 1 $FID)" != "/$tdir/foo2/maggie" ]
+ if [ "$($LFS fid2path $FSNAME --link 1 $FID)" != "$tdir/foo2/maggie" ]
then
$LFS fid2path $DIR $FID
err17935 "bad link rename"
mkdir -p $DIR/$tdir/d2/p/q/r
# regular file
FID=$($LFS path2fid $DIR/$tdir/d2/$tfile | tr -d '[')
- check_path "/$tdir/d2/$tfile" $DIR $FID --link 0
+ check_path "$tdir/d2/$tfile" $FSNAME $FID --link 0
# softlink
ln -s $DIR/$tdir/d2/$tfile $DIR/$tdir/d2/p/q/r/slink
FID=$($LFS path2fid $DIR/$tdir/d2/p/q/r/slink | tr -d '[')
- check_path "/$tdir/d2/p/q/r/slink" $DIR $FID --link 0
+ check_path "$tdir/d2/p/q/r/slink" $FSNAME $FID --link 0
# hardlink
ln $DIR/$tdir/d2/$tfile $DIR/$tdir/d2/p/q/r/hlink
mv $DIR/$tdir/d2/$tfile $DIR/$tdir/d2/a/b/c/new_file
FID=$($LFS path2fid $DIR/$tdir/d2/a/b/c/new_file | tr -d '[')
# fid2path dir/fsname should both work
- check_path "/$tdir/d2/a/b/c/new_file" $FSNAME $FID --link 1
- check_path "/$tdir/d2/p/q/r/hlink" $DIR $FID --link 0
+ check_path "$tdir/d2/a/b/c/new_file" $FSNAME $FID --link 1
+ check_path "$DIR/$tdir/d2/p/q/r/hlink" $DIR $FID --link 0
# hardlink count: check that there are 2 links
# Doesnt work with CMD yet: 17935
# hardlink indexing: remove the first link
rm $DIR/$tdir/d2/p/q/r/hlink
- check_path "/$tdir/d2/a/b/c/new_file" $DIR $FID --link 0
+ check_path "$tdir/d2/a/b/c/new_file" $FSNAME $FID --link 0
return 0
}
local rc=0
local ost_nid=$1
local obdfilter_name=$2
+ echo "Creating new osc for $obdfilter_name on $ost_nid"
[ $rc -eq 0 ] && { $LCTL attach osc ${obdfilter_name}_osc \
${obdfilter_name}_osc_UUID || rc=2; }
[ $rc -eq 0 ] && { $LCTL --device ${obdfilter_name}_osc setup \
return $rc
}
-cleaup_obdecho_osc () {
+cleanup_obdecho_osc () {
local obdfilter_name=$1
$LCTL --device ${obdfilter_name}_osc cleanup >/dev/null
$LCTL --device ${obdfilter_name}_osc detach >/dev/null
local OBD=$1
local node=$2
local rc=0
+ local id
do_facet $node "$LCTL attach echo_client ec ec_uuid" || rc=1
- [ $rc -eq 0 ] && { do_facet $node "$LCTL --device ec setup $OBD" || \
+ [ $rc -eq 0 ] && { do_facet $node "$LCTL --device ec setup $OBD" ||
rc=2; }
- [ $rc -eq 0 ] && { do_facet $node "$LCTL --device ec create 1" || \
- rc=3; }
- [ $rc -eq 0 ] && { do_facet $node "$LCTL --device ec test_brw 0 w 1" ||\
+ if [ $rc -eq 0 ]; then
+ id=$(do_facet $node "$LCTL --device ec create 1" | awk '/object id/ {print $6}')
+ [ ${PIPESTATUS[0]} -eq 0 -a -n "$id" ] || rc=3
+ fi
+ echo "New object id is $id"
+ [ $rc -eq 0 ] && { do_facet $node "$LCTL --device ec test_brw 10 w v 64 $id" ||
rc=4; }
[ $rc -eq 0 -o $rc -gt 2 ] && { do_facet $node "$LCTL --device ec " \
"cleanup" || rc=5; }
[ $rc -eq 0 -o $rc -gt 1 ] && { do_facet $node "$LCTL --device ec " \
"detach" || rc=6; }
+ [ $rc -ne 0 ] && echo "obecho_create_test failed: $rc"
return $rc
}
-test_180() {
+test_180a() {
local rc=0
local rmmod_local=0
- local rmmod_remote=0
- lsmod | grep -q obdecho || \
- { load_module obdecho/obdecho && rmmod_local=1; }
- OBD=$($LCTL dl | grep -v mdt | grep osc | awk '{print $4;exit}')
- HOST=$($LCTL dl -t | grep -v mdt | grep osc | awk '{print $7;exit}')
- OBD=`echo $OBD | sed 's/-osc-.*$//'`
- [ "x$OBD" != "x" ] && { setup_obdecho_osc $HOST $OBD || rc=1; } || rc=1
- [ $rc -eq 0 ] && { obdecho_create_test ${OBD}_osc client || rc=2; }
- [ "x$OBD" != "x" ] && cleaup_obdecho_osc $OBD
+ if ! module_loaded obdecho; then
+ load_module obdecho/obdecho
+ rmmod_local=1
+ fi
+
+ local osc=$($LCTL dl | grep -v mdt | awk '$3 == "osc" {print $4; exit}')
+ local host=$(awk '/current_connection:/ {print $2}' /proc/fs/lustre/osc/$osc/import)
+ local target=$(awk '/target:/ {print $2}' /proc/fs/lustre/osc/$osc/import)
+ target=${target%_UUID}
+
+ [[ -n $target ]] && { setup_obdecho_osc $host $target || rc=1; } || rc=1
+ [ $rc -eq 0 ] && { obdecho_create_test ${target}_osc client || rc=2; }
+ [[ -n $target ]] && cleanup_obdecho_osc $target
[ $rmmod_local -eq 1 ] && rmmod obdecho
- [ $rc -eq 0 ] || return $rc
+ return $rc
+}
+run_test 180a "test obdecho on osc"
+
+test_180b() {
+ local rc=0
+ local rmmod_remote=0
do_facet ost "lsmod | grep -q obdecho || " \
"{ insmod ${LUSTRE}/obdecho/obdecho.ko || " \
"modprobe obdecho; }" && rmmod_remote=1
- OBD=$(do_facet ost $LCTL dl | awk '/obdfilter/ {print $4;exit}')
- [ "x$OBD" != "x" ] && { obdecho_create_test $OBD ost || rc=3; }
+ target=$(do_facet ost $LCTL dl | awk '/obdfilter/ {print $4;exit}')
+ [[ -n $target ]] && { obdecho_create_test $target ost || rc=1; }
[ $rmmod_remote -eq 1 ] && do_facet ost "rmmod obdecho"
- [ $rc -eq 0 ] || return $rc
-
- true
+ return $rc
}
-run_test 180 "test obdecho ============================================"
+run_test 180b "test obdecho directly on obdfilter"
# OST pools tests
POOL=${POOL:-cea1}
TGTPOOL_STEP=2
TGTPOOL_LIST=`seq $TGTPOOL_FIRST $TGTPOOL_STEP $TGTPOOL_MAX`
POOL_ROOT=${POOL_ROOT:-$DIR/d200.pools}
-POOL_DIR=$POOL_ROOT/dir_tst
+POOL_DIR_NAME=dir_tst
+POOL_DIR=$POOL_ROOT/$POOL_DIR_NAME
POOL_FILE=$POOL_ROOT/file_tst
check_file_in_pool()
mkdir -p $POOL_DIR
$SETSTRIPE -c 2 -p $POOL $POOL_DIR
[ $? = 0 ] || error "Cannot set pool $POOL to $POOL_DIR"
+ # b-19919 test relative path works well
+ mkdir -p $POOL_DIR/$POOL_DIR_NAME
+ cd $POOL_DIR
+ $SETSTRIPE -c 2 -p $POOL $POOL_DIR_NAME
+ [ $? = 0 ] || error "Cannot set pool $POOL to $POOL_DIR/$POOL_DIR_NAME"
+ $SETSTRIPE -c 2 -p $POOL ./$POOL_DIR_NAME
+ [ $? = 0 ] || error "Cannot set pool $POOL to $POOL_DIR/./$POOL_DIR_NAME"
+ $SETSTRIPE -c 2 -p $POOL ../$POOL_DIR_NAME
+ [ $? = 0 ] || error "Cannot set pool $POOL to $POOL_DIR/../$POOL_DIR_NAME"
+ $SETSTRIPE -c 2 -p $POOL ../$POOL_DIR_NAME/$POOL_DIR_NAME
+ [ $? = 0 ] || error "Cannot set pool $POOL to $POOL_DIR/../$POOL_DIR_NAME/$POOL_DIR_NAME"
+ rm -rf $POOL_DIR_NAME; cd -
}
run_test 200c "Set pool on a directory ================================="