#!/bin/sh # # Copyright (c) 2006 MySQL AB # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA echo "######################################################################" echo "#" echo "# Test Bug#17332 - changing key_buffer_size on a running server can crash under load" echo "# Additional tests for code coverage testing" echo "# - Small cache for higher eviction rate" echo "# - Use temporary tables" echo "# - Use LOAD INDEX INTO CACHE" echo "# - Pause with resizing to give normal operation a chance" echo "# - Shorter test for faster results" echo "#" ####################################################################### # # Settings. CAUTION: Paths are not space safe. # # BASEDIR="install directory" # DATADIR="databases directory e.g. $BASEDIR/var" DATADIR="${DATADIR:-$BASEDIR/var}" TREEROOT="${TREEROOT:-$HOME}" MYSQLD="$BASEDIR/libexec/mysqld" MYSQLC="$BASEDIR/bin/mysql" MYSQLA="$BASEDIR/bin/mysqladmin" MYSQLT="$BASEDIR/bin/mysqltest" PORT_1="${MYSQL_TCP_PORT:+--port=$MYSQL_TCP_PORT}" SOCK_1="${MYSQL_UNIX_PORT:+--socket=$MYSQL_UNIX_PORT}" USER_1="-u root -D test" CLNT_1= #"-A -v -f" CLNT_1="-A -v --show-warnings" DATA_1="--basedir=$BASEDIR --datadir=$DATADIR" SERV_1="--log-error --core" SERV_1="$SERV_1 --skip-innodb --skip-ndbcluster" SERV_1="$SERV_1 --delay-key-write=all" SERV_1="$SERV_1 --key_cache_block_size=1200" # force 1024 bytes cache blocks SERV_1="$SERV_1 --key_buffer_size=36864" # small key cache #SERV_1="$SERV_1 --key_buffer_size=12288" # force evictions with empty LRU ring #SERV_1="$SERV_1 --key_buffer_size=0" # disable key cache DBUG_1= #"--debug=t:d:i:O,$DATADIR/mysqld.trace" DBUG_1= #"--debug=d,thrlock:i:O,$DATADIR/mysqld.trace" HOSTNAM="`expr \`uname -n\` : '\([^\.]*\)'`" ERRFILE="$HOSTNAM.err" PIDFILE="$HOSTNAM.pid" ####################################################################### # # Go to DATADIR. # cd $DATADIR || exit $? ####################################################################### # # Cleanup. # rm -f *.trace *.err *.pid core* test/#sql* tmp/* bug17332* test -d test || mkdir test test -d tmp || mkdir tmp ####################################################################### # # Functions. sleep_until_pidfile_created () { file="$1" loop="$2" org_time="$2" while [ "$loop" -gt 0 ] do if [ -r "$file" ] then return fi sleep 1 loop="`expr \"$loop\" - 1`" done echo "ERROR: $file was not created in $org_time seconds; Aborting" exit 1; } sleep_until_pidfile_deleted () { file="$1" loop="$2" while [ "$loop" -gt 0 ] do if [ -r "$file" ] then if kill -0 "`cat \"$file\"`" then sleep 1 else break fi else break fi loop="`expr \"$loop\" - 1`" done } ###################################################################### # # Preparing scripts. # cat > bug17332-01.sql <<'EOF' DROP TABLE IF EXISTS t1; CREATE TABLE t1 ( id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, v1 CHAR(150), v2 CHAR(150), v3 CHAR(150), KEY(id,v1,v2,v3), KEY(v2,v3,v1), KEY(v3,v1,v2) ) ENGINE=MyISAM; DROP TABLE IF EXISTS t2; CREATE TABLE t2 ( id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, v1 CHAR(150), v2 CHAR(150), v3 CHAR(150), KEY(id,v1,v2,v3), KEY(v2,v3,v1), KEY(v3,v1,v2) ) ENGINE=MyISAM; DROP TABLE IF EXISTS t3; CREATE TABLE t3 ( id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, v1 CHAR(150), v2 CHAR(150), v3 CHAR(150), KEY(id,v1,v2,v3), KEY(v2,v3,v1), KEY(v3,v1,v2) ) ENGINE=MyISAM; EOF cat > bug17332-02.pl <<'EOF' #!/usr/bin/perl -w my $table= $ARGV[0]; # # Loop on insert and flush. # for (my $insert= 50; $insert; $insert--) { print "SHOW VARIABLES LIKE 'key%';\n"; print "SHOW STATUS LIKE 'key%';\n"; # # Load keycache. # print "INSERT INTO ${table} (v1,v2,v3) VALUES ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c'), ('a','b','c'),('a','b','c'),('a','b','c'),('a','b','c');\n"; if ( $insert % int(rand(3) + 1) == 1 ) { print "SHOW VARIABLES LIKE 'key%';\n"; print "SHOW STATUS LIKE 'key%';\n"; if ( int(rand(7)) == 0 ) { print "UPDATE ${table} SET v1='a', v2='b', v3='c'". "WHERE v2='e';\n"; } else { print "UPDATE ${table} SET v1='d', v2='e', v3='f'". "WHERE id MOD 13 = ". int(rand(13)) .";\n"; } } if ( $insert % int(rand(10) + 1) == 1 ) { print "SHOW VARIABLES LIKE 'key%';\n"; print "SHOW STATUS LIKE 'key%';\n"; if ( int(rand(4)) == 0 ) { print "FLUSH TABLE;\n"; } else { print "FLUSH TABLE ${table};\n"; } } if ( $insert % int(rand(10) + 1) == 1 ) { print "SHOW VARIABLES LIKE 'key%';\n"; print "SHOW STATUS LIKE 'key%';\n"; print "CHECK TABLE ${table};\n"; } if ( $insert % int(rand(10) + 1) == 1 ) { print "SHOW VARIABLES LIKE 'key%';\n"; print "SHOW STATUS LIKE 'key%';\n"; print "CREATE TEMPORARY TABLE tt1". "(KEY(id), KEY(v1,v2,v3)) SELECT * FROM ${table};\n"; print "DROP TABLE tt1;\n"; } if ( $insert % int(rand(10) + 1) == 1 ) { print "SHOW VARIABLES LIKE 'key%';\n"; print "SHOW STATUS LIKE 'key%';\n"; print "LOAD INDEX INTO CACHE ${table};\n"; } } # # Check table. # if ( int(rand(2)) == 0 ) { print "SHOW VARIABLES LIKE 'key%';\n"; print "SHOW STATUS LIKE 'key%';\n"; print "FLUSH TABLE ${table};\n"; } print "SHOW VARIABLES LIKE 'key%';\n"; print "SHOW STATUS LIKE 'key%';\n"; print "CHECK TABLE ${table};\n"; print "SELECT 'END OF TEST';\n"; EOF cat > bug17332-03.pl <<'EOF' #!/usr/bin/perl -w # # Loop on resize. # for (my $idx= 100 + int(rand(4000)); $idx; $idx--) { print "SHOW VARIABLES LIKE 'key%';\n"; print "SHOW STATUS LIKE 'key%';\n"; # Enable this for normal resizing print "SET GLOBAL key_buffer_size=". (12288 + int(rand(65536))) .";\n"; # Enable this for no resizing with small key cache #print "SET GLOBAL key_buffer_size=". (36864) .";\n"; # Enable this for resizing with disabled key cache #print "SET GLOBAL key_buffer_size=". (2000 + int(rand(8000))) .";\n"; if ( $idx % int(rand(10) + 1) == 1 ) { print "SHOW VARIABLES LIKE 'key%';\n"; print "SHOW STATUS LIKE 'key%';\n"; print "SELECT SLEEP(". int(rand(3) + 1) .");\n"; } } print "SHOW VARIABLES LIKE 'key%';\n"; print "SHOW STATUS LIKE 'key%';\n"; print "SELECT 'END OF TEST';\n"; EOF ####################################################################### # # Run in a loop until it fails. # ROUND=1 while : do echo "######################################################################" date '+%Y-%m-%d %H:%M:%S' echo "######################################################################" echo "#" echo "# Starting database server." nice "$MYSQLD" $PORT_1 $SOCK_1 $DATA_1 $SERV_1 $DBUG_1 & SERV_1_PID=$! echo "Process_id $SERV_1_PID" echo sleep_until_pidfile_created "$PIDFILE" 400 echo "######################################################################" echo "#" echo "# Creating tables." "$MYSQLC" $PORT_1 $SOCK_1 $USER_1 $CLNT_1 < bug17332-01.sql > bug17332-01.log echo sleep 2 echo "######################################################################" echo "#" echo "# Starting client 1.1 (inserter)." perl bug17332-02.pl t1 2>/dev/null | \ "$MYSQLC" $PORT_1 $SOCK_1 $USER_1 $CLNT_1 \ > bug17332-11.log 2>&1 & CLNT_11_PID=$! echo "Process_id $CLNT_11_PID" echo sleep 2 echo "######################################################################" echo "#" echo "# Starting client 1.2 (inserter)." perl bug17332-02.pl t1 2>/dev/null | \ "$MYSQLC" $PORT_1 $SOCK_1 $USER_1 $CLNT_1 \ > bug17332-12.log 2>&1 & CLNT_12_PID=$! echo "Process_id $CLNT_12_PID" echo sleep 2 echo "######################################################################" echo "#" echo "# Starting client 1.3 (inserter)." perl bug17332-02.pl t1 2>/dev/null | \ "$MYSQLC" $PORT_1 $SOCK_1 $USER_1 $CLNT_1 \ > bug17332-13.log 2>&1 & CLNT_13_PID=$! echo "Process_id $CLNT_13_PID" echo sleep 2 echo "######################################################################" echo "#" echo "# Starting client 1.4 (inserter)." perl bug17332-02.pl t1 2>/dev/null | \ "$MYSQLC" $PORT_1 $SOCK_1 $USER_1 $CLNT_1 \ > bug17332-14.log 2>&1 & CLNT_14_PID=$! echo "Process_id $CLNT_14_PID" echo sleep 2 echo "######################################################################" echo "#" echo "# Starting client 2.1 (inserter)." perl bug17332-02.pl t2 2>/dev/null | \ "$MYSQLC" $PORT_1 $SOCK_1 $USER_1 $CLNT_1 \ > bug17332-21.log 2>&1 & CLNT_21_PID=$! echo "Process_id $CLNT_21_PID" echo sleep 2 echo "######################################################################" echo "#" echo "# Starting client 2.2 (inserter)." perl bug17332-02.pl t2 2>/dev/null | \ "$MYSQLC" $PORT_1 $SOCK_1 $USER_1 $CLNT_1 \ > bug17332-22.log 2>&1 & CLNT_22_PID=$! echo "Process_id $CLNT_22_PID" echo sleep 2 echo "######################################################################" echo "#" echo "# Starting client 2.3 (inserter)." perl bug17332-02.pl t2 2>/dev/null | \ "$MYSQLC" $PORT_1 $SOCK_1 $USER_1 $CLNT_1 \ > bug17332-23.log 2>&1 & CLNT_23_PID=$! echo "Process_id $CLNT_23_PID" echo sleep 2 echo "######################################################################" echo "#" echo "# Starting client 2.4 (inserter)." perl bug17332-02.pl t2 2>/dev/null | \ "$MYSQLC" $PORT_1 $SOCK_1 $USER_1 $CLNT_1 \ > bug17332-24.log 2>&1 & CLNT_24_PID=$! echo "Process_id $CLNT_24_PID" echo sleep 2 echo "######################################################################" echo "#" echo "# Starting client 3.1 (inserter)." perl bug17332-02.pl t3 2>/dev/null | \ "$MYSQLC" $PORT_1 $SOCK_1 $USER_1 $CLNT_1 \ > bug17332-31.log 2>&1 & CLNT_31_PID=$! echo "Process_id $CLNT_31_PID" echo sleep 2 echo "######################################################################" echo "#" echo "# Starting client 3.2 (inserter)." perl bug17332-02.pl t3 2>/dev/null | \ "$MYSQLC" $PORT_1 $SOCK_1 $USER_1 $CLNT_1 \ > bug17332-32.log 2>&1 & CLNT_32_PID=$! echo "Process_id $CLNT_32_PID" echo sleep 2 echo "######################################################################" echo "#" echo "# Starting client 3.3 (inserter)." perl bug17332-02.pl t3 2>/dev/null | \ "$MYSQLC" $PORT_1 $SOCK_1 $USER_1 $CLNT_1 \ > bug17332-33.log 2>&1 & CLNT_33_PID=$! echo "Process_id $CLNT_33_PID" echo sleep 2 echo "######################################################################" echo "#" echo "# Starting client 3.4 (inserter)." perl bug17332-02.pl t3 2>/dev/null | \ "$MYSQLC" $PORT_1 $SOCK_1 $USER_1 $CLNT_1 \ > bug17332-34.log 2>&1 & CLNT_34_PID=$! echo "Process_id $CLNT_34_PID" echo sleep 2 echo "######################################################################" echo "#" echo "# Starting client 4.1 (key buffer changer)." perl bug17332-03.pl 2>/dev/null | \ "$MYSQLC" $PORT_1 $SOCK_1 $USER_1 $CLNT_1 -vvv \ > bug17332-41.log 2>&1 & CLNT_41_PID=$! echo "Process_id $CLNT_41_PID" echo sleep 2 # # There is no use for more buffer changers as only one can be started # from set_var.cc (see key_cache->in_init). # echo "######################################################################" echo "#" echo "`date '+%Y-%m-%d %H:%M:%S'` Waiting for completion of round $ROUND..." exec 6>&2 2>/dev/null # Loop until some of the processes finished REPORTED="" FINISHED=0 while [ $FINISHED -lt 13 ] do sleep 10 for PID in $CLNT_11_PID $CLNT_12_PID $CLNT_13_PID $CLNT_14_PID \ $CLNT_21_PID $CLNT_22_PID $CLNT_23_PID $CLNT_24_PID \ $CLNT_31_PID $CLNT_32_PID $CLNT_33_PID $CLNT_34_PID \ $CLNT_41_PID do if kill -0 $PID then : else case $REPORTED in *" $PID "* ) : ;; * ) FINISHED=`expr $FINISHED + 1` echo "`date '+%Y-%m-%d %H:%M:%S'` Process $PID finished" REPORTED="$REPORTED $PID " ;; esac fi done done # Kill all processes kill $CLNT_11_PID $CLNT_12_PID $CLNT_13_PID $CLNT_14_PID \ $CLNT_21_PID $CLNT_22_PID $CLNT_23_PID $CLNT_24_PID \ $CLNT_31_PID $CLNT_32_PID $CLNT_33_PID $CLNT_34_PID \ $CLNT_41_PID || : sleep 2 # Loop as long as any of the processes exists while kill $CLNT_11_PID || \ kill $CLNT_12_PID || \ kill $CLNT_13_PID || \ kill $CLNT_14_PID || \ kill $CLNT_21_PID || \ kill $CLNT_22_PID || \ kill $CLNT_23_PID || \ kill $CLNT_24_PID || \ kill $CLNT_31_PID || \ kill $CLNT_32_PID || \ kill $CLNT_33_PID || \ kill $CLNT_34_PID || \ kill $CLNT_41_PID do sleep 1 done sleep 2 echo exec 2>&6 echo "######################################################################" echo "#" echo "# Stopping database server." "$MYSQLA" $PORT_1 $SOCK_1 -u root shutdown sleep_until_pidfile_deleted "$PIDFILE" 60 echo if [ "`echo core*`" != "core*" ] then break fi if grep -Hi "corrupt|crash|incorrect key file" "$ERRFILE" \ || egrep -Hi "corrupt|crash|incorrect key file" bug17332-*.log then break fi if grep -H "ERROR" "$ERRFILE" \ || egrep -Hi "error" bug17332-*.log then : # break fi echo echo === $ROUND rounds complete `date '+%Y-%m-%d %H:%M:%S'` echo echo ROUND=`expr $ROUND + 1` echo done echo "# End of Test." echo "#" echo "######################################################################"