[Ocfs2-test-devel] [PATCH 1/1] Ocfs2-test: Update multiple_run.sh to enhance/add testcases for multi-nodes testing.

Tristan Ye tristan.ye at oracle.com
Tue Jul 6 01:58:08 PDT 2010


This patch should be in the same series of former patch "Add rest of single-node
testcases into single_run-WIP.sh", the main goal is to make updates to feed the
requirements for current mainline regression testing.

One major change is deprecating old testcases to use a new template which is workable
for most of testcases, another change is adding missing testcases, last change is making
logging more readable.

Patch was fully tested under mainline-2.6.35-rc1 ocfs2.

Signed-off-by: Tristan Ye <tristan.ye at oracle.com>
---
 programs/python_common/multiple_run.sh |  618 ++++++++++++++++----------------
 1 files changed, 316 insertions(+), 302 deletions(-)

diff --git a/programs/python_common/multiple_run.sh b/programs/python_common/multiple_run.sh
index 7b1ac1e..ee68f67 100755
--- a/programs/python_common/multiple_run.sh
+++ b/programs/python_common/multiple_run.sh
@@ -16,6 +16,10 @@
 ################################################################################
 # Global Variables
 ################################################################################
+if [ -f `dirname ${0}`/o2tf.sh ]; then
+	. `dirname ${0}`/o2tf.sh
+fi
+
 PATH=$PATH:/sbin      # Add /sbin to the path for ocfs2 tools
 export PATH=$PATH:.
 
@@ -29,418 +33,416 @@ AWK=`which awk`
 ECHO="`which echo` -e"
 
 SUDO="`which sudo` -u root"
-DEBUGFS_BIN="`which sudo` -u root `which debugfs.ocfs2`"
-TUNEFS_BIN="`which sudo` -u root `which tunefs.ocfs2`"
-MKFS_BIN="`which sudo` -u root `which mkfs.ocfs2`"
+IFCONFIG_BIN="`which ifconfig`"
 
 REMOTE_MOUNT_BIN="${BINDIR}/remote_mount.py"
 REMOTE_UMOUNT_BIN="${BINDIR}/remote_umount.py"
 
 NODE_LIST=
-DEVICE_NAME=
+DEVICE=
 MOUNT_POINT=
+KERNELSRC=
+
+ACCESS_METHOD="ssh"
+ACCESS_METHOD_ARG=
+INTERFACE=
+INTERFACE_ARG=
+SLOTS=4
+
+DEFAULT_LOG_DIR=${O2TDIR}/log
+LOG_DIR=
+LOGFILE=
+RUN_LOGFILE=
+
+CLUSTERSIZE=
+BLOCKSIZE=
+SLOTS=
+LABELNAME=
+FEATURES=
+JOURNALSIZE=0
+BLOCKS=0
+MOUNT_OPTS=
+
+set -o pipefail
 
 ################################################################################
 # Utility Functions
 ################################################################################
 f_usage()
 {
-    echo "usage: `basename ${0}` <-n nodes> <-d device> <mountpoint path>"
+    echo "usage: `basename ${0}` <-k kerneltarball> <-n nodes> [-i nic] \
+[-a access_method] [-o logdir] <-d device> <mountpoint path>"
+    echo "       -k kerneltarball should be path of tarball for kernel src."
     echo "       -n nodelist,should be comma separated."
+    echo "       -o output directory for the logs"
+    echo "       -i network interface name to be used for MPI messaging."
+    echo "       -a access method for mpi execution,should be ssh or rsh"
     echo "       -d device name used for ocfs2 volume."
     echo "       <mountpoint path> path of mountpoint where test will be performed."
     echo 
     echo "Eaxamples:"
-    echo "	 `basename ${0}` -n node1.us.oracle.com,node2.us.oracle.com -d /dev/sdd1 /storage"
+    echo "	 `basename ${0}` -k /kernel/linux-2.6.tgz -n \
+node1.us.oracle.com,node2.us.oracle.com -d /dev/sdd1 /storage"
     exit 1;
 
 }
 
 f_getoptions()
 {
-         if [ $# -eq 0 ]; then
-                f_usage;
-                exit 1
-         fi
-
-         while getopts "n:d:h:" options; do
-                case $options in
-                n ) NODE_LIST="$OPTARG";;
-                d ) DEVICE_NAME="$OPTARG";;
-                h ) f_usage
-                    exit 1;;
+	if [ $# -eq 0 ]; then
+		f_usage;
+		exit 1
+	fi
+
+	while getopts "n:d:i:a:o:k:h:" options; do
+		case $options in
+		n ) NODE_LIST="$OPTARG";;
+		d ) DEVICE="$OPTARG";;
+		i ) INTERFACE="$OPTARG";;
+		a ) ACCESS_METHOD="$OPTARG";;
+		o ) LOG_DIR="$OPTARG";;
+		k ) KERNELSRC="$OPTARG";;
+		h ) f_usage
+		    exit 1;;
                 * ) f_usage
