<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=UTF-8" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffcc" text="#000066">
<tt>Tristan,<br>
<br>
Did you check the diff file I sent you? I have it attached again, it
does clear some errors when accessing logfiles and the check of the
mount point (It doesn't have to be RW to the user running the tests,
just have to exist).<br>
</tt>
<pre class="moz-signature" cols="72">Regards,

Marcos Eduardo Matsunaga

Oracle USA
Linux Engineering

“The statements and opinions expressed here are my own and do not
necessarily represent those of Oracle Corporation.”
</pre>
<br>
<br>
Marcos E. Matsunaga wrote:
<blockquote cite="mid:48EE21F8.5030302@oracle.com" type="cite">
  <meta content="text/html;charset=UTF-8" http-equiv="Content-Type">
  <tt>I'll take it back.. i needs 2 nodes.</tt><br>
  <pre class="moz-signature" cols="72">Regards,

Marcos Eduardo Matsunaga

Oracle USA
Linux Engineering

“The statements and opinions expressed here are my own and do not
necessarily represent those of Oracle Corporation.”
  </pre>
  <br>
  <br>
Marcos E. Matsunaga wrote:
  <blockquote cite="mid:48EE2126.10004@oracle.com" type="cite">
    <meta content="text/html;charset=UTF-8" http-equiv="Content-Type">
    <tt>One note here. I believe the flock is a unit test and not meant
to
run in cluster mode.</tt><br>
    <pre class="moz-signature" cols="72">Regards,

Marcos Eduardo Matsunaga

Oracle USA
Linux Engineering

“The statements and opinions expressed here are my own and do not
necessarily represent those of Oracle Corporation.”
  </pre>
    <br>
    <br>
Tristan Ye wrote:
    <blockquote
 cite="mid:1223539171-8929-2-git-send-email-tristan.ye@oracle.com"
 type="cite">
      <pre wrap="">Changes from v1 to v2:

1.Change volume label name as a meaningful one under marcos's suggestion.

2.Add lvb_torture testacase.

urrently,it includes following testcases,

         xattr_test
         inline_test
         write_append_truncate_test
         multi_mmap_test
         lvb_torture_test
         create_racer_test
         flock_tests
         open_delete_test

Need to run this wrapper script like this:

         multiple_run.sh -n node1.us.oracle.com,node2.us.oracle.com -d /dev/sdd1 /storage

All its logs and behaviors kept a unification as single_run.sh did. More testcases were expected
to be integrated as we're going to develop more multi-nodes cases for ocfs2-test.

Signed-off-by: Tristan Ye <a moz-do-not-send="true"
 class="moz-txt-link-rfc2396E" href="mailto:tristan.ye@oracle.com">&lt;tristan.ye@oracle.com&gt;</a>
---
 programs/python_common/multiple_run.sh |  411 ++++++++++++++++++++++++++++++++
 1 files changed, 411 insertions(+), 0 deletions(-)
 create mode 100755 programs/python_common/multiple_run.sh

diff --git a/programs/python_common/multiple_run.sh b/programs/python_common/multiple_run.sh
new file mode 100755
index 0000000..64c6c76
--- /dev/null
+++ b/programs/python_common/multiple_run.sh
@@ -0,0 +1,411 @@
+#!/bin/bash
+# vi: set ts=8 sw=8 autoindent noexpandtab :
+################################################################################
+#
+# File :        multiple_run.sh
+#
+# Description:  The wrapper script help to organize all multi-nodes testcase
+#                to perform a thorough test among multiple nodes.
+#       
+#
+# Author:       Tristan Ye,     <a moz-do-not-send="true"
 class="moz-txt-link-abbreviated" href="mailto:tristan.ye@oracle.com">tristan.ye@oracle.com</a>
