[Maria-developers] Rev 4: Added wrapper scripts for automated runs of sql-bench. in file:///Users/hakan/work/monty_program/mariadb-tools/
At file:///Users/hakan/work/monty_program/mariadb-tools/ ------------------------------------------------------------ revno: 4 revision-id: hakan@askmonty.org-20091229134253-zdbgd0ym9m7cokii parent: knielsen@knielsen-hq.org-20091218103524-nof6wfpuku60r9rn committer: Hakan Kuecuekyilmaz <hakan@askmonty.org> branch nick: mariadb-tools timestamp: Tue 2009-12-29 14:42:53 +0100 message: Added wrapper scripts for automated runs of sql-bench. === added directory 'sql-bench' === added file 'sql-bench/run-sql-bench.sh' --- a/sql-bench/run-sql-bench.sh 1970-01-01 00:00:00 +0000 +++ b/sql-bench/run-sql-bench.sh 2009-12-29 13:42:53 +0000 @@ -0,0 +1,236 @@ +#!/bin/bash +# +# Run sql-bench for every given configuration file +# we find in the directory $SQL_BENCH_CONFIGS. +# +# Note: Do not run this script with root privileges. +# We use killall -9, which can cause severe side effects! +# +# Hakan Kuecuekyilmaz <hakan at askmonty dot org> 2009-12-05. +# + +if [ $# != 2 ]; then + echo '[ERROR]: Please provide exactly two options.' + echo " Example: $0 [/path/to/bzr/repository] [name_without_spaces]" + echo ' [name_without_spaces] is used as identifier in the result file.' + + exit 1 +else + REPOSITORY="$1" + REPOSITORY_NAME="$2" +fi + +# +# Directories. +# +SQL_BENCH_CONFIGS='/home/hakan/sql-bench-configurations' +SQL_BENCH_RESULTS='/home/hakan/sql-bench-results' +WORK_DIR='/tmp' + +# +# Variables. +# +# We need at least 1 GB disk space in our $WORK_DIR. +SPACE_LIMIT=1000000 +MYSQLADMIN_OPTIONS='--no-defaults' +MACHINE=$(hostname -s) +RUN_DATE=$(date +%Y-%m-%d) + +# Timeout in seconds for waiting for mysqld to start. +TIMEOUT=100 + +# +# Binaries. +# +BZR='/usr/local/bin/bzr' +MYSQLADMIN='client/mysqladmin' + +# +# Check system. +# +# We should at least have $SPACE_LIMIT in $WORKDIR. +AVAILABLE=$(df $WORK_DIR | grep -v Filesystem | awk '{ print $4 }') + +if [ $AVAILABLE -lt $SPACE_LIMIT ]; then + echo "[ERROR]: We need at least $ONE_GB space in $WORK_DIR." + echo 'Exiting.' + + exit 1 +fi + +# +# Run sql-bench. +# +for i in ${SQL_BENCH_CONFIGS}/*.inc + do + # Set configuration and check that all required parameters are set. + source $i + + if [ x"$MARIADB_CONFIG" == x"" ]; then + echo '[ERROR]: $MARIADB_CONFIG is not set.' + echo 'Exiting.' + + exit 1 + fi + + if [ x"$SQLBENCH_OPTIONS" == x"" ]; then + echo '[ERROR]: $SQLBENCH_OPTIONS is not set.' + echo 'Exiting.' + + exit 1 + fi + + if [ x"$MARIADB_OPTIONS" == x"" ]; then + echo '[ERROR]: $MARIADB_OPTIONS is not set.' + echo 'Exiting.' + + exit 1 + fi + + # Check out and compile. + REVISION_ID=$($BZR version-info $REPOSITORY | grep revision-id) + if [ $? != 0 ]; then + echo '[ERROR]: bzr version-info failed. Please provide' + echo ' a working bzr repository' + echo 'Exiting.' + + exit 1 + fi + + cd $WORK_DIR + # Clean up of previous runs + killall -9 mysqld + + TEMP_DIR=$(mktemp --directory) + if [ $? != 0 ]; then + echo "[ERROR]: mktemp in $WORK_DIR failed." + echo 'Exiting.' + + exit 1 + fi + + # bzr export refuses to export to an existing directory, + # therefore we use a build directory. + echo "Branching from $REPOSITORY to ${TEMP_DIR}/build" + + $BZR export --format=dir ${TEMP_DIR}/build $REPOSITORY + if [ $? != 0 ]; then + echo '[ERROR]: bzr export failed.' + echo 'Exiting.' + + exit 1 + fi + + cd ${TEMP_DIR}/build + BUILD/autorun.sh + if [ $? != 0 ]; then + echo '[ERROR]: BUILD/autorun.sh failed.' + echo ' Please check your development environment.' + echo 'Exiting.' + + exit 1 + fi + + ./configure $MARIADB_CONFIG + if [ $? != 0 ]; then + echo "[ERROR]: ./configure $MARIADB_CONFIG failed." + echo " Please check your MARIADB_CONFIG in $i." + echo 'Exiting.' + + exit 1 + fi + + make -j4 + if [ $? != 0 ]; then + echo '[ERROR]: make failed.' + echo ' Please check your build logs.' + echo 'Exiting.' + + exit 1 + fi + + # Start mysqld. + MARIADB_SOCKET="${TEMP_DIR}/mysql.sock" + MARIADB_OPTIONS="$MARIADB_OPTIONS \ + --datadir=$TEMP_DIR \ + --tmpdir=$TEMP_DIR \ + --socket=$MARIADB_SOCKET" + + MYSQLADMIN_OPTIONS="$MYSQLADMIN_OPTIONS \ + --socket=$MARIADB_SOCKET" + + sql/mysqld $MARIADB_OPTIONS & + + j=0 + STARTED=-1 + while [ $j -le $TIMEOUT ] + do + $MYSQLADMIN $MYSQLADMIN_OPTIONS -uroot ping > /dev/null 2>&1 + if [ $? = 0 ]; then + STARTED=0 + + break + fi + + sleep 1 + j=$(($j + 1)) + done + + if [ $STARTED != 0 ]; then + echo '[ERROR]: Start of mysqld failed.' + echo ' Please check your error log.' + echo 'Exiting.' + + exit 1 + fi + + $MYSQLADMIN $MYSQLADMIN_OPTIONS create test + if [ $? != 0 ]; then + echo '[ERROR]: Create schema test failed.' + echo ' Please check your mysqld error log.' + echo 'Exiting.' + + exit 1 + fi + + # Run sql-bench. + cd sql-bench + COMMENTS="Revision used: $REVISION_ID \ + Configure: $MARIADB_CONFIG \ + Server options: $MARIADB_OPTIONS" + + # TODO: Adding --comments="$COMMENTS" does not work + SQLBENCH_OPTIONS="$SQLBENCH_OPTIONS \ + --socket=$MARIADB_SOCKET" + + ./run-all-tests $SQLBENCH_OPTIONS + if [ $? != 0 ]; then + echo '[ERROR]: run-all-tests produced errors.' + echo ' Please check your sql-bench error logs.' + echo 'Exiting.' + + exit 1 + fi + + # Save result file for later usage and comparison. + RESULT_FILE=$(ls output/RUN-*) + if [ x"$RESULT_FILE" != x"" ]; then + NEW_FILE_NAME="RUN-${REPOSITORY_NAME}-$(basename $RESULT_FILE | awk -F 'RUN-' '{ print $2 }')" + + CONFIGURATION=$(basename "$i" | awk -F . '{ print $1 }') + ARCHIVE_DIR="${SQL_BENCH_RESULTS}/${MACHINE}/${RUN_DATE}/${CONFIGURATION}" + mkdir -p $ARCHIVE_DIR + + # Add comment to result file. + sed -e "s%Comments:%Comments: ${COMMENTS}%" $RESULT_FILE > foo.tmp + mv foo.tmp $RESULT_FILE + # TODO: check for failures and copy the logs in question. + cp $RESULT_FILE ${ARCHIVE_DIR}/$NEW_FILE_NAME + + # Clean up for next round. + rm -rf $TEMP_DIR + else + echo '[ERROR]: Cannot find result file after sql-bench run!' + fi + +done === added directory 'sql-bench/sql-bench-configurations' === added file 'sql-bench/sql-bench-configurations/sql-bench-default-config.inc' --- a/sql-bench/sql-bench-configurations/sql-bench-default-config.inc 1970-01-01 00:00:00 +0000 +++ b/sql-bench/sql-bench-configurations/sql-bench-default-config.inc 2009-12-29 13:42:53 +0000 @@ -0,0 +1,34 @@ +# Template configuration file for running sqlbench. +# +# We are using this configuration file for the wrapper +# script run-sql-bench.sh. For every copy of this file we +# are starting a sqlbench run. +# +# Hakan Kuecuekyilmaz <hakan at askmonty dot org> 2009-12-05. +# + +# +# Configure line for compiling MariaDB. +# +export MARIADB_CONFIG="--enable-thread-safe-client \ + --enable-local-infile" + +# +# Options for starting mysqld. +# +# Attention: Do not set --datadir, --tmpdir, and --socket. +# +export MARIADB_OPTIONS="--no-defaults \ + --skip-grant-tables \ + --language=./sql/share/english" + +# +# Options for sql-bench. +# +# Attention: Do not set --socket. +# +export SQLBENCH_OPTIONS="--log \ + --fast \ + --server=mysql \ + --small-test \ + --user=root"
Hi, Hakan! On Dec 29, Hakan Kuecuekyilmaz wrote:
At file:///Users/hakan/work/monty_program/mariadb-tools/
------------------------------------------------------------ revno: 4 revision-id: hakan@askmonty.org-20091229134253-zdbgd0ym9m7cokii parent: knielsen@knielsen-hq.org-20091218103524-nof6wfpuku60r9rn committer: Hakan Kuecuekyilmaz <hakan@askmonty.org> branch nick: mariadb-tools timestamp: Tue 2009-12-29 14:42:53 +0100 message: Added wrapper scripts for automated runs of sql-bench.
=== added directory 'sql-bench' === added file 'sql-bench/run-sql-bench.sh' --- a/sql-bench/run-sql-bench.sh 1970-01-01 00:00:00 +0000 +++ b/sql-bench/run-sql-bench.sh 2009-12-29 13:42:53 +0000 @@ -0,0 +1,236 @@ +#!/bin/bash +# +# Run sql-bench for every given configuration file +# we find in the directory $SQL_BENCH_CONFIGS. +# +# Note: Do not run this script with root privileges. +# We use killall -9, which can cause severe side effects!
You can use killall -u `whoami` not perfect, but still much safer. Regards / Mit vielen Grüßen, Sergei -- __ ___ ___ ____ __ / |/ /_ __/ __/ __ \/ / Sergei Golubchik <serg@sun.com> / /|_/ / // /\ \/ /_/ / /__ Principal Software Engineer/Server Architect /_/ /_/\_, /___/\___\_\___/ Sun Microsystems GmbH, HRB München 161028 <___/ Sonnenallee 1, 85551 Kirchheim-Heimstetten Geschäftsführer: Thomas Schroeder, Wolfgang Engels, Wolf Frenkel Vorsitzender des Aufsichtsrates: Martin Häring
Am 29.12.2009 um 15:09 schrieb Sergei Golubchik <sergii@pisem.net>:
Hi, Hakan!
On Dec 29, Hakan Kuecuekyilmaz wrote:
At file:///Users/hakan/work/monty_program/mariadb-tools/
------------------------------------------------------------ revno: 4 revision-id: hakan@askmonty.org-20091229134253-zdbgd0ym9m7cokii parent: knielsen@knielsen-hq.org-20091218103524-nof6wfpuku60r9rn committer: Hakan Kuecuekyilmaz <hakan@askmonty.org> branch nick: mariadb-tools timestamp: Tue 2009-12-29 14:42:53 +0100 message: Added wrapper scripts for automated runs of sql-bench.
=== added directory 'sql-bench' === added file 'sql-bench/run-sql-bench.sh' --- a/sql-bench/run-sql-bench.sh 1970-01-01 00:00:00 +0000 +++ b/sql-bench/run-sql-bench.sh 2009-12-29 13:42:53 +0000 @@ -0,0 +1,236 @@ +#!/bin/bash +# +# Run sql-bench for every given configuration file +# we find in the directory $SQL_BENCH_CONFIGS. +# +# Note: Do not run this script with root privileges. +# We use killall -9, which can cause severe side effects!
You can use
killall -u `whoami`
not perfect, but still much safer.
I think that's not much safer. If run by root, then whoami will return root. I will add a simple check whether the script was started by root and if so, simply abort. Thanks for noting out this one, Hakan
Sergei Golubchik <sergii@pisem.net> writes:
On Dec 29, Hakan Kuecuekyilmaz wrote:
+# Note: Do not run this script with root privileges. +# We use killall -9, which can cause severe side effects!
You can use
killall -u `whoami`
not perfect, but still much safer.
There is another, robust way to do this: Make the parent process a group leader with setpgid(0,0). Then `kill -9 -$$` will kill only the processes started from that parent (or from children, recursively). Or use setsid to create a session leader for even more robust killing (there is a setsid command available to do this within shell scripts). (You might not need this for your purpose, but I thought I would mention it in case you at some point may want to run this in Buildbot or similar). - Kristian.
participants (3)
-
Hakan Kuecuekyilmaz
-
Kristian Nielsen
-
Sergei Golubchik