+test_56r() {
+ TDIR=$DIR/${tdir}r
+ setup_56 $NUMFILES $NUMDIRS
+
+ EXPECTED=12
+ CMD="$LFIND -size 0 -type f $TDIR"
+ NUMS=$($CMD | wc -l)
+ [ $NUMS -eq $EXPECTED ] ||
+ error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+ EXPECTED=0
+ CMD="$LFIND ! -size 0 -type f $TDIR"
+ NUMS=$($CMD | wc -l)
+ [ $NUMS -eq $EXPECTED ] ||
+ error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+ echo "test" > $TDIR/$tfile
+ echo "test2" > $TDIR/$tfile.2 && sync
+ EXPECTED=1
+ CMD="$LFIND -size 5 -type f $TDIR"
+ NUMS=$($CMD | wc -l)
+ [ $NUMS -eq $EXPECTED ] ||
+ error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+ EXPECTED=1
+ CMD="$LFIND -size +5 -type f $TDIR"
+ NUMS=$($CMD | wc -l)
+ [ $NUMS -eq $EXPECTED ] ||
+ error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+ EXPECTED=2
+ CMD="$LFIND -size +0 -type f $TDIR"
+ NUMS=$($CMD | wc -l)
+ [ $NUMS -eq $EXPECTED ] ||
+ error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+ EXPECTED=2
+ CMD="$LFIND ! -size -5 -type f $TDIR"
+ NUMS=$($CMD | wc -l)
+ [ $NUMS -eq $EXPECTED ] ||
+ error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+ EXPECTED=12
+ CMD="$LFIND -size -5 -type f $TDIR"
+ NUMS=$($CMD | wc -l)
+ [ $NUMS -eq $EXPECTED ] ||
+ error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+}
+run_test 56r "check lfs find -size works =========================="
+
+test_56s() { # LU-611
+ TDIR=$DIR/${tdir}s
+ setup_56 $NUMFILES $NUMDIRS "-c $OSTCOUNT"
+
+ if [ $OSTCOUNT -gt 1 ]; then
+ $SETSTRIPE -c 1 $TDIR/$tfile.{0,1,2,3}
+ ONESTRIPE=4
+ EXTRA=4
+ else
+ ONESTRIPE=$(((NUMDIRS + 1) * NUMFILES))
+ EXTRA=0
+ fi
+
+ EXPECTED=$(((NUMDIRS + 1) * NUMFILES))
+ CMD="$LFIND -stripe-count $OSTCOUNT -type f $TDIR"
+ NUMS=$($CMD | wc -l)
+ [ $NUMS -eq $EXPECTED ] ||
+ error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+
+ EXPECTED=$(((NUMDIRS + 1) * NUMFILES + EXTRA))
+ CMD="$LFIND -stripe-count +0 -type f $TDIR"
+ NUMS=$($CMD | wc -l)
+ [ $NUMS -eq $EXPECTED ] ||
+ error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+
+ EXPECTED=$ONESTRIPE
+ CMD="$LFIND -stripe-count 1 -type f $TDIR"
+ NUMS=$($CMD | wc -l)
+ [ $NUMS -eq $EXPECTED ] ||
+ error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+
+ CMD="$LFIND -stripe-count -2 -type f $TDIR"
+ NUMS=$($CMD | wc -l)
+ [ $NUMS -eq $EXPECTED ] ||
+ error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+
+ EXPECTED=0
+ CMD="$LFIND -stripe-count $((OSTCOUNT + 1)) -type f $TDIR"
+ NUMS=$($CMD | wc -l)
+ [ $NUMS -eq $EXPECTED ] ||
+ error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+}
+run_test 56s "check lfs find -stripe-count works"
+
+test_56t() { # LU-611
+ TDIR=$DIR/${tdir}t
+ setup_56 $NUMFILES $NUMDIRS "-s 512k"
+
+ $SETSTRIPE -S 256k $TDIR/$tfile.{0,1,2,3}
+
+ EXPECTED=$(((NUMDIRS + 1) * NUMFILES))
+ CMD="$LFIND -stripe-size 512k -type f $TDIR"
+ NUMS=$($CMD | wc -l)
+ [ $NUMS -eq $EXPECTED ] ||
+ error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+
+ CMD="$LFIND -stripe-size +320k -type f $TDIR"
+ NUMS=$($CMD | wc -l)
+ [ $NUMS -eq $EXPECTED ] ||
+ error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+
+ EXPECTED=$(((NUMDIRS + 1) * NUMFILES + 4))
+ CMD="$LFIND -stripe-size +200k -type f $TDIR"
+ NUMS=$($CMD | wc -l)
+ [ $NUMS -eq $EXPECTED ] ||
+ error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+
+ CMD="$LFIND -stripe-size -640k -type f $TDIR"
+ NUMS=$($CMD | wc -l)
+ [ $NUMS -eq $EXPECTED ] ||
+ error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+
+ EXPECTED=4
+ CMD="$LFIND -stripe-size 256k -type f $TDIR"
+ NUMS=$($CMD | wc -l)
+ [ $NUMS -eq $EXPECTED ] ||
+ error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+
+ CMD="$LFIND -stripe-size -320k -type f $TDIR"
+ NUMS=$($CMD | wc -l)
+ [ $NUMS -eq $EXPECTED ] ||
+ error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+
+ EXPECTED=0
+ CMD="$LFIND -stripe-size 1024k -type f $TDIR"
+ NUMS=$($CMD | wc -l)
+ [ $NUMS -eq $EXPECTED ] ||
+ error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+}
+run_test 56t "check lfs find -stripe-size works"
+
+test_56u() { # LU-611
+ TDIR=$DIR/${tdir}u
+ setup_56 $NUMFILES $NUMDIRS "-i 0"
+
+ if [ $OSTCOUNT -gt 1 ]; then
+ $SETSTRIPE -i 1 $TDIR/$tfile.{0,1,2,3}
+ ONESTRIPE=4
+ else
+ ONESTRIPE=0
+ fi
+
+ EXPECTED=$(((NUMDIRS + 1) * NUMFILES))
+ CMD="$LFIND -stripe-index 0 -type f $TDIR"
+ NUMS=$($CMD | wc -l)
+ [ $NUMS -eq $EXPECTED ] ||
+ error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+
+ EXPECTED=$ONESTRIPE
+ CMD="$LFIND -stripe-index 1 -type f $TDIR"
+ NUMS=$($CMD | wc -l)
+ [ $NUMS -eq $EXPECTED ] ||
+ error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+
+ CMD="$LFIND ! -stripe-index 0 -type f $TDIR"
+ NUMS=$($CMD | wc -l)
+ [ $NUMS -eq $EXPECTED ] ||
+ error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+
+ EXPECTED=0
+ # This should produce an error and not return any files
+ CMD="$LFIND -stripe-index $OSTCOUNT -type f $TDIR"
+ NUMS=$($CMD 2>/dev/null | wc -l)
+ [ $NUMS -eq $EXPECTED ] ||
+ error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+
+ EXPECTED=$(((NUMDIRS + 1) * NUMFILES + ONESTRIPE))
+ CMD="$LFIND -stripe-index 0,1 -type f $TDIR"
+ NUMS=$($CMD | wc -l)
+ [ $NUMS -eq $EXPECTED ] ||
+ error "\"$CMD\" wrong: found $NUMS, expected $EXPECTED"
+}
+run_test 56u "check lfs find -stripe-index works"
+
+test_56v() {
+ local MDT_IDX=0
+
+ TDIR=$DIR/${tdir}v
+ rm -rf $TDIR
+ setup_56 $NUMFILES $NUMDIRS
+
+ UUID=$(mdtuuid_from_index $MDT_IDX $TDIR)
+ [ -z "$UUID" ] && error "mdtuuid_from_index cannot find MDT index $MDT_IDX"
+
+ for file in $($LFIND -mdt $UUID $TDIR); do
+ file_mdt_idx=$($GETSTRIPE -M $file)
+ [ $file_mdt_idx -eq $MDT_IDX ] ||
+ error "'lfind -mdt $UUID' != 'getstripe -M' ($file_mdt_idx)"
+ done
+}
+run_test 56v "check 'lfs find -mdt match with lfs getstripe -M' ======="
+
+# Get and check the actual stripe count of one file.
+# Usage: check_stripe_count <file> <expected_stripe_count>
+check_stripe_count() {
+ local file=$1
+ local expected=$2
+ local actual
+
+ [[ -z "$file" || -z "$expected" ]] &&
+ error "check_stripe_count: invalid argument!"
+
+ local cmd="$GETSTRIPE -c $file"
+ actual=$($cmd) || error "$cmd failed"
+ actual=${actual%% *}
+
+ if [[ $actual -ne $expected ]]; then
+ [[ $expected -eq -1 ]] ||
+ error "$cmd wrong: found $actual, expected $expected"
+ [[ $actual -eq $OSTCOUNT ]] ||
+ error "$cmd wrong: found $actual, expected $OSTCOUNT"
+ fi
+}
+
+test_56w() {
+ TDIR=$DIR/${tdir}w
+
+ rm -rf $TDIR || error "remove $TDIR failed"
+ setup_56 $NUMFILES $NUMDIRS "-c $OSTCOUNT"
+
+ local stripe_size
+ stripe_size=$($GETSTRIPE -S -d $TDIR) ||
+ error "$GETSTRIPE -S -d $TDIR failed"
+ stripe_size=${stripe_size%% *}
+
+ local file_size=$((stripe_size * OSTCOUNT))
+ local file_num=$((NUMDIRS * NUMFILES + NUMFILES))
+ local required_space=$((file_num * file_size))
+ local free_space=$($LCTL get_param -n lov.$LOVNAME.kbytesavail)
+ [[ $free_space -le $((required_space / 1024)) ]] &&
+ skip_env "need at least $required_space bytes free space," \
+ "have $free_space kbytes" && return
+
+ local dd_bs=65536
+ local dd_count=$((file_size / dd_bs))
+
+ # write data into the files
+ local i
+ local j
+ local file
+ for i in $(seq 1 $NUMFILES); do
+ file=$TDIR/file$i
+ yes | dd bs=$dd_bs count=$dd_count of=$file >/dev/null 2>&1 ||
+ error "write data into $file failed"
+ done
+ for i in $(seq 1 $NUMDIRS); do
+ for j in $(seq 1 $NUMFILES); do
+ file=$TDIR/dir$i/file$j
+ yes | dd bs=$dd_bs count=$dd_count of=$file \
+ >/dev/null 2>&1 ||
+ error "write data into $file failed"
+ done
+ done
+
+ local expected=-1
+ [[ $OSTCOUNT -gt 1 ]] && expected=$((OSTCOUNT - 1))
+
+ # lfs_migrate file
+ local cmd="$LFS_MIGRATE -y -c $expected $TDIR/file1"
+ echo "$cmd"
+ eval $cmd || error "$cmd failed"
+
+ check_stripe_count $TDIR/file1 $expected
+
+ # lfs_migrate dir
+ cmd="$LFS_MIGRATE -y -c $expected $TDIR/dir1"
+ echo "$cmd"
+ eval $cmd || error "$cmd failed"
+
+ for j in $(seq 1 $NUMFILES); do
+ check_stripe_count $TDIR/dir1/file$j $expected
+ done
+
+ # lfs_migrate works with lfs find
+ cmd="$LFIND -stripe_count $OSTCOUNT -type f $TDIR |
+ $LFS_MIGRATE -y -c $expected"
+ echo "$cmd"
+ eval $cmd || error "$cmd failed"
+
+ for i in $(seq 2 $NUMFILES); do
+ check_stripe_count $TDIR/file$i $expected
+ done
+ for i in $(seq 2 $NUMDIRS); do
+ for j in $(seq 1 $NUMFILES); do
+ check_stripe_count $TDIR/dir$i/file$j $expected
+ done
+ done
+}
+run_test 56w "check lfs_migrate -c stripe_count works"
+