Loading mysql-test/lib/mtr_io.pl +61 −2 Original line number Diff line number Diff line Loading @@ -35,13 +35,72 @@ sub mtr_get_opts_from_file ($) { while ( <FILE> ) { chomp; s/\$MYSQL_TEST_DIR/$::glob_mysql_test_dir/g; push(@args, split(' ', $_)); # --set-variable=init_connect=set @a='a\\0c' s/^\s+//; # Remove leading space s/\s+$//; # Remove ending space # This is strange, but we need to fill whitespace inside # quotes with something, to remove later. We do this to # be able to split on space. Else, we have trouble with # options like # # --someopt="--insideopt1 --insideopt2" # # But still with this, we are not 100% sure it is right, # we need a shell to do it right. # print STDERR "\n"; # print STDERR "AAA: $_\n"; s/\'([^\'\"]*)\'/unspace($1,"\x0a")/ge; s/\"([^\'\"]*)\"/unspace($1,"\x0b")/ge; s/\'([^\'\"]*)\'/unspace($1,"\x0a")/ge; s/\"([^\'\"]*)\"/unspace($1,"\x0b")/ge; # print STDERR "BBB: $_\n"; # foreach my $arg (/(--?\w.*?)(?=\s+--?\w|$)/) # FIXME ENV vars should be expanded!!!! foreach my $arg (split(/[ \t]+/)) { $arg =~ tr/\x11\x0a\x0b/ \'\"/; # Put back real chars # The outermost quotes has to go $arg =~ s/^([^\'\"]*)\'(.*)\'([^\'\"]*)$/$1$2$3/ or $arg =~ s/^([^\'\"]*)\"(.*)\"([^\'\"]*)$/$1$2$3/; $arg =~ s/\\\\/\\/g; $arg =~ s/\$\{(\w+)\}/envsubst($1)/ge; $arg =~ s/\$(\w+)/envsubst($1)/ge; # print STDERR "ARG: $arg\n"; push(@args, $arg); } } close FILE; return \@args; } sub envsubst { my $string= shift; if ( ! defined $ENV{$string} ) { mtr_error("opt file referense \$$string that is unknown"); } return $ENV{$string}; } sub unspace { my $string= shift; my $quote= shift; $string =~ s/[ \t]/\x11/g; return "$quote$string$quote"; } sub mtr_fromfile ($) { my $file= shift; Loading mysql-test/lib/mtr_process.pl +59 −20 Original line number Diff line number Diff line Loading @@ -4,7 +4,7 @@ # and is part of the translation of the Bourne shell script with the # same name. use Carp qw(cluck); #use Carp qw(cluck); use strict; use POSIX ":sys_wait_h"; Loading Loading @@ -64,18 +64,6 @@ sub spawn_impl ($$$$$$$) { my $error= shift; my $pid_file= shift; # FIXME # FIXME really needing a PATH??? # $ENV{'PATH'}= "/bin:/usr/bin:/usr/local/bin:/usr/bsd:/usr/X11R6/bin:/usr/openwin/bin:/usr/bin/X11:$ENV{'PATH'}"; $ENV{'TZ'}= "GMT-3"; # for UNIX_TIMESTAMP tests to work $ENV{'LC_COLLATE'}= "C"; $ENV{'MYSQL_TEST_DIR'}= $::glob_mysql_test_dir; $ENV{'MASTER_MYPORT'}= $::opt_master_myport; $ENV{'SLAVE_MYPORT'}= $::opt_slave_myport; # $ENV{'MYSQL_TCP_PORT'}= '@MYSQL_TCP_PORT@'; # FIXME $ENV{'MYSQL_TCP_PORT'}= 3306; $ENV{'MASTER_MYSOCK'}= $::master->[0]->{'path_mysock'}; if ( $::opt_script_debug ) { print STDERR "\n"; Loading @@ -85,17 +73,21 @@ sub spawn_impl ($$$$$$$) { print STDERR "#### ", "STDERR $error\n" if $error; if ( $join ) { print STDERR "#### ", "run"; print STDERR "#### ", "RUN "; } else { print STDERR "#### ", "spawn"; print STDERR "#### ", "SPAWN "; } print STDERR "$path ", join(" ",@$arg_list_t), "\n"; print STDERR "#### ", "-" x 78, "\n"; } my $pid= fork(); if ( ! defined $pid ) { mtr_error("$path ($pid) can't be forked"); } if ( $pid ) { Loading @@ -104,17 +96,22 @@ sub spawn_impl ($$$$$$$) { { # We run a command and wait for the result # FIXME this need to be improved waitpid($pid,0); my $res= waitpid($pid,0); if ( $res == -1 ) { mtr_error("$path ($pid) got lost somehow"); } my $exit_value= $? >> 8; my $signal_num= $? & 127; my $dumped_core= $? & 128; if ( $signal_num ) { mtr_error("spawn got signal $signal_num"); mtr_error("$path ($pid) got signal $signal_num"); } if ( $dumped_core ) { mtr_error("spawn dumped core"); mtr_error("$path ($pid) dumped core"); } return $exit_value; } Loading Loading @@ -326,7 +323,8 @@ sub mtr_stop_mysqld_servers ($$) { mtr_init_args(\$args); mtr_add_arg($args, "--no-defaults"); mtr_add_arg($args, "-uroot"); mtr_add_arg($args, "--user=%s", $::opt_user); mtr_add_arg($args, "--password="); if ( -e $srv->{'sockfile'} ) { mtr_add_arg($args, "--socket=%s", $srv->{'sockfile'}); Loading @@ -336,7 +334,8 @@ sub mtr_stop_mysqld_servers ($$) { mtr_add_arg($args, "--port=%s", $srv->{'port'}); } mtr_add_arg($args, "--connect_timeout=5"); mtr_add_arg($args, "--shutdown_timeout=70"); mtr_add_arg($args, "--shutdown_timeout=20"); mtr_add_arg($args, "--protocol=tcp"); # FIXME new thing, will it help?! mtr_add_arg($args, "shutdown"); # We don't wait for termination of mysqladmin mtr_spawn($::exe_mysqladmin, $args, Loading @@ -361,6 +360,10 @@ sub mtr_stop_mysqld_servers ($$) { { last PIDSOCKFILEREMOVED; } if ( $loop % 20 == 1 ) { mtr_warning("Still processes alive after 10 seconds, retrying for $loop seconds..."); } mtr_debug("Sleep for 1 second waiting for pid and socket file removal"); sleep(1); # One second } Loading Loading @@ -464,4 +467,40 @@ sub stop_reap_all { $SIG{CHLD}= 'DEFAULT'; } ############################################################################## # # Wait for a file to be created # ############################################################################## sub sleep_until_file_created ($$) { my $pidfile= shift; my $timeout= shift; my $loop= $timeout; while ( $loop-- ) { if ( -r $pidfile ) { return; } mtr_debug("Sleep for 1 second waiting for creation of $pidfile"); if ( $loop % 20 == 1 ) { mtr_warning("Waiting for $pidfile to be created, still trying for $loop seconds..."); } sleep(1); } if ( ! -r $pidfile ) { mtr_error("No $pidfile was created"); } } 1; mysql-test/mysql-test-run.pl +72 −66 Original line number Diff line number Diff line Loading @@ -232,6 +232,8 @@ our $opt_local_master; our $master; # Will be struct in C our $slave; our $opt_master_myport; our $opt_slave_myport; our $opt_ndbcluster_port; our $opt_ndbconnectstring; Loading @@ -248,16 +250,10 @@ our $opt_skip_rpl; our $opt_skip_test; our $opt_sleep; our $opt_ps_protocol; # FIXME all of the sleep time handling needs cleanup our $opt_sleep_time_after_restart= 1; our $opt_sleep_time_for_delete= 10; our $opt_sleep_time_for_first_master= 400; # enough time create innodb tables our $opt_sleep_time_for_second_master= 400; our $opt_sleep_time_for_first_slave= 400; our $opt_sleep_time_for_second_slave= 30; our $opt_socket; Loading @@ -270,7 +266,7 @@ our $opt_strace_client; our $opt_timer; our $opt_user; our $opt_user_test; our $opt_valgrind; Loading Loading @@ -299,6 +295,7 @@ sub main (); sub initial_setup (); sub command_line_setup (); sub executable_setup (); sub environment_setup (); sub kill_and_cleanup (); sub collect_test_cases ($); sub sleep_until_file_created ($$); Loading Loading @@ -332,6 +329,7 @@ sub main () { initial_setup(); command_line_setup(); executable_setup(); environment_setup(); signal_setup(); if ( $opt_gcov ) Loading Loading @@ -449,12 +447,9 @@ sub command_line_setup () { $path_manager_log= "$glob_mysql_test_dir/var/log/manager.log"; $opt_current_test= "$glob_mysql_test_dir/var/log/current_test"; my $opt_master_myport= 9306; my $opt_slave_myport= 9308; $opt_master_myport= 9306; $opt_slave_myport= 9308; $opt_ndbcluster_port= 9350; $opt_sleep_time_for_delete= 10; my $opt_user; # Read the command line # Note: Keep list, and the order, in sync with usage at end of this file Loading Loading @@ -545,6 +540,7 @@ sub command_line_setup () { $master->[0]->{'path_mypid'}= "$glob_mysql_test_dir/var/run/master.pid"; $master->[0]->{'path_mysock'}= "$opt_tmpdir/master.sock"; $master->[0]->{'path_myport'}= $opt_master_myport; $master->[0]->{'start_timeout'}= 400; # enough time create innodb tables $master->[1]->{'path_myddir'}= "$glob_mysql_test_dir/var/master1-data"; $master->[1]->{'path_myerr'}= "$glob_mysql_test_dir/var/log/master1.err"; Loading @@ -552,6 +548,7 @@ sub command_line_setup () { $master->[1]->{'path_mypid'}= "$glob_mysql_test_dir/var/run/master1.pid"; $master->[1]->{'path_mysock'}= "$opt_tmpdir/master1.sock"; $master->[1]->{'path_myport'}= $opt_master_myport + 1; $master->[1]->{'start_timeout'}= 400; # enough time create innodb tables $slave->[0]->{'path_myddir'}= "$glob_mysql_test_dir/var/slave-data"; $slave->[0]->{'path_myerr'}= "$glob_mysql_test_dir/var/log/slave.err"; Loading @@ -559,6 +556,7 @@ sub command_line_setup () { $slave->[0]->{'path_mypid'}= "$glob_mysql_test_dir/var/run/slave.pid"; $slave->[0]->{'path_mysock'}= "$opt_tmpdir/slave.sock"; $slave->[0]->{'path_myport'}= $opt_slave_myport; $slave->[0]->{'start_timeout'}= 400; $slave->[1]->{'path_myddir'}= "$glob_mysql_test_dir/var/slave1-data"; $slave->[1]->{'path_myerr'}= "$glob_mysql_test_dir/var/log/slave1.err"; Loading @@ -566,6 +564,7 @@ sub command_line_setup () { $slave->[1]->{'path_mypid'}= "$glob_mysql_test_dir/var/run/slave1.pid"; $slave->[1]->{'path_mysock'}= "$opt_tmpdir/slave1.sock"; $slave->[1]->{'path_myport'}= $opt_slave_myport + 1; $slave->[1]->{'start_timeout'}= 30; $slave->[2]->{'path_myddir'}= "$glob_mysql_test_dir/var/slave2-data"; $slave->[2]->{'path_myerr'}= "$glob_mysql_test_dir/var/log/slave2.err"; Loading @@ -573,6 +572,7 @@ sub command_line_setup () { $slave->[2]->{'path_mypid'}= "$glob_mysql_test_dir/var/run/slave2.pid"; $slave->[2]->{'path_mysock'}= "$opt_tmpdir/slave2.sock"; $slave->[2]->{'path_myport'}= $opt_slave_myport + 2; $slave->[2]->{'start_timeout'}= 30; # Do sanity checks of command line arguments Loading @@ -594,16 +594,6 @@ sub command_line_setup () { $master->[0]->{'path_mysock'}= $opt_socket; } # -------------------------------------------------------------------------- # Set LD_LIBRARY_PATH if we are using shared libraries # -------------------------------------------------------------------------- $ENV{'LD_LIBRARY_PATH'}= "$glob_basedir/lib:$glob_basedir/libmysql/.libs" . ($ENV{'LD_LIBRARY_PATH'} ? ":$ENV{'LD_LIBRARY_PATH'}" : ""); $ENV{'DYLD_LIBRARY_PATH'}= "$glob_basedir/lib:$glob_basedir/libmysql/.libs" . ($ENV{'DYLD_LIBRARY_PATH'} ? ":$ENV{'DYLD_LIBRARY_PATH'}" : ""); # -------------------------------------------------------------------------- # Look at the command line options and set script flags # -------------------------------------------------------------------------- Loading Loading @@ -741,7 +731,7 @@ sub executable_setup () { } else { mtr_error("Cannot find embedded server 'mysqltest'"); mtr_error("Can't find embedded server 'mysqltest'"); } $path_tests_bindir= "$glob_basedir/libmysqld/examples"; } Loading Loading @@ -831,6 +821,41 @@ sub executable_setup () { } ############################################################################## # # Set environment to be used by childs of this process # ############################################################################## # Note that some env is setup in spawn/run, in "mtr_process.pl" sub environment_setup () { # -------------------------------------------------------------------------- # Set LD_LIBRARY_PATH if we are using shared libraries # -------------------------------------------------------------------------- $ENV{'LD_LIBRARY_PATH'}= "$glob_basedir/lib:$glob_basedir/libmysql/.libs" . ($ENV{'LD_LIBRARY_PATH'} ? ":$ENV{'LD_LIBRARY_PATH'}" : ""); $ENV{'DYLD_LIBRARY_PATH'}= "$glob_basedir/lib:$glob_basedir/libmysql/.libs" . ($ENV{'DYLD_LIBRARY_PATH'} ? ":$ENV{'DYLD_LIBRARY_PATH'}" : ""); # -------------------------------------------------------------------------- # Also command lines in .opt files may contain env vars # -------------------------------------------------------------------------- $ENV{'LC_COLLATE'}= "C"; $ENV{'MYSQL_TEST_DIR'}= $glob_mysql_test_dir; $ENV{'MASTER_MYPORT'}= $opt_master_myport; $ENV{'SLAVE_MYPORT'}= $opt_slave_myport; # $ENV{'MYSQL_TCP_PORT'}= '@MYSQL_TCP_PORT@'; # FIXME $ENV{'MYSQL_TCP_PORT'}= 3306; $ENV{'MASTER_MYSOCK'}= $master->[0]->{'path_mysock'}; } ############################################################################## # # If we get a ^C, we try to clean up before termination Loading Loading @@ -922,6 +947,7 @@ sub collect_test_cases ($) { # ---------------------------------------------------------------------- $tinfo->{'path'}= $path; $tinfo->{'timezone'}= "GMT-3"; # for UNIX_TIMESTAMP tests to work if ( defined mtr_match_prefix($tname,"rpl") ) { Loading Loading @@ -967,7 +993,7 @@ sub collect_test_cases ($) { if ( defined $value ) { $ENV{'TZ'}= $value; # FIXME pass this on somehow.... $tinfo->{'timezone'}= $value; $extra_master_opt= []; $tinfo->{'master_restart'}= 0; last; Loading Loading @@ -1071,6 +1097,7 @@ sub kill_and_cleanup () { # leftovers from previous runs. mtr_report("Killing Possible Leftover Processes"); mkpath("$glob_mysql_test_dir/var/log"); # Needed for mysqladmin log mtr_kill_leftovers(); } Loading @@ -1092,52 +1119,28 @@ sub kill_and_cleanup () { mkpath("$glob_mysql_test_dir/var/tmp"); mkpath($opt_tmpdir); # FIXME do we really need to create these all, or are they # created for us when tables are created? rmtree("$master->[0]->{'path_myddir'}"); mkpath("$master->[0]->{'path_myddir'}/mysql"); # Need to create subdir?! mkpath("$master->[0]->{'path_myddir'}/mysql"); mkpath("$master->[0]->{'path_myddir'}/test"); rmtree("$master->[1]->{'path_myddir'}"); mkpath("$master->[1]->{'path_myddir'}/mysql"); # Need to create subdir?! mkpath("$master->[1]->{'path_myddir'}/mysql"); mkpath("$master->[1]->{'path_myddir'}/test"); rmtree("$slave->[0]->{'path_myddir'}"); mkpath("$slave->[0]->{'path_myddir'}/mysql"); # Need to create subdir?! mkpath("$slave->[0]->{'path_myddir'}/mysql"); mkpath("$slave->[0]->{'path_myddir'}/test"); rmtree("$slave->[1]->{'path_myddir'}"); mkpath("$slave->[1]->{'path_myddir'}/mysql"); # Need to create subdir?! mkpath("$slave->[1]->{'path_myddir'}/mysql"); mkpath("$slave->[1]->{'path_myddir'}/test"); rmtree("$slave->[2]->{'path_myddir'}"); mkpath("$slave->[2]->{'path_myddir'}/mysql"); # Need to create subdir?! mkpath("$slave->[2]->{'path_myddir'}/mysql"); mkpath("$slave->[2]->{'path_myddir'}/test"); $opt_wait_for_master= $opt_sleep_time_for_first_master; $opt_wait_for_slave= $opt_sleep_time_for_first_slave; } # FIXME sub sleep_until_file_created ($$) { my $pidfile= shift; my $timeout= shift; my $loop= $timeout * 2; while ( $loop-- ) { if ( -r $pidfile ) { return; } mtr_debug("Sleep for 1 second waiting for creation of $pidfile"); sleep(1); } if ( ! -r $pidfile ) { mtr_error("No $pidfile was created"); } } Loading Loading @@ -1251,11 +1254,11 @@ sub run_suite () { mtr_print_thick_line(); mtr_report("Finding Tests in $suite suite"); mtr_report("Finding Tests in the '$suite' suite"); my $tests= collect_test_cases($suite); mtr_report("Starting Tests in $suite suite"); mtr_report("Starting Tests in the '$suite' suite"); mtr_print_header(); Loading Loading @@ -1412,6 +1415,8 @@ sub run_testcase ($) { # the preparation. # ---------------------------------------------------------------------- $ENV{'TZ'}= $tinfo->{'timezone'}; mtr_report_test_name($tinfo); mtr_tofile($master->[0]->{'path_myerr'},"CURRENT_TEST: $tname\n"); Loading Loading @@ -1778,6 +1783,7 @@ sub mysqld_arguments ($$$$$) { } # FIXME strange,..... # FIXME MYSQL_MYPORT is not set anythere?! if ( $opt_local_master ) { mtr_add_arg($args, "%s--host=127.0.0.1", $prefix); Loading Loading @@ -1888,8 +1894,7 @@ sub mysqld_start ($$$$) { $master->[$idx]->{'path_myerr'}, "") ) { sleep_until_file_created($master->[$idx]->{'path_mypid'}, $opt_wait_for_master); $opt_wait_for_master= $opt_sleep_time_for_second_master; $master->[$idx]->{'start_timeout'}); return $pid; } } Loading @@ -1901,8 +1906,7 @@ sub mysqld_start ($$$$) { $slave->[$idx]->{'path_myerr'}, "") ) { sleep_until_file_created($slave->[$idx]->{'path_mypid'}, $opt_wait_for_slave); $opt_wait_for_slave= $opt_sleep_time_for_second_slave; $master->[$idx]->{'start_timeout'}); return $pid; } } Loading Loading @@ -1970,7 +1974,6 @@ sub run_mysqltest ($$) { my $tinfo= shift; my $master_opts= shift; # FIXME set where???? my $cmdline_mysqldump= "$exe_mysqldump --no-defaults -uroot " . "--socket=$master->[0]->{'path_mysock'} --password="; if ( $opt_debug ) Loading @@ -1992,6 +1995,9 @@ sub run_mysqltest ($$) { "$exe_mysql --host=localhost --port=$master->[0]->{'path_myport'} " . "--socket=$master->[0]->{'path_mysock'} --user=root --password="; # FIXME really needing a PATH??? # $ENV{'PATH'}= "/bin:/usr/bin:/usr/local/bin:/usr/bsd:/usr/X11R6/bin:/usr/openwin/bin:/usr/bin/X11:$ENV{'PATH'}"; $ENV{'MYSQL'}= $exe_mysql; $ENV{'MYSQL_DUMP'}= $cmdline_mysqldump; $ENV{'MYSQL_BINLOG'}= $exe_mysqlbinlog; Loading Loading
mysql-test/lib/mtr_io.pl +61 −2 Original line number Diff line number Diff line Loading @@ -35,13 +35,72 @@ sub mtr_get_opts_from_file ($) { while ( <FILE> ) { chomp; s/\$MYSQL_TEST_DIR/$::glob_mysql_test_dir/g; push(@args, split(' ', $_)); # --set-variable=init_connect=set @a='a\\0c' s/^\s+//; # Remove leading space s/\s+$//; # Remove ending space # This is strange, but we need to fill whitespace inside # quotes with something, to remove later. We do this to # be able to split on space. Else, we have trouble with # options like # # --someopt="--insideopt1 --insideopt2" # # But still with this, we are not 100% sure it is right, # we need a shell to do it right. # print STDERR "\n"; # print STDERR "AAA: $_\n"; s/\'([^\'\"]*)\'/unspace($1,"\x0a")/ge; s/\"([^\'\"]*)\"/unspace($1,"\x0b")/ge; s/\'([^\'\"]*)\'/unspace($1,"\x0a")/ge; s/\"([^\'\"]*)\"/unspace($1,"\x0b")/ge; # print STDERR "BBB: $_\n"; # foreach my $arg (/(--?\w.*?)(?=\s+--?\w|$)/) # FIXME ENV vars should be expanded!!!! foreach my $arg (split(/[ \t]+/)) { $arg =~ tr/\x11\x0a\x0b/ \'\"/; # Put back real chars # The outermost quotes has to go $arg =~ s/^([^\'\"]*)\'(.*)\'([^\'\"]*)$/$1$2$3/ or $arg =~ s/^([^\'\"]*)\"(.*)\"([^\'\"]*)$/$1$2$3/; $arg =~ s/\\\\/\\/g; $arg =~ s/\$\{(\w+)\}/envsubst($1)/ge; $arg =~ s/\$(\w+)/envsubst($1)/ge; # print STDERR "ARG: $arg\n"; push(@args, $arg); } } close FILE; return \@args; } sub envsubst { my $string= shift; if ( ! defined $ENV{$string} ) { mtr_error("opt file referense \$$string that is unknown"); } return $ENV{$string}; } sub unspace { my $string= shift; my $quote= shift; $string =~ s/[ \t]/\x11/g; return "$quote$string$quote"; } sub mtr_fromfile ($) { my $file= shift; Loading
mysql-test/lib/mtr_process.pl +59 −20 Original line number Diff line number Diff line Loading @@ -4,7 +4,7 @@ # and is part of the translation of the Bourne shell script with the # same name. use Carp qw(cluck); #use Carp qw(cluck); use strict; use POSIX ":sys_wait_h"; Loading Loading @@ -64,18 +64,6 @@ sub spawn_impl ($$$$$$$) { my $error= shift; my $pid_file= shift; # FIXME # FIXME really needing a PATH??? # $ENV{'PATH'}= "/bin:/usr/bin:/usr/local/bin:/usr/bsd:/usr/X11R6/bin:/usr/openwin/bin:/usr/bin/X11:$ENV{'PATH'}"; $ENV{'TZ'}= "GMT-3"; # for UNIX_TIMESTAMP tests to work $ENV{'LC_COLLATE'}= "C"; $ENV{'MYSQL_TEST_DIR'}= $::glob_mysql_test_dir; $ENV{'MASTER_MYPORT'}= $::opt_master_myport; $ENV{'SLAVE_MYPORT'}= $::opt_slave_myport; # $ENV{'MYSQL_TCP_PORT'}= '@MYSQL_TCP_PORT@'; # FIXME $ENV{'MYSQL_TCP_PORT'}= 3306; $ENV{'MASTER_MYSOCK'}= $::master->[0]->{'path_mysock'}; if ( $::opt_script_debug ) { print STDERR "\n"; Loading @@ -85,17 +73,21 @@ sub spawn_impl ($$$$$$$) { print STDERR "#### ", "STDERR $error\n" if $error; if ( $join ) { print STDERR "#### ", "run"; print STDERR "#### ", "RUN "; } else { print STDERR "#### ", "spawn"; print STDERR "#### ", "SPAWN "; } print STDERR "$path ", join(" ",@$arg_list_t), "\n"; print STDERR "#### ", "-" x 78, "\n"; } my $pid= fork(); if ( ! defined $pid ) { mtr_error("$path ($pid) can't be forked"); } if ( $pid ) { Loading @@ -104,17 +96,22 @@ sub spawn_impl ($$$$$$$) { { # We run a command and wait for the result # FIXME this need to be improved waitpid($pid,0); my $res= waitpid($pid,0); if ( $res == -1 ) { mtr_error("$path ($pid) got lost somehow"); } my $exit_value= $? >> 8; my $signal_num= $? & 127; my $dumped_core= $? & 128; if ( $signal_num ) { mtr_error("spawn got signal $signal_num"); mtr_error("$path ($pid) got signal $signal_num"); } if ( $dumped_core ) { mtr_error("spawn dumped core"); mtr_error("$path ($pid) dumped core"); } return $exit_value; } Loading Loading @@ -326,7 +323,8 @@ sub mtr_stop_mysqld_servers ($$) { mtr_init_args(\$args); mtr_add_arg($args, "--no-defaults"); mtr_add_arg($args, "-uroot"); mtr_add_arg($args, "--user=%s", $::opt_user); mtr_add_arg($args, "--password="); if ( -e $srv->{'sockfile'} ) { mtr_add_arg($args, "--socket=%s", $srv->{'sockfile'}); Loading @@ -336,7 +334,8 @@ sub mtr_stop_mysqld_servers ($$) { mtr_add_arg($args, "--port=%s", $srv->{'port'}); } mtr_add_arg($args, "--connect_timeout=5"); mtr_add_arg($args, "--shutdown_timeout=70"); mtr_add_arg($args, "--shutdown_timeout=20"); mtr_add_arg($args, "--protocol=tcp"); # FIXME new thing, will it help?! mtr_add_arg($args, "shutdown"); # We don't wait for termination of mysqladmin mtr_spawn($::exe_mysqladmin, $args, Loading @@ -361,6 +360,10 @@ sub mtr_stop_mysqld_servers ($$) { { last PIDSOCKFILEREMOVED; } if ( $loop % 20 == 1 ) { mtr_warning("Still processes alive after 10 seconds, retrying for $loop seconds..."); } mtr_debug("Sleep for 1 second waiting for pid and socket file removal"); sleep(1); # One second } Loading Loading @@ -464,4 +467,40 @@ sub stop_reap_all { $SIG{CHLD}= 'DEFAULT'; } ############################################################################## # # Wait for a file to be created # ############################################################################## sub sleep_until_file_created ($$) { my $pidfile= shift; my $timeout= shift; my $loop= $timeout; while ( $loop-- ) { if ( -r $pidfile ) { return; } mtr_debug("Sleep for 1 second waiting for creation of $pidfile"); if ( $loop % 20 == 1 ) { mtr_warning("Waiting for $pidfile to be created, still trying for $loop seconds..."); } sleep(1); } if ( ! -r $pidfile ) { mtr_error("No $pidfile was created"); } } 1;
mysql-test/mysql-test-run.pl +72 −66 Original line number Diff line number Diff line Loading @@ -232,6 +232,8 @@ our $opt_local_master; our $master; # Will be struct in C our $slave; our $opt_master_myport; our $opt_slave_myport; our $opt_ndbcluster_port; our $opt_ndbconnectstring; Loading @@ -248,16 +250,10 @@ our $opt_skip_rpl; our $opt_skip_test; our $opt_sleep; our $opt_ps_protocol; # FIXME all of the sleep time handling needs cleanup our $opt_sleep_time_after_restart= 1; our $opt_sleep_time_for_delete= 10; our $opt_sleep_time_for_first_master= 400; # enough time create innodb tables our $opt_sleep_time_for_second_master= 400; our $opt_sleep_time_for_first_slave= 400; our $opt_sleep_time_for_second_slave= 30; our $opt_socket; Loading @@ -270,7 +266,7 @@ our $opt_strace_client; our $opt_timer; our $opt_user; our $opt_user_test; our $opt_valgrind; Loading Loading @@ -299,6 +295,7 @@ sub main (); sub initial_setup (); sub command_line_setup (); sub executable_setup (); sub environment_setup (); sub kill_and_cleanup (); sub collect_test_cases ($); sub sleep_until_file_created ($$); Loading Loading @@ -332,6 +329,7 @@ sub main () { initial_setup(); command_line_setup(); executable_setup(); environment_setup(); signal_setup(); if ( $opt_gcov ) Loading Loading @@ -449,12 +447,9 @@ sub command_line_setup () { $path_manager_log= "$glob_mysql_test_dir/var/log/manager.log"; $opt_current_test= "$glob_mysql_test_dir/var/log/current_test"; my $opt_master_myport= 9306; my $opt_slave_myport= 9308; $opt_master_myport= 9306; $opt_slave_myport= 9308; $opt_ndbcluster_port= 9350; $opt_sleep_time_for_delete= 10; my $opt_user; # Read the command line # Note: Keep list, and the order, in sync with usage at end of this file Loading Loading @@ -545,6 +540,7 @@ sub command_line_setup () { $master->[0]->{'path_mypid'}= "$glob_mysql_test_dir/var/run/master.pid"; $master->[0]->{'path_mysock'}= "$opt_tmpdir/master.sock"; $master->[0]->{'path_myport'}= $opt_master_myport; $master->[0]->{'start_timeout'}= 400; # enough time create innodb tables $master->[1]->{'path_myddir'}= "$glob_mysql_test_dir/var/master1-data"; $master->[1]->{'path_myerr'}= "$glob_mysql_test_dir/var/log/master1.err"; Loading @@ -552,6 +548,7 @@ sub command_line_setup () { $master->[1]->{'path_mypid'}= "$glob_mysql_test_dir/var/run/master1.pid"; $master->[1]->{'path_mysock'}= "$opt_tmpdir/master1.sock"; $master->[1]->{'path_myport'}= $opt_master_myport + 1; $master->[1]->{'start_timeout'}= 400; # enough time create innodb tables $slave->[0]->{'path_myddir'}= "$glob_mysql_test_dir/var/slave-data"; $slave->[0]->{'path_myerr'}= "$glob_mysql_test_dir/var/log/slave.err"; Loading @@ -559,6 +556,7 @@ sub command_line_setup () { $slave->[0]->{'path_mypid'}= "$glob_mysql_test_dir/var/run/slave.pid"; $slave->[0]->{'path_mysock'}= "$opt_tmpdir/slave.sock"; $slave->[0]->{'path_myport'}= $opt_slave_myport; $slave->[0]->{'start_timeout'}= 400; $slave->[1]->{'path_myddir'}= "$glob_mysql_test_dir/var/slave1-data"; $slave->[1]->{'path_myerr'}= "$glob_mysql_test_dir/var/log/slave1.err"; Loading @@ -566,6 +564,7 @@ sub command_line_setup () { $slave->[1]->{'path_mypid'}= "$glob_mysql_test_dir/var/run/slave1.pid"; $slave->[1]->{'path_mysock'}= "$opt_tmpdir/slave1.sock"; $slave->[1]->{'path_myport'}= $opt_slave_myport + 1; $slave->[1]->{'start_timeout'}= 30; $slave->[2]->{'path_myddir'}= "$glob_mysql_test_dir/var/slave2-data"; $slave->[2]->{'path_myerr'}= "$glob_mysql_test_dir/var/log/slave2.err"; Loading @@ -573,6 +572,7 @@ sub command_line_setup () { $slave->[2]->{'path_mypid'}= "$glob_mysql_test_dir/var/run/slave2.pid"; $slave->[2]->{'path_mysock'}= "$opt_tmpdir/slave2.sock"; $slave->[2]->{'path_myport'}= $opt_slave_myport + 2; $slave->[2]->{'start_timeout'}= 30; # Do sanity checks of command line arguments Loading @@ -594,16 +594,6 @@ sub command_line_setup () { $master->[0]->{'path_mysock'}= $opt_socket; } # -------------------------------------------------------------------------- # Set LD_LIBRARY_PATH if we are using shared libraries # -------------------------------------------------------------------------- $ENV{'LD_LIBRARY_PATH'}= "$glob_basedir/lib:$glob_basedir/libmysql/.libs" . ($ENV{'LD_LIBRARY_PATH'} ? ":$ENV{'LD_LIBRARY_PATH'}" : ""); $ENV{'DYLD_LIBRARY_PATH'}= "$glob_basedir/lib:$glob_basedir/libmysql/.libs" . ($ENV{'DYLD_LIBRARY_PATH'} ? ":$ENV{'DYLD_LIBRARY_PATH'}" : ""); # -------------------------------------------------------------------------- # Look at the command line options and set script flags # -------------------------------------------------------------------------- Loading Loading @@ -741,7 +731,7 @@ sub executable_setup () { } else { mtr_error("Cannot find embedded server 'mysqltest'"); mtr_error("Can't find embedded server 'mysqltest'"); } $path_tests_bindir= "$glob_basedir/libmysqld/examples"; } Loading Loading @@ -831,6 +821,41 @@ sub executable_setup () { } ############################################################################## # # Set environment to be used by childs of this process # ############################################################################## # Note that some env is setup in spawn/run, in "mtr_process.pl" sub environment_setup () { # -------------------------------------------------------------------------- # Set LD_LIBRARY_PATH if we are using shared libraries # -------------------------------------------------------------------------- $ENV{'LD_LIBRARY_PATH'}= "$glob_basedir/lib:$glob_basedir/libmysql/.libs" . ($ENV{'LD_LIBRARY_PATH'} ? ":$ENV{'LD_LIBRARY_PATH'}" : ""); $ENV{'DYLD_LIBRARY_PATH'}= "$glob_basedir/lib:$glob_basedir/libmysql/.libs" . ($ENV{'DYLD_LIBRARY_PATH'} ? ":$ENV{'DYLD_LIBRARY_PATH'}" : ""); # -------------------------------------------------------------------------- # Also command lines in .opt files may contain env vars # -------------------------------------------------------------------------- $ENV{'LC_COLLATE'}= "C"; $ENV{'MYSQL_TEST_DIR'}= $glob_mysql_test_dir; $ENV{'MASTER_MYPORT'}= $opt_master_myport; $ENV{'SLAVE_MYPORT'}= $opt_slave_myport; # $ENV{'MYSQL_TCP_PORT'}= '@MYSQL_TCP_PORT@'; # FIXME $ENV{'MYSQL_TCP_PORT'}= 3306; $ENV{'MASTER_MYSOCK'}= $master->[0]->{'path_mysock'}; } ############################################################################## # # If we get a ^C, we try to clean up before termination Loading Loading @@ -922,6 +947,7 @@ sub collect_test_cases ($) { # ---------------------------------------------------------------------- $tinfo->{'path'}= $path; $tinfo->{'timezone'}= "GMT-3"; # for UNIX_TIMESTAMP tests to work if ( defined mtr_match_prefix($tname,"rpl") ) { Loading Loading @@ -967,7 +993,7 @@ sub collect_test_cases ($) { if ( defined $value ) { $ENV{'TZ'}= $value; # FIXME pass this on somehow.... $tinfo->{'timezone'}= $value; $extra_master_opt= []; $tinfo->{'master_restart'}= 0; last; Loading Loading @@ -1071,6 +1097,7 @@ sub kill_and_cleanup () { # leftovers from previous runs. mtr_report("Killing Possible Leftover Processes"); mkpath("$glob_mysql_test_dir/var/log"); # Needed for mysqladmin log mtr_kill_leftovers(); } Loading @@ -1092,52 +1119,28 @@ sub kill_and_cleanup () { mkpath("$glob_mysql_test_dir/var/tmp"); mkpath($opt_tmpdir); # FIXME do we really need to create these all, or are they # created for us when tables are created? rmtree("$master->[0]->{'path_myddir'}"); mkpath("$master->[0]->{'path_myddir'}/mysql"); # Need to create subdir?! mkpath("$master->[0]->{'path_myddir'}/mysql"); mkpath("$master->[0]->{'path_myddir'}/test"); rmtree("$master->[1]->{'path_myddir'}"); mkpath("$master->[1]->{'path_myddir'}/mysql"); # Need to create subdir?! mkpath("$master->[1]->{'path_myddir'}/mysql"); mkpath("$master->[1]->{'path_myddir'}/test"); rmtree("$slave->[0]->{'path_myddir'}"); mkpath("$slave->[0]->{'path_myddir'}/mysql"); # Need to create subdir?! mkpath("$slave->[0]->{'path_myddir'}/mysql"); mkpath("$slave->[0]->{'path_myddir'}/test"); rmtree("$slave->[1]->{'path_myddir'}"); mkpath("$slave->[1]->{'path_myddir'}/mysql"); # Need to create subdir?! mkpath("$slave->[1]->{'path_myddir'}/mysql"); mkpath("$slave->[1]->{'path_myddir'}/test"); rmtree("$slave->[2]->{'path_myddir'}"); mkpath("$slave->[2]->{'path_myddir'}/mysql"); # Need to create subdir?! mkpath("$slave->[2]->{'path_myddir'}/mysql"); mkpath("$slave->[2]->{'path_myddir'}/test"); $opt_wait_for_master= $opt_sleep_time_for_first_master; $opt_wait_for_slave= $opt_sleep_time_for_first_slave; } # FIXME sub sleep_until_file_created ($$) { my $pidfile= shift; my $timeout= shift; my $loop= $timeout * 2; while ( $loop-- ) { if ( -r $pidfile ) { return; } mtr_debug("Sleep for 1 second waiting for creation of $pidfile"); sleep(1); } if ( ! -r $pidfile ) { mtr_error("No $pidfile was created"); } } Loading Loading @@ -1251,11 +1254,11 @@ sub run_suite () { mtr_print_thick_line(); mtr_report("Finding Tests in $suite suite"); mtr_report("Finding Tests in the '$suite' suite"); my $tests= collect_test_cases($suite); mtr_report("Starting Tests in $suite suite"); mtr_report("Starting Tests in the '$suite' suite"); mtr_print_header(); Loading Loading @@ -1412,6 +1415,8 @@ sub run_testcase ($) { # the preparation. # ---------------------------------------------------------------------- $ENV{'TZ'}= $tinfo->{'timezone'}; mtr_report_test_name($tinfo); mtr_tofile($master->[0]->{'path_myerr'},"CURRENT_TEST: $tname\n"); Loading Loading @@ -1778,6 +1783,7 @@ sub mysqld_arguments ($$$$$) { } # FIXME strange,..... # FIXME MYSQL_MYPORT is not set anythere?! if ( $opt_local_master ) { mtr_add_arg($args, "%s--host=127.0.0.1", $prefix); Loading Loading @@ -1888,8 +1894,7 @@ sub mysqld_start ($$$$) { $master->[$idx]->{'path_myerr'}, "") ) { sleep_until_file_created($master->[$idx]->{'path_mypid'}, $opt_wait_for_master); $opt_wait_for_master= $opt_sleep_time_for_second_master; $master->[$idx]->{'start_timeout'}); return $pid; } } Loading @@ -1901,8 +1906,7 @@ sub mysqld_start ($$$$) { $slave->[$idx]->{'path_myerr'}, "") ) { sleep_until_file_created($slave->[$idx]->{'path_mypid'}, $opt_wait_for_slave); $opt_wait_for_slave= $opt_sleep_time_for_second_slave; $master->[$idx]->{'start_timeout'}); return $pid; } } Loading Loading @@ -1970,7 +1974,6 @@ sub run_mysqltest ($$) { my $tinfo= shift; my $master_opts= shift; # FIXME set where???? my $cmdline_mysqldump= "$exe_mysqldump --no-defaults -uroot " . "--socket=$master->[0]->{'path_mysock'} --password="; if ( $opt_debug ) Loading @@ -1992,6 +1995,9 @@ sub run_mysqltest ($$) { "$exe_mysql --host=localhost --port=$master->[0]->{'path_myport'} " . "--socket=$master->[0]->{'path_mysock'} --user=root --password="; # FIXME really needing a PATH??? # $ENV{'PATH'}= "/bin:/usr/bin:/usr/local/bin:/usr/bsd:/usr/X11R6/bin:/usr/openwin/bin:/usr/bin/X11:$ENV{'PATH'}"; $ENV{'MYSQL'}= $exe_mysql; $ENV{'MYSQL_DUMP'}= $cmdline_mysqldump; $ENV{'MYSQL_BINLOG'}= $exe_mysqlbinlog; Loading