diff --git a/scripts/run.loader.stress.bash b/scripts/run.loader.stress.bash new file mode 100755 index 00000000000..215d22da790 --- /dev/null +++ b/scripts/run.loader.stress.bash @@ -0,0 +1,164 @@ +#!/usr/bin/env bash + +function usage() { + echo "run the loader verify test" + echo "[--rows=$rows]" + echo "[--dictionaries=$dictionaries]" + echo "[--brtloader=$brtloader]" + echo "[--tokudb=$tokudb]" + echo "[--branch=$branch]" + echo "[--revision=$revision]" + echo "[--suffix=$suffix]" + echo "[--commit=$commit]" +} + +function retry() { + local cmd + local retries + local exitcode + cmd=$* + let retries=0 + while [ $retries -le 10 ] ; do + echo `date` $cmd + bash -c "$cmd" + exitcode=$? + echo `date` $cmd $exitcode $retries + let retries=retries+1 + if [ $exitcode -eq 0 ] ; then break; fi + sleep 10 + done + test $exitcode = 0 +} + +rows=100000000 +dictionaries=3 +brtloader=cilk +tokudb=tokudb +branch=. +revision=0 +suffix=. +commit=0 +svnserver=https://svn.tokutek.com/tokudb +basedir=~/svn.build +builddir=$basedir/mysql.build +system=`uname -s | tr [:upper:] [:lower:]` +arch=`uname -m | tr [:upper:] [:lower:]` +myhost=`hostname` +instancetype="" +ftcc=gcc +have_cilk=0 + +# parse the command line +while [ $# -gt 0 ] ; do + arg=$1; shift + if [[ $arg =~ --(.*)=(.*) ]] ; then + eval ${BASH_REMATCH[1]}=${BASH_REMATCH[2]} + else + usage; exit 1 + fi +done + +# require a revision +if [ $revision -eq 0 ] ; then + exit 1 +fi + +# setup the branchrevision string +if [ $branch = "." ] ; then + branchrevision=$revision +else + branchrevision=`basename $branch`-$revision +fi +if [ $suffix != "." ] ; then + branchrevision=$branchrevision-$suffix +fi + +ftccversion=$($ftcc --version|head -1|cut -f3 -d" ") + +# goto the base directory +if [ ! -d $basedir ] ; then mkdir $basedir; fi + +pushd $basedir + +# update the build directory +if [ ! -d $builddir ] ; then mkdir $builddir; fi + +date=`date +%Y%m%d` +testresultsdir=$builddir/$date +pushd $builddir + while [ ! -d $date ] ; do + svn mkdir $svnserver/mysql.build/$date -m "" + svn checkout $svnserver/mysql.build/$date + if [ $? -ne 0 ] ; then rm -rf $date; fi + done +popd + +testresult="PASS" +runfile=$testresultsdir/loader-stress-$rows-$dictionaries-$tokudb-$branchrevision-$ftcc-$ftccversion-$system-$arch-$myhost +if [ "$instancetype" != "" ] ; then runfilefile=$runfile-$instancetype; fi +rm -f $runfile + +# checkout the code +if [ -d loader-stress-$branchrevision ] ; then rm -rf loader-stress-$branchrevision; fi +mkdir loader-stress-$branchrevision + +if [ $branch = "." ] ; then branch=toku; fi + +retry svn export -r $revision -q $svnserver/$branch/$tokudb loader-stress-$branchrevision/$tokudb +exitcode=$? +if [ $exitcode != 0 ] ; then + testresult="FAIL" +fi + +# build +if [ $ftcc = icc ] ; then + d=/opt/intel/bin + if [ -d $d ] ; then + export PATH=$d:$PATH + . $d/compilervars.sh intel64 + fi + d=/opt/intel/cilkutil/bin + if [ -d $d ] ; then + export PATH=$d:$PATH + fi +fi + +if [ $testresult = "PASS" ] ; then + pushd loader-stress-$branchrevision/$tokudb + echo `date` make release -s CC=$ftcc HAVE_CILK=$have_cilk BRTLOADER=$brtloader >>$runfile + make -s release CC=$ftcc HAVE_CILK=$have_cilk BRTLOADER=$brtloader >>$runfile 2>&1 + exitcode=$? + echo `date` complete $exitcode >>$runfile + if [ $exitcode != 0 ] ; then testresult="FAIL"; fi + popd +fi +if [ $testresult = "PASS" ] ; then + pushd loader-stress-$branchrevision/$tokudb/src/tests + echo `date` make loader-stress-test.tdb CC=$ftcc HAVE_CILK=$have_cilk >>$runfile + make loader-stress-test.tdb -s CC=$ftcc HAVE_CILK=$have_cilk >>$runfile 2>&1 + exitcode=$? + echo `date` complete $exitcode >>$runfile + if [ $exitcode != 0 ] ; then testresult="FAIL"; fi + popd +fi + +# run +if [ $testresult = "PASS" ] ; then + pushd loader-stress-$branchrevision/$tokudb/src/tests + echo `date` ./loader-stress-test.tdb -v -r $rows -d $dictionaries -c >>$runfile + ./loader-stress-test.tdb -v -r $rows -d $dictionaries -c >>$runfile 2>&1 + exitcode=$? + echo `date` complete $exitcode >>$runfile + if [ $exitcode != 0 ] ; then testresult="FAIL"; fi + popd +fi + +if [ $commit != 0 ] ; then + svn add $runfile + retry svn commit -m \"$testresult loader stress $rows $dictionaries $tokudb $branchrevision $system $arch $myhost\" $runfile +fi + +popd + +if [ $testresult = "PASS" ] ; then exitcode=0; else exitcode=1; fi +exit $exitcode