-                   exit 1;;
-                esac
-        done
-        shift $(($OPTIND -1))
-        MOUNT_POINT=${1}
+		    exit 1;;
+		esac
+	done
+	shift $(($OPTIND -1))
+	MOUNT_POINT=${1}
 }
 
 f_setup()
 {
+	if [ "${UID}" = "0" ];then
+		echo "Should not run tests as root"
+		exit 1
+	fi
+
 	f_getoptions $*
 
 	if [ -z "${MOUNT_POINT}" ];then
                 f_usage
         fi
 
+	if [ -z ${KERNELSRC} ]; then
+		echo "No kernel source"
+		f_usage
+	fi
+
+	if [ ! -f ${KERNELSRC} ]; then
+        	${ECHO} "Not a kernel source"
+		f_usage
+	fi
+
+	if [ ! -d ${MOUNT_POINT} ]; then
+        	${ECHO} "Mount point ${MOUNT_POINT} does not exist"
+		exit 1
+	fi
+
+	if [ -n "${ACCESS_METHOD}" ];then
+		if [ "$ACCESS_METHOD" != "rsh" -a "$ACCESS_METHOD" != "ssh" ];then
+			echo "access method should be 'rsh' or 'ssh'"
+			f_usage
+		fi
+	fi
+
+	ACCESS_METHOD_ARG=" -a ${ACCESS_METHOD} "
+
 	rpm -q --quiet openmpi ||{
 		which mpirun &>/dev/null
 		RET=$?
 		if [ "$RET" != "0" ];then
-			${ECHO} "Need to install openmpi first"|tee -a ${LOGFILE}
+			${ECHO} "Need to install openmpi first"
 			exit 1
 		fi
 	}
 
-	. ./config.sh
-
 	LOGFILE=${O2TDIR}/log/multiple_run_${DATE}.log
 
-	if [ ! -d ${MOUNT_POINT} ]; then
-        	${ECHO} "Mount point ${MOUNT_POINT} does not exist" \
-                	|tee -a ${LOGFILE};
-		exit 1
+	if [ -z "$NODE_LIST" ];then
+		f_usage
+	else
+		echo $NODE_LIST|sed -e 's/,/\n/g' >/tmp/$$
+		SLOTS=`cat /tmp/$$ |wc -l`
+		rm -f /tmp/$$
 	fi
 
-	${DF} -h|${GREP} -q ${DEVICE_NAME}
+	${DF} -h|${GREP} -q ${DEVICE}
         if [ "$?" == "0" ];then
                 ${ECHO} "Partition has been mounted,should umount first to perform test" \
                         |tee -a ${LOGFILE};
 		exit 1
         fi
+
+	if [ ! -z "${INTERFACE}" ]; then
+		${IFCONFIG_BIN} ${INTERFACE} >/dev/null 2>&1 || {
+			echo "Invalid NIC";
+			f_usage;
+		}
+
+		INTERFACE_ARG=" -i ${INTERFACE} "
+	fi
+
+        LOG_DIR=${LOG_DIR:-$DEFAULT_LOG_DIR}
+        ${MKDIR_BIN} -p ${LOG_DIR} || exit 1
+
+        LOGFILE="`dirname ${LOG_DIR}`/`basename ${LOG_DIR}`/multiple-\
+`uname -m`-`date +%F-%H-%M-%S`.log"
+
+        RUN_LOGFILE="`dirname ${LOG_DIR}`/`basename ${LOG_DIR}`/multiple-run-\
+`uname -m`-`date +%F-%H-%M-%S`.log"
 }
 
 LogRC()
 {
 	if [ ${1} -ne 0 ]; then
-        	${ECHO} "Failed." >> ${LOGFILE}
+        	${ECHO} "Failed." | ${TEE_BIN} -a ${RUN_LOGFILE}
 	else
-        	${ECHO} "Passed." >> ${LOGFILE}
+        	${ECHO} "Passed." | ${TEE_BIN} -a ${RUN_LOGFILE}
 	fi
 	END=$(date +%s)
 	DIFF=$(( ${END} - ${START} ))
 	${ECHO} "Runtime ${DIFF} seconds.\n" >> ${LOGFILE}
+	${ECHO} "Runtime ${DIFF} seconds.\n" | ${TEE_BIN} -a ${RUN_LOGFILE}
 }
 
