f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# CDDL HEADER START
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# The contents of this file are subject to the terms of the
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# Common Development and Distribution License (the "License").
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# You may not use this file except in compliance with the License.
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# or http://www.opensolaris.org/os/licensing.
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# See the License for the specific language governing permissions
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# and limitations under the License.
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# When distributing Covered Code, include this CDDL HEADER in each
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# If applicable, add the following below this CDDL HEADER, with the
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# fields enclosed by brackets "[]" replaced with your own identifying
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# information: Portions Copyright [yyyy] [name of copyright owner]
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# CDDL HEADER END
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# Copyright 2009 Sun Microsystems, Inc. All rights reserved.
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# Use is subject to license terms.
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy# Copyright (c) 2013, 2016 by Delphix. All rights reserved.
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy. $STF_SUITE/tests/functional/mv_files/mv_files.cfg
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# Determine whether this version of the ksh being
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# executed has a bug where the limit of background
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# processes of 25.
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction check_bg_procs_limit_num
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedyecho "#!/usr/bin/ksh" > /var/tmp/exitsZero.ksh
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedyecho "exit 0" >> /var/tmp/exitsZero.ksh
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedychmod 777 /var/tmp/exitsZero.ksh
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedycat <<EOF > /var/tmp/testbackgprocs.ksh
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#!/usr/bin/ksh
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# exitsZero.ksh is a one line script
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# that exit with status of "0"
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren KennedyPIDS=""
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedytypeset -i i=1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedywhile [ \$i -le 50 ]
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedydo
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy /var/tmp/exitsZero.ksh &
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy PIDS="\$PIDS \$!"
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy (( i = i + 1 ))
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedydone
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy\sleep 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfor pid in \$PIDS
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedydo
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy \wait \$pid
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy (( \$? == 127 )) && exit 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedydone
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyexit 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren KennedyEOF
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedyksh /var/tmp/testbackgprocs.ksh
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyif [[ $? -eq 1 ]]; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# Current ksh being executed has a limit
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# of 25 background processes.
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyelse
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction init_setup
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset disklist=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy create_pool $TESTPOOL "$disklist"
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if ! is_global_zone ; then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy reexport_pool
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy rm -rf $TESTDIR || log_unresolved Could not remove $TESTDIR
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy mkdir -p $TESTDIR || log_unresolved Could not create $TESTDIR
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy rm -rf $TESTDIR_TGT || log_unresolved Could not remove $TESTDIR_TGT
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy mkdir -p $TESTDIR_TGT || log_unresolved Could not create $TESTDIR_TGT
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs create $TESTPOOL/$TESTFS
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs set mountpoint=$TESTDIR $TESTPOOL/$TESTFS
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs create $TESTPOOL/$TESTFS_TGT
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy log_must zfs set mountpoint=$TESTDIR_TGT $TESTPOOL/$TESTFS_TGT
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy mkdir -p $OLDDIR || log_unresolved Could not create $OLDDIR
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy mkdir -p $NEWDIR_IN_FS || log_unresolved Could not create $NEWDIR_IN_FS
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy mkdir -p $NEWDIR_ACROSS_FS || log_unresolved Could not create $NEWDIR_ACROSS_FS
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction wait_pid
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy for pid in $1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy do
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy ps -e | grep $pid >/dev/null 2>&1
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy (( $? == 0 )) && wait $pid
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy done
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# Generate given number files in a
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# directory of zfs file system
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# $1 - the directory holds the generated files
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# $2 - number of to-be-generated files
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction generate_files
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset -i count
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset -i proc_num=0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if (( $2 == $MVNUMFILES )); then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy count=1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy else
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy count=$MVNUMFILES+1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy while (( count <= $2 ))
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy do
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy cp /etc/passwd $1/file_$count \
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy > /dev/null 2>&1 &
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy PIDS="$PIDS $!"
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy proc_num=`echo $PIDS | wc -w`
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy if (( proc_num >= GANGPIDS )); then
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy wait_pid "$PIDS"
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy proc_num=0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy PIDS=""
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy fi
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy (( count = count + 1 ))
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy done
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# Move given number files from one directory to
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# another directory in parallel
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# $1 - source directory
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# $2 - target directory
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction mv_files
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy find $1 -type f -print | xargs -i \
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy mv {} $2 > /dev/null 2>&1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# Count the files number after moving, and
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# compare it with the original number
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# $1 - directory that to be operated
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# $2 - original files number
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction count_files
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset -i file_num
1d32ba663e202c24a5a1f2e5aef83fffb447cb7fJohn Wren Kennedy file_num=`find $1 -type f -print | \
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy wc -l`
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy (( file_num != $2 )) && \
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy log_fail "The file number of target directory"\
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy "$2 is not equal to that of the source "\
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy "directory $1"
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# Running the 'mv' test
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# $1 - old directory
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy# $2 - new directory
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy#
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedyfunction mv_test
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy{
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset old=$1
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset new=$2
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset -i inc_num=$(( MVNUMFILES + MVNUMINCR ))
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset -i num=0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy for num in $MVNUMFILES $inc_num
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy do
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy generate_files $old $num
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy mv_files $old $new
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy count_files $new $num
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy mv_files $new $old
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy count_files $old $num
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy done
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy typeset dir=$(get_device_dir $DISKS)
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy verify_filesys "$TESTPOOL" "$TESTPOOL/$TESTFS" "$dir"
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy return 0
f38cb554a534c6df738be3f4d23327e69888e634John Wren Kennedy}