Whamcloud - gitweb
LU-13366 tests: add SEL support to racer
[fs/lustre-release.git] / lustre / tests / racer / file_create.sh
index 7de46b6..dcd4033 100755 (executable)
@@ -1,19 +1,54 @@
 #!/bin/bash
-
+trap 'kill $(jobs -p)' EXIT
+RACER_ENABLE_PFL=${RACER_ENABLE_PFL:-true}
+RACER_ENABLE_DOM=${RACER_ENABLE_DOM:-true}
+RACER_ENABLE_FLR=${RACER_ENABLE_FLR:-true}
+RACER_ENABLE_SEL=${RACER_ENABLE_SEL:-true}
 DIR=$1
 MAX=$2
-MAX_MB=256
+MAX_MB=${RACER_MAX_MB:-8}
+
+layout=(raid0 raid0)
+
+# check if it supports PFL layout
+$RACER_ENABLE_PFL && layout+=(pfl pfl pfl)
+
+# check if it supports DoM
+$RACER_ENABLE_DOM && layout+=(dom dom dom)
+
+# check if it supports FLR
+$RACER_ENABLE_FLR && layout+=(flr flr flr)
 
-# disable until LU-2523 and LU-2789 are fixed
-[ -z "$RACER_SETSTRIPE" ] && RACER_SETSTRIPE=false
-OSTCOUNT=${OSTCOUNT:-$(lfs df $DIR 2> /dev/null | grep -c OST)}
+# check if it supports PFL layout
+$RACER_ENABLE_SEL && layout+=(sel sel sel)
 
-while /bin/true ; do 
+echo "layout: ${layout[*]}"
+
+while /bin/true; do
        file=$((RANDOM % MAX))
-       SIZE=$((RANDOM * MAX_MB / 32))
-       echo "file_create: FILE=$DIR/$file SIZE=$SIZE"
-       [ $OSTCOUNT -gt 0 ] && $RACER_SETSTRIPE &&
-               lfs setstripe -c $((RANDOM % OSTCOUNT)) $DIR/$file 2> /dev/null
-       dd if=/dev/zero of=$DIR/$file bs=1k count=$SIZE 2> /dev/null
+       # $RANDOM is between 0 and 32767, and we want $blockcount in 64kB units
+       blockcount=$((RANDOM * MAX_MB / 32 / 64))
+       stripecount=$((RANDOM % (OSTCOUNT + 1)))
+
+       [ $stripecount -gt 0 ] && {
+               stripesize=$(((1 << (RANDOM % 5)) * 64))K
+               comp_end=$((${stripesize%K} * (RANDOM % 8 + 1)))K
+               pattern=${layout[$RANDOM % ${#layout[*]}]}
+
+               case $pattern in
+               dom) opt="setstripe -E $stripesize -L mdt -E eof -c $stripecount -S 1M" ;;
+               pfl) opt="setstripe -E $comp_end -S $stripesize -E eof -c $stripecount -S 2M" ;;
+               flr) opt="mirror create -N2 -E $comp_end -S $stripesize -E eof -c $stripecount -S 2M" ;;
+               sel) opt="setstripe -E 128M -S $stripesize -z 64M -E eof -c $stripecount -S 2M -z 128M" ;;
+               raid0) opt="setstripe -S $stripesize -c $stripecount" ;;
+               esac
+
+               $LFS $opt $DIR/$file 2> /dev/null || true
+       }
+
+       # offset between 0 and 16MB (256 64k chunks), with 1/2 at offset 0
+       seek=$((RANDOM / 64)); [ $seek -gt 256 ] && seek=0
+       dd if=/dev/zero of=$DIR/$file bs=64k count=$blockcount \
+               seek=$seek 2> /dev/null || true
 done