-LogMsg()
+LogRunMsg()
 {
-	${ECHO} `date` >> ${LOGFILE}
-	${ECHO} "${1}\c" >> ${LOGFILE}
+	${ECHO} "`date`" >> ${LOGFILE}
+	${ECHO} "`date`" | ${TEE_BIN} -a ${RUN_LOGFILE}
+	${ECHO} ${1} >> ${LOGFILE}
+	${ECHO} "${1}\c" | ${TEE_BIN} -a ${RUN_LOGFILE}
 	i=${#1}
 	while (( i < 60 )) ;do
-	        ${ECHO} ".\c" >> ${LOGFILE}
-        	(( ++i ))
+		${ECHO} ".\c" | ${TEE_BIN} -a ${RUN_LOGFILE}
+		(( ++i ))
 	done
 }
 
-IsDeviceMounted()
+LogMsg()
 {
-	local OCFS2_DEVICE=${1}
-	${DF} -h | ${GREP} -q ${OCFS2_DEVICE}
-	
-	if [ "$?" == "0" ]; then
-		return 0
-	else
-		return 1
-	fi
+	${ECHO} "$(date +%Y/%m/%d,%H:%M:%S)  $@" >> ${LOGFILE}
 }
 
-run_xattr_test()
+#
+# Common template to run the majority of all testcases:
+# Arguments are described as follows:
+# $1	Name for testcase
+# $2	FS features
+# $3	Testing CMD
+# Example:
+#	run_common_testcase "open_delete" "sparse,unwritten,inline-data" \
+#	"open_delete.py -f /storage/open_delete_test -i 10000 -l /tmp/logfile \
+#	-n node1.us.oracle.com,node2.us.oracle.com"
+run_common_testcase()
 {
-	LogMsg "xattr-test"
-	${BINDIR}/xattr-multi-run.sh -r 8 -f ${NODE_LIST} -a rsh -o ${O2TDIR}/log/xattr-tests-log -d ${DEVICE_NAME} ${MOUNT_POINT}
+	local testname=$1
+	local features=$2
+	shift 2
+	local cmd=$@
+
+	LogRunMsg "${testname}"
+
+	local logdir=${LOG_DIR}/${testname}
+        local logfile=${logdir}/${testname}_${DATE}.log
+	local workplace=${MOUNT_POINT}/${testname}_test
+
+	${MKDIR_BIN} -p ${logdir}
+	${CHMOD_BIN} -R 777 ${logdir}
+        ${CHOWN_BIN} -R ${USERNAME}:${GROUPNAME} ${logdir}
+	${TOUCH_BIN} ${logfile}
+
+        LABELNAME="multi-${testname}-test"
+	FEATURES="${features}"
+
+	LogMsg "Mkfs device ${DEVICE}:"
+	f_mkfs ${LOGFILE} ${BLOCKSIZE} ${CLUSTERSIZE} ${LABELNAME} ${SLOTS} \
+${DEVICE} ${FEATURES} ${JOURNALSIZE} ${BLOCKS}
+        RET=$?
+        f_exit_or_not ${RET}
+
+	LogMsg "Mount volume from all nodes"
+	f_remote_mount ${LOGFILE} ${LABELNAME} ${MOUNT_POINT} ${NODE_LIST} ${MOUNT_OPTS}
+	RET=$?
+	f_exit_or_not ${RET}
+
+	${CHMOD_BIN} -R 777 ${MOUNT_POINT}
+	${CHOWN_BIN} -R ${USERNAME}:${GROUPNAME} ${MOUNT_POINT}
+	${MKDIR_BIN} -p ${workplace}
+
+	LogMsg "Run ${testname}, CMD: $cmd"
+	${cmd} >> ${LOGFILE} 2>&1
 	LogRC $?
-}
 
-run_inline_test()
-{
-	LogMsg "inline-test"
-	${BINDIR}/multi-inline-run.sh -r 4 -f ${NODE_LIST} -a rsh -o ${O2TDIR}/log/inline-tests-log -d ${DEVICE_NAME} ${MOUNT_POINT}
-	LogRC $?
-	
+	LogMsg "Umount volume from all nodes."
+	f_remote_umount ${LOGFILE} ${MOUNT_POINT} ${NODE_LIST}
+	RET=$?
+	f_exit_or_not ${RET}
 }
 
-run_write_append_truncate_test()
+run_open_delete_test()
 {
-	LogMsg "write-append-truncate-test"
+	local workplace=${MOUNT_POINT}/open_delete_test
+	local testfile=${workplace}/open_delete_test_file
+	local logdir=${LOG_DIR}/open_delete
+	local logfile=${logdir}/open_delete_${DATE}.log
 
-	local logdir=${O2TDIR}/log/write_append_truncate_log
-	local logfile=${logdir}/write_append_truncate_${DATE}.log
-
-	local testfile=${MOUNT_POINT}/write_append_truncate_test_file
-
-	#${SUDO} mkdir -p ${logdir}
-	
-	mkdir -p ${logdir}
-	chmod 777 ${logdir}
-	touch ${logfile}
-	chmod 777 ${logfile}
-
-	#force to umount volume from all nodes
-	${ECHO} "Try to umount volume from all nodes before test."|tee -a ${logfile}
-	${REMOTE_UMOUNT_BIN} -m ${MOUNT_POINT} -n ${NODE_LIST}>>${logfile} 2>&1
-	
-	CLUSTERSIZE=32k
-	BLOCKSIZE=4k
-	SLOTS=4
-	LABEL=ocfs2test
-
-	${ECHO} "Format volume to launch new test"|tee -a ${logfile}
-	echo y|${MKFS_BIN} -C ${CLUSTERSIZE} -b ${BLOCKSIZE} -N ${SLOTS} -L ${LABEL} ${DEVICE_NAME} || {
-		${ECHO} "Can not format ${DEVICE_NAME}"
-		return 1
-	}
+	run_common_testcase "open_delete" "sparse,unwritten,inline-data" \
+"${BINDIR}/open_delete.py -f ${testfile} -i 10000 -l ${logfile} -n ${NODE_LIST}"
 
-	${ECHO} "Mount volume to all nodes"|tee -a ${logfile}
-	${REMOTE_MOUNT_BIN} -l ${LABEL} -m ${MOUNT_POINT} -n ${NODE_LIST}>>${logfile} 2>&1
+}
 
-	${SUDO} chown -R ${USERNAME}:${GROUPNAME} ${MOUNT_POINT}
-	${SUDO} chmod -R 777  ${MOUNT_POINT}
+run_cross_delete_test()
+{
+	local logdir=${LOG_DIR}/cross_delete
+	local logfile=${logdir}/cross_delete_${DATE}.log
+	local workplace=${MOUNT_POINT}/cross_delete_test
 
-	${BINDIR}/run_write_append_truncate.py -i 20000 -l ${logfile} -n ${NODE_LIST} -f ${testfile}
+	run_common_testcase "cross_delete" "sparse,unwritten,inline-data" \
+"${BINDIR}/cross_delete.py -c 1 -d ${workplace} -n ${NODE_LIST} -t ${KERNELSRC}"
+}
 
-	LogRC $?
+run_write_append_truncate_test()
+{
+	local logdir=${LOG_DIR}/write_append_truncate
+	local logfile=${logdir}/write_append_truncate_${DATE}.log
+	local workplace=${MOUNT_POINT}/write_append_truncate_test
+	local testfile=${workplace}/write_append_truncate_test_file
 
-	${ECHO} "Umount volume from all nodes after test."|tee -a ${logfile}
-        ${REMOTE_UMOUNT_BIN} -m ${MOUNT_POINT} -n ${NODE_LIST}>>${logfile} 2>&1
+	run_common_testcase "write_append_truncate" "sparse,unwritten,inline-data" \
+"${BINDIR}/run_write_append_truncate.py -i 20000 -l ${logfile} -n ${NODE_LIST} -f ${testfile}"
 }
 
 run_multi_mmap_test()
 {
-	LogMsg "multi-mmap-test"
-	
-	local logdir=${O2TDIR}/log/multi_mmap_log
-        local logfile=${logdir}/multi_mmap_test_${DATE}.log
-
-        local testfile=${MOUNT_POINT}/multi_mmap_test_file
-
-        #${SUDO} mkdir -p ${logdir}
-	
-	mkdir -p ${logdir}
-        chmod 777 ${logdir}
-        touch ${logfile}
-        chmod 777 ${logfile}
-
-        #force to umount volume from all nodes
-        ${ECHO} "Try to umount volume from all nodes before test."|tee -a ${logfile}
-        ${REMOTE_UMOUNT_BIN} -m ${MOUNT_POINT} -n ${NODE_LIST}>>${logfile} 2>&1
+	local logdir=${LOG_DIR}/multi_mmap
+	local logfile=${logdir}/multi_mmap_${DATE}.log
+	local workplace=${MOUNT_POINT}/multi_mmap_test
+	local testfile=${workplace}/multi_mmap_test_file
 
-        CLUSTERSIZE=32k
-        BLOCKSIZE=4k
-        SLOTS=4
-        LABEL=ocfs2test
-
-        ${ECHO} "Format volume to launch new test"|tee -a ${logfile}
-        echo y|${MKFS_BIN} -C ${CLUSTERSIZE} -b ${BLOCKSIZE} -N ${SLOTS} -L ${LABEL} ${DEVICE_NAME} || {
-                ${ECHO} "Can not format ${DEVICE_NAME}"
-                return 1
-        }
+	run_common_testcase "multi_mmap" "sparse,unwritten,inline-data" \
+"${BINDIR}/run_multi_mmap.py -i 20000 -n ${NODE_LIST} -c -b 6000 --hole -f ${testfile}"
+}
 
-        ${ECHO} "Mount volume to all nodes"|tee -a ${logfile}
-        ${REMOTE_MOUNT_BIN} -l ${LABEL} -m ${MOUNT_POINT} -n ${NODE_LIST}>>${logfile} 2>&1
+run_create_racer_test()
+{
+	local logdir=${LOG_DIR}/create_racer
+	local logfile=${logdir}/create_racer_${DATE}.log
+	local workplace=${MOUNT_POINT}/create_racer_test
 
-	${SUDO} chown -R ${USERNAME}:${GROUPNAME} ${MOUNT_POINT} 
-	${SUDO} chmod -R 777  ${MOUNT_POINT}
+	run_common_testcase "create_racer" "sparse,unwritten,inline-data" \
+"${BINDIR}/run_create_racer.py -i 40000 -l ${logfile} -n ${NODE_LIST} -p ${workplace}"
+}
 
-        ${BINDIR}/run_multi_mmap.py -i 20000 -n ${NODE_LIST} -c -b 6000 --hole -f ${testfile} | tee -a ${logfile}
+run_xattr_test()
+{
+	local logdir=${LOG_DIR}/multi-xattr-test
 
+	LogRunMsg "xattr-test"
+	${BINDIR}/xattr-multi-run.sh -r 4 -f ${NODE_LIST} -a rsh -o ${logdir} \
+-d ${DEVICE} ${MOUNT_POINT} >> ${LOGFILE} 2>&1
 	LogRC $?
-
-	${ECHO} "Umount volume from all nodes after test."|tee -a ${logfile}
-        ${REMOTE_UMOUNT_BIN} -m ${MOUNT_POINT} -n ${NODE_LIST}>>${logfile} 2>&1
 }
 
-run_lvb_torture_test()
+run_inline_test()
 {
-	LogMsg "lvb_torture_test"
-
-	local logdir=${O2TDIR}/log/lvb_torture_log
-        local logfile=${logdir}/lvb_torture_test_${DATE}.log
-
-	#${SUDO} mkdir -p ${logdir}
-
-	mkdir -p ${logdir}
-        chmod 777 ${logdir}
-        touch ${logfile}
-        chmod 777 ${logfile}
-
-	#force to umount volume from all nodes
-	${ECHO} "Try to umount volume from all nodes before test."|tee -a ${logfile}
-	${REMOTE_UMOUNT_BIN} -m ${MOUNT_POINT} -n ${NODE_LIST}>>${logfile} 2>&1
-
-	CLUSTERSIZE=32k
-	BLOCKSIZE=4k
-	SLOTS=4
-	LABEL=ocfs2test
-
-	${ECHO} "Format volume to launch new test"|tee -a ${logfile}
-	echo y|${MKFS_BIN} -C ${CLUSTERSIZE} -b ${BLOCKSIZE} -N ${SLOTS} -L ${LABEL} ${DEVICE_NAME} || {
-		${ECHO} "Can not format ${DEVICE_NAME}"
-		return 1
-	}
-
-	${ECHO} "Mount volume to all nodes"|tee -a ${logfile}
-	${REMOTE_MOUNT_BIN} -l ${LABEL} -m ${MOUNT_POINT} -n ${NODE_LIST}>>${logfile} 2>&1
-
-	${SUDO} chown -R ${USERNAME}:${GROUPNAME} ${MOUNT_POINT}
-	${SUDO} chmod -R 777  ${MOUNT_POINT}
-
-	#dd 2G file for testing.
-	${ECHO} "dd 2G testfile under mount point."|tee -a ${logfile}
-	${DD} if=/dev/zero of=${MOUNT_POINT}/testfile bs=1024 count=2097152
-	local UUID="`${DEBUGFS_BIN} -R stats ${DEVICE_NAME} |grep UUID|cut -d: -f 2`"
-	local LOCK="`${DEBUGFS_BIN} -R 'encode testfile' ${DEVICE_NAME}`"
-
-	${BINDIR}/run_lvb_torture.py -d /dlm/ -i 60000 -H ${DEVICE_NAME} -l ${logfile} -n ${NODE_LIST} "${UUID}" "${LOCK}"
+	local logdir=${LOG_DIR}/multi-inline-test
 
+	LogRunMsg "inline-test"
+	${BINDIR}/multi-inline-run.sh -r 4 -f ${NODE_LIST} -a rsh -o ${logdir} \
+-d ${DEVICE} ${MOUNT_POINT} >> ${LOGFILE} 2>&1
 	LogRC $?
-
-	${ECHO} "Umount volume from all nodes after test."|tee -a ${logfile}
-	${REMOTE_UMOUNT_BIN} -m ${MOUNT_POINT} -n ${NODE_LIST}>>${logfile} 2>&1
+	
 }
 
-run_create_racer_test()
+run_reflink_test()
 {
-	LogMsg "create-racer-test"
-
-	local logdir=${O2TDIR}/log/create_racer_log
-        local logfile=${logdir}/create_racer_test_${DATE}.log
-
-        local testpath=${MOUNT_POINT}
-
-        #${SUDO} mkdir -p ${logdir}
-	mkdir -p ${logdir}
-	chmod 777 ${logdir}
-	touch ${logfile}
-	chmod 777 ${logfile}
-
-        #force to umount volume from all nodes
-        ${ECHO} "Try to umount volume from all nodes before test."|tee -a ${logfile}
-        ${REMOTE_UMOUNT_BIN} -m ${MOUNT_POINT} -n ${NODE_LIST}>>${logfile} 2>&1
-
-        CLUSTERSIZE=32k
-        BLOCKSIZE=4k
-        SLOTS=4
-        LABEL=ocfs2test
-
-        ${ECHO} "Format volume to launch new test"|tee -a ${logfile}
-        echo y|${MKFS_BIN} -C ${CLUSTERSIZE} -b ${BLOCKSIZE} -N ${SLOTS} -L ${LABEL} ${DEVICE_NAME} || {
-                ${ECHO} "Can not format ${DEVICE_NAME}"
-                return 1
-        }
-
-        ${ECHO} "Mount volume to all nodes"|tee -a ${logfile}
-        ${REMOTE_MOUNT_BIN} -l ${LABEL} -m ${MOUNT_POINT} -n ${NODE_LIST}>>${logfile} 2>&1
-
-	${SUDO} chown -R ${USERNAME}:${GROUPNAME} ${MOUNT_POINT} 
-	${SUDO} chmod -R 777  ${MOUNT_POINT}
-
-        ${BINDIR}/run_create_racer.py -i 40000 -l ${logfile} -n ${NODE_LIST} -p ${testpath}
-
+	local logdir=${LOG_DIR}/multi-reflink-test
+
+	LogRunMsg "reflink-test"
+	LogMsg "reflink 'data=ordered' mode test"
+	${BINDIR}/multi-inline-run.sh -r 4 -f ${NODE_LIST} -a rsh -o ${logdir} \
+-d ${DEVICE} ${MOUNT_POINT} >> ${LOGFILE} 2>&1
+	${BINDIR}/multi_reflink_test_run.sh -r 4 -f ${NODE_LIST} -a rsh -o \
+${logdir} -d ${DEVICE} ${MOUNT_POINT} >> ${LOGFILE} 2>&1 || {
+	RET=$?
+	LogRC $RET
+	return $RET
+}
+	LogMsg "reflink 'data=writeback' mode test"
+	${BINDIR}/multi_reflink_test_run.sh -r 4 -f ${NODE_LIST} -a rsh -o \
+${logdir} -W -d ${DEVICE} ${MOUNT_POINT} >> ${LOGFILE} 2>&1
 	LogRC $?
-
-	${ECHO} "Umount volume from all nodes after test."|tee -a ${logfile}
-        ${REMOTE_UMOUNT_BIN} -m ${MOUNT_POINT} -n ${NODE_LIST}>>${logfile} 2>&1
+	
 }
 
-run_flock_tests()
+run_lvb_torture_test()
 {
-	LogMsg "flock-tests"
-
-	local logdir=${O2TDIR}/log/flock_log
-        local flock_logfile=${logdir}/flock_test_${DATE}.log
-        local fcntl_logfile=${logdir}/fcntl_test_${DATE}.log
-
-        local testfile1=${MOUNT_POINT}/flock_test_file1
-	local testfile2=${MOUNT_POINT}/flock_test_file2
-
-        #${SUDO} mkdir -p ${logdir}
+	LogRunMsg "lvb_torture"
 
-	mkdir -p ${logdir}
-        chmod 777 ${logdir}
-        touch ${logfile}
-        chmod 777 ${logfile}
-        #force to umount volume from all nodes
-        ${ECHO} "Try to umount volume from all nodes before test."|tee -a ${flock_logfile}
-        ${REMOTE_UMOUNT_BIN} -m ${MOUNT_POINT} -n ${NODE_LIST}>>${flock_logfile} 2>&1
+	local logdir=${LOG_DIR}/lvb_torture
+        local logfile=${logdir}/lvb_torture_${DATE}.log
+        local workplace=${MOUNT_POINT}
+	local testfile=${workplace}/lvb_torture_test_file
 
-        CLUSTERSIZE=32k
-        BLOCKSIZE=4k
-        SLOTS=4
-        LABEL=ocfs2test
+	${MKDIR_BIN} -p ${logdir}
+	${CHMOD_BIN} -R 777 ${logdir}
+	${CHOWN_BIN} -R ${USERNAME}:${GROUPNAME} ${logdir}
+	${TOUCH_BIN} ${logfile}
 
-        ${ECHO} "Format volume to launch new test"|tee -a ${flock_logfile}
-        echo y|${MKFS_BIN} -C ${CLUSTERSIZE} -b ${BLOCKSIZE} -N ${SLOTS} -L ${LABEL} ${DEVICE_NAME} || {
-                ${ECHO} "Can not format ${DEVICE_NAME}"
-                return 1
-        }
+	LABELNAME="multi-lvb-torture-test"
+	FEATURES="sparse,unwritten,inline-data"
 
-        ${ECHO} "Mount volume to all nodes"|tee -a ${flock_logfile}
-        ${REMOTE_MOUNT_BIN} -l ${LABEL} -m ${MOUNT_POINT} -n ${NODE_LIST}>>${flock_logfile} 2>&1
+	LogMsg "Mkfs device ${DEVICE}:"
+	f_mkfs ${LOGFILE} ${BLOCKSIZE} ${CLUSTERSIZE} ${LABELNAME} ${SLOTS} \
+${DEVICE} ${FEATURES} ${JOURNALSIZE} ${BLOCKS}
+        RET=$?
+        f_exit_or_not ${RET}
 
-	${SUDO} chown -R ${USERNAME}:${GROUPNAME} ${MOUNT_POINT} 
-	${SUDO} chmod -R 777  ${MOUNT_POINT}
+	LogMsg "Mount volume from all nodes"
+	f_remote_mount ${LOGFILE} ${LABELNAME} ${MOUNT_POINT} ${NODE_LIST} ${MOUNT_OPTS}
+	RET=$?
+	f_exit_or_not ${RET}
 
-	touch ${testfile1}
-	touch ${testfile2}
-
-        ${BINDIR}/run_flock_unit_test.py -l ${fcntl_logfile} -n ${NODE_LIST} -t fcntl -e ${testfile1} -f ${testfile2} \
-	&& \
-	${BINDIR}/run_flock_unit_test.py -l ${flock_logfile} -n ${NODE_LIST} -t flock -e ${testfile1} -f ${testfile2}
+	${CHMOD_BIN} -R 777 ${MOUNT_POINT}
+	${CHOWN_BIN} -R ${USERNAME}:${GROUPNAME} ${MOUNT_POINT}
 
+	#dd 2G file for testing.
+	LogMsg "dd 2G testfile under mount point."
+	${DD} if=/dev/zero of=${testfile} bs=1024 count=2097152 &>> ${LOGFILE}
+	local UUID="`${DEBUGFS_BIN} -R stats ${DEVICE} |grep UUID|cut -d: -f 2`"
+	local LOCK="`${DEBUGFS_BIN} -R 'encode lvb_torture_test_file' ${DEVICE}`"
+
+	LogMsg "Run lvb_torture, CMD: ${BINDIR}/run_lvb_torture.py -d /dlm/ -i 60000 \
+-H ${DEVICE} -l ${logfile} -n ${NODE_LIST} "${UUID}" "${LOCK}""
+	${BINDIR}/run_lvb_torture.py -d /dlm/ -i 60000 -H ${DEVICE} -l \
+${logfile} -n ${NODE_LIST} "${UUID}" "${LOCK}" >> ${LOGFILE} 2>&1
 	LogRC $?
 
-	${ECHO} "Umount volume from all nodes after test."|tee -a ${logfile}
-        ${REMOTE_UMOUNT_BIN} -m ${MOUNT_POINT} -n ${NODE_LIST}>>${logfile} 2>&1
-
+	LogMsg "Umount volume from all nodes."
+	f_remote_umount ${LOGFILE} ${MOUNT_POINT} ${NODE_LIST}
+	RET=$?
+	f_exit_or_not ${RET}
 }
 
-run_open_delete_test()
+run_flock_unit_test()
 {
-	LogMsg "open-delete-test"
-
-	local logdir=${O2TDIR}/log/open_delete_log
-        local logfile=${logdir}/open_delete_test_${DATE}.log
-
-        local testfile=${MOUNT_POINT}/open_delete_test_file
-
-        #${SUDO} mkdir -p ${logdir}
-
-	mkdir -p ${logdir}
-        chmod 777 ${logdir}
-        touch ${logfile}
-        chmod 777 ${logfile}
+	local logdir=${LOG_DIR}/flock_unit
+	local logfile=${logdir}/flock_unit_${DATE}.log
 
-        #force to umount volume from all nodes
-        ${ECHO} "Try to umount volume from all nodes before test."|tee -a ${logfile}
-        ${REMOTE_UMOUNT_BIN} -m ${MOUNT_POINT} -n ${NODE_LIST}>>${logfile} 2>&1
+	local flock_logfile=${logdir}/flock_unit_test_${DATE}.log
+	local fcntl_logfile=${logdir}/fcntl_unit_test_${DATE}.log
 
+	local workplace=${MOUNT_POINT}/flock_unit_test
+	local testfile1=${workplace}/flock_unit_test_file1
+	local testfile2=${workplace}/flock_unit_test_file2
 
-        CLUSTERSIZE=32k
-        BLOCKSIZE=4k
-        SLOTS=4
-        LABEL=ocfs2test
-
-        ${ECHO} "Format volume to launch new test"|tee -a ${logfile}
-        echo y|${MKFS_BIN} -C ${CLUSTERSIZE} -b ${BLOCKSIZE} -N ${SLOTS} -L ${LABEL} ${DEVICE_NAME} || {
-                ${ECHO} "Can not format ${DEVICE_NAME}"
-                return 1
-        }
-
-        ${ECHO} "Mount volume to all nodes"|tee -a ${logfile}
-        ${REMOTE_MOUNT_BIN} -l ${LABEL} -m ${MOUNT_POINT} -n ${NODE_LIST}>>${logfile} 2>&1
-
-	${SUDO} chown -R ${USERNAME}:${GROUPNAME} ${MOUNT_POINT} 
-	${SUDO} chmod -R 777  ${MOUNT_POINT}
-
-        ${BINDIR}/open_delete.py -f ${testfile} -i 10000 -l ${logfile} -n ${NODE_LIST}
-
-	LogRC $?
-
-	${ECHO} "Umount volume from all nodes after test."|tee -a ${logfile}
-        ${REMOTE_UMOUNT_BIN} -m ${MOUNT_POINT} -n ${NODE_LIST}>>${logfile} 2>&1
+	run_common_testcase "flock_unit" "sparse,unwritten,inline-data" \
+"${TOUCH_BIN} ${testfile1} && ${TOUCH_BIN} ${testfile2} && ${BINDIR}/run_flock_unit_test.py \
+-l ${fcntl_logfile} -n ${NODE_LIST} -t fcntl -e ${testfile1} -f ${testfile2} \
+&& ${BINDIR}/run_flock_unit_test.py -l ${flock_logfile} -n ${NODE_LIST} -t \
+flock -e ${testfile1} -f ${testfile2}"
 }
 
 f_cleanup()
@@ -466,22 +468,34 @@ START=$(date +%s)
 run_inline_test
 
 START=$(date +%s)
-run_write_append_truncate_test
+run_reflink_test
 
-START=$(date +%s)
-run_multi_mmap_test
+for BLOCKSIZE in 512 1024 4096;do
+	for CLUSTERSIZE in 4096 32768 1048576;do
+		${ECHO} "Tests with \"-b ${BLOCKSIZE} -C ${CLUSTERSIZE}\"" | \
+${TEE_BIN} -a ${LOGFILE}
+		START=$(date +%s)
+		run_write_append_truncate_test
 
-START=$(date +%s)
-run_lvb_torture_test
+		START=$(date +%s)
+		run_multi_mmap_test
 
-START=$(date +%s)
-run_create_racer_test
+		START=$(date +%s)
+		run_create_racer_test
 
-START=$(date +%s)
-run_flock_tests
+		START=$(date +%s)
+		run_flock_unit_test
 
-START=$(date +%s)
-run_open_delete_test
+		START=$(date +%s)
+		run_cross_delete_test
+
+		START=$(date +%s)
+		run_open_delete_test
+
+		START=$(date +%s)
+		run_lvb_torture_test
+	done
+done
 
 END=$(date +%s)
 DIFF=$(( ${END} - ${STARTRUN} ));
-- 
1.5.5




More information about the Ocfs2-test-devel mailing list