+#
+# History:      22 Sep 2008
+#
+
+################################################################################
+# Global Variables
+################################################################################
+PATH=$PATH:/sbin      # Add /sbin to the path for ocfs2 tools
+export PATH=$PATH:.
+
+USERNAME=`/usr/bin/whoami`
+DATE=`/bin/date +%F-%H-%M`
+DF=`which df`
+GREP=`which grep`
+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`"
+
+REMOTE_MOUNT_BIN="`which sudo` -u root `which remote_mount.py`"
+REMOTE_UMOUNT_BIN="`which sudo` -u root `which remote_umount.py`"
+
+NODE_LIST=
+DEVICE_NAME=
+MOUNT_POINT=
+
+################################################################################
+# Utility Functions
+################################################################################
+f_usage()
+{
+    echo "usage: `basename ${0}` &lt;-n nodes&gt; &lt;-d device&gt; &lt;mountpoint path&gt;"
+    echo "       -n nodelist,should be comma separated."
+    echo "       -d device name used for ocfs2 volume."
+    echo "       &lt;mountpoint path&gt; 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"
+    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;;
+                * ) f_usage
+                   exit 1;;
+                esac
+        done
+        shift $(($OPTIND -1))
+        MOUNT_POINT=${1}
+
+}
+
+f_setup()
+{
+        f_getoptions $*
+
+        if [ -z "${MOUNT_POINT}" ];then
+                f_usage
+        fi
+
+        . ./config.sh
+
+        LOGFILE=${O2TDIR}/log/multiple_run_${DATE}.log
+
+        if [ ! -d ${MOUNT_POINT} -o ! -w ${MOUNT_POINT} ]; then
+                ${ECHO} "Mount point ${MOUNT_POINT} does not exist or is not writable" \
+                        |tee -a ${LOGFILE};
+                exit 1
+        fi
+
+        ${DF} -h|${GREP} -q ${DEVICE_NAME}
+        if [ "$?" == "0" ];then
+                ${ECHO} "Partition has been mounted,should umount first to perform test" \
+                        |tee -a ${LOGFILE};
+                exit 1
+        fi
+
+}
+
+LogRC()
+{
+if [ ${1} -ne 0 ]; then
+        ${ECHO} "Failed." &gt;&gt; ${LOGFILE};
+else
+        ${ECHO} "Passed." &gt;&gt; ${LOGFILE};
+fi;
+END=$(date +%s);
+DIFF=$(( ${END} - ${START} ));
+${ECHO} "Runtime ${DIFF} seconds.\n" &gt;&gt; ${LOGFILE};
+}
+
+LogMsg()
+{
+${ECHO} `date` &gt;&gt; ${LOGFILE};
+${ECHO} "${1}\c" &gt;&gt; ${LOGFILE};
+i=${#1};
+while (( i &lt; 60 ))
+do
+        ${ECHO} ".\c" &gt;&gt; ${LOGFILE};
+        (( ++i ));
+done;
+}
+
+IsDeviceMounted()
+{
+        local OCFS2_DEVICE=${1}
+        ${DF} -h | ${GREP} -q ${OCFS2_DEVICE}
+        
+        if [ "$?" == "0" ]; then
+                return 0
+        else
+                return 1
+        fi
+}
+
+run_xattr_test()
+{
+        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}
+        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 $?
+        
+}
+
+run_write_append_truncate_test()
+{
+        LogMsg "write-append-truncate-test"
+
+        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}
+        #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}&gt;&gt;${logfile} 2&gt;&amp;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}&gt;&gt;${logfile} 2&gt;&amp;1
+
+        ${BINDIR}/run_write_append_truncate.py -i 20000 -l ${logfile} -n ${NODE_LIST} -f ${testfile}
+
+        LogRC $?
+
+        ${ECHO} "Umount volume from all nodes after test."|tee -a ${logfile}
+        ${REMOTE_UMOUNT_BIN} -m ${MOUNT_POINT} -n ${NODE_LIST}&gt;&gt;${logfile} 2&gt;&amp;1
+}
+
+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}
+        #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}&gt;&gt;${logfile} 2&gt;&amp;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}&gt;&gt;${logfile} 2&gt;&amp;1
+
+        ${BINDIR}/run_multi_mmap.py -i 20000 -n ${NODE_LIST} -c -b 6000 --hole -f ${testfile} | tee -a ${logfile}
+
+        LogRC $?
+
+        ${ECHO} "Umount volume from all nodes after test."|tee -a ${logfile}
+        ${REMOTE_UMOUNT_BIN} -m ${MOUNT_POINT} -n ${NODE_LIST}&gt;&gt;${logfile} 2&gt;&amp;1
+}
+
+run_lvb_torture_test()
+{
+        LogMsg "lvb_torture_test"
+
+        local logdir=${O2TDIR}/log/lvb_torture_log
+        local logfile=${logdir}/lvb_torture_test_${DATE}.log
+
+
+        ${SUDO} mkdir -p ${logdir}
+        
+        ${BINDIR}/run_lvb_torture.py -d /dlm/ -i 10 -H ${DEVICE_NAME} -l ${logfile} -n ${NODE_LIST} ocfs2test_domain ocfs2test_lock
+
+        LogRC $?
+
+}
+
+run_create_racer_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}
+        #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}&gt;&gt;${logfile} 2&gt;&amp;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}&gt;&gt;${logfile} 2&gt;&amp;1
+
+        ${BINDIR}/run_create_racer.py -i 40000 -l ${logfile} -n ${NODE_LIST} -p ${testpath}
+
+        LogRC $?
+
+        ${ECHO} "Umount volume from all nodes after test."|tee -a ${logfile}
+        ${REMOTE_UMOUNT_BIN} -m ${MOUNT_POINT} -n ${NODE_LIST}&gt;&gt;${logfile} 2&gt;&amp;1
+}
+
+run_flock_tests()
+{
+        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} touch ${testfile1}
+        ${SUDO} touch ${testfile2}
+
+        ${SUDO} mkdir -p ${logdir}
+        #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}&gt;&gt;${flock_logfile} 2&gt;&amp;1
+
+
+        CLUSTERSIZE=32k
+        BLOCKSIZE=4k
+        SLOTS=4
+        LABEL=ocfs2test
+
+        ${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
+        }
+
+        ${ECHO} "Mount volume to all nodes"|tee -a ${flock_logfile}
+        ${REMOTE_MOUNT_BIN} -l ${LABEL} -m ${MOUNT_POINT} -n ${NODE_LIST}&gt;&gt;${flock_logfile} 2&gt;&amp;1
+
+        ${BINDIR}/run_flock_unit_test.py -l ${fcntl_logfile} -n ${NODE_LIST} -t fcntl -e ${testfile1} -f ${testfile2} \
+        &amp;&amp; \
+        ${BINDIR}/run_flock_unit_test.py -l ${flock_logfile} -n ${NODE_LIST} -t flock -e ${testfile1} -f ${testfile2}
+
+        LogRC $?
+
+        ${ECHO} "Umount volume from all nodes after test."|tee -a ${logfile}
+        ${REMOTE_UMOUNT_BIN} -m ${MOUNT_POINT} -n ${NODE_LIST}&gt;&gt;${logfile} 2&gt;&amp;1
+
+}
+
+run_open_delete_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}
+        #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}&gt;&gt;${logfile} 2&gt;&amp;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}&gt;&gt;${logfile} 2&gt;&amp;1
+
+        ${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}&gt;&gt;${logfile} 2&gt;&amp;1
+}
+
+f_cleanup()
+{
+        :
+}
+################################################################################
+# Main Entry
+################################################################################
+
+trap 'echo -ne "\n\n"&gt;&gt;${LOGFILE};echo  "Interrupted by Ctrl+C,Cleanuping... "|tee -a ${LOGFILE}; f_cleanup;exit 1' SIGINT
+trap ' : ' SIGTERM
+
+f_setup $*
+
+STARTRUN=$(date +%s)
+${ECHO} "`date` - Starting Multiple Nodes Regress test" &gt; ${LOGFILE}
+
+START=$(date +%s)
+run_xattr_test 
+
+START=$(date +%s)
+run_inline_test
+
+START=$(date +%s)
+run_write_append_truncate_test
+
+START=$(date +%s)
+run_multi_mmap_test
+
+START=$(date +%s)
+run_lvb_torture_test
+
+START=$(date +%s)
+run_create_racer_test
+
+START=$(date +%s)
+run_flock_tests
+
+START=$(date +%s)
+run_open_delete_test
+
+END=$(date +%s)
+DIFF=$(( ${END} - ${STARTRUN} ));
+${ECHO} "Total Runtime ${DIFF} seconds.\n" &gt;&gt; ${LOGFILE}
+${ECHO} "`date` - Ended Multiple Nodes Regress test" &gt;&gt; ${LOGFILE}
+
+
  </pre>
    </blockquote>
    <pre wrap=""><hr size="4" width="90%">
_______________________________________________
Ocfs2-tools-devel mailing list
<a moz-do-not-send="true" class="moz-txt-link-abbreviated"
 href="mailto:Ocfs2-tools-devel@oss.oracle.com">Ocfs2-tools-devel@oss.oracle.com</a>
<a moz-do-not-send="true" class="moz-txt-link-freetext"
 href="http://oss.oracle.com/mailman/listinfo/ocfs2-tools-devel">http://oss.oracle.com/mailman/listinfo/ocfs2-tools-devel</a></pre>
  </blockquote>
</blockquote>
</body>
</html>