From 2a001d9cc44905fb8f1bc67ffbe274413f51faed Mon Sep 17 00:00:00 2001 From: Magnus Svensson Date: Mon, 23 Feb 2009 15:52:23 +0100 Subject: [PATCH 01/13] Bug#43112 mtr.pl --embedded fails to stop cluster processes --- mysql-test/mysql-test-run.pl | 6 ------ 1 file changed, 6 deletions(-) diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index ba426446075..82ed1ff67fc 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -4090,12 +4090,6 @@ sub server_need_restart { return 0; } - if ( $opt_embedded_server ) - { - mtr_verbose_restart($server, "no start or restart for embedded server"); - return 0; - } - if ( $tinfo->{'force_restart'} ) { mtr_verbose_restart($server, "forced in .opt file"); return 1; From 4f7608e759d3e2510fb0e984107b5ba7ea00554f Mon Sep 17 00:00:00 2001 From: Daniel Fischer Date: Tue, 24 Feb 2009 11:42:11 +0100 Subject: [PATCH 02/13] bug#42888: Add collections of test runs to make it both configurable and transparent what kinds of tests we run during integration testing. --- mysql-test/collections/README | 30 +++++++++++++++++++++++++++ mysql-test/collections/default.daily | 0 mysql-test/collections/default.push | 2 ++ mysql-test/collections/default.weekly | 0 4 files changed, 32 insertions(+) create mode 100644 mysql-test/collections/README create mode 100644 mysql-test/collections/default.daily create mode 100644 mysql-test/collections/default.push create mode 100644 mysql-test/collections/default.weekly diff --git a/mysql-test/collections/README b/mysql-test/collections/README new file mode 100644 index 00000000000..9af84646a40 --- /dev/null +++ b/mysql-test/collections/README @@ -0,0 +1,30 @@ +This directory contains collections of test runs that we run during our +integration and release testing. Each file contains zero or more lines, +with one invocation of mysql-test-run.pl on each. These invocations are +written so that, with the assumption that perl is in your search path, +any collection can run as a shell script or a batch file, with the parent +mysql-test directory being the current working directory. + +During integration testing, we choose the collection to run by following +these steps: + +1) We choose the extension to look for, based on these rules: + - If we're running a per-push test, we choose ".push" as the extension. + - If we're running a daily test, we choose ".daily" as the extension. + - If we're running a weekly test, we choose ".weekly" as the extension. + +2) If there is a collection that has the same name as the branch we're + testing plus the extension as determined in step 1, we choose that + collection. + +3) If the branch is unknown or we have removed all characters from it + and still not found a matching collection, we choose the name "default" + plus the extension determined in step 1. If there is no such file, + we give up and don't test anything at all. + +4) If we haven't found a collection yet, we remove the last character from + the branch name and go back to step 2. + +5) The commands from the collection are run line by line via execv() or + similar system calls. They are not run as a shell script. Shell + expansions are not guaranteed to work and most likely won't. diff --git a/mysql-test/collections/default.daily b/mysql-test/collections/default.daily new file mode 100644 index 00000000000..e69de29bb2d diff --git a/mysql-test/collections/default.push b/mysql-test/collections/default.push new file mode 100644 index 00000000000..0f4115c8565 --- /dev/null +++ b/mysql-test/collections/default.push @@ -0,0 +1,2 @@ +perl mysql-test-run.pl --timer --force --comment=n_stm +perl mysql-test-run.pl --timer --force --comment=ps_stm --ps-protocol diff --git a/mysql-test/collections/default.weekly b/mysql-test/collections/default.weekly new file mode 100644 index 00000000000..e69de29bb2d From f0b3c8914fa4fa2b01fb123ba7a8240a73c4548e Mon Sep 17 00:00:00 2001 From: Daniel Fischer Date: Tue, 24 Feb 2009 14:54:04 +0100 Subject: [PATCH 03/13] include collections in dist --- mysql-test/Makefile.am | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mysql-test/Makefile.am b/mysql-test/Makefile.am index 0c4a708dd14..cdb2d9fd598 100644 --- a/mysql-test/Makefile.am +++ b/mysql-test/Makefile.am @@ -33,7 +33,7 @@ endif benchdir_root= $(prefix) testdir = $(benchdir_root)/mysql-test EXTRA_SCRIPTS = mysql-test-run-shell.sh install_test_db.sh valgrind.supp $(PRESCRIPTS) -EXTRA_DIST = $(EXTRA_SCRIPTS) suite +EXTRA_DIST = $(EXTRA_SCRIPTS) suite collections GENSCRIPTS = mysql-test-run-shell mysql-test-run install_test_db mtr PRESCRIPTS = mysql-test-run.pl mysql-stress-test.pl test_SCRIPTS = $(GENSCRIPTS) $(PRESCRIPTS) @@ -80,6 +80,7 @@ install-data-local: $(DESTDIR)$(testdir)/std_data/ndb_backup50_data_be \ $(DESTDIR)$(testdir)/std_data/ndb_backup50_data_le \ $(DESTDIR)$(testdir)/lib \ + $(DESTDIR)$(testdir)/collections \ $(DESTDIR)$(testdir)/std_data/funcs_1 $(INSTALL_DATA) $(srcdir)/README $(DESTDIR)$(testdir) -$(INSTALL_DATA) $(srcdir)/t/*.def $(DESTDIR)$(testdir)/t From 0f33682fa4dbd6f4378d1d537071208ec682f879 Mon Sep 17 00:00:00 2001 From: Bjorn Munch Date: Wed, 25 Feb 2009 10:32:13 +0100 Subject: [PATCH 04/13] Bug #43172 MTR leaves test files in /tmp after check_socket_path_length finds path too long Faulty logic in cleanup Put test file into tmpdir, cleanup by removing tmpdir --- mysql-test/lib/My/Platform.pm | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/mysql-test/lib/My/Platform.pm b/mysql-test/lib/My/Platform.pm index 3dd5c552b10..69ffdfbb4ce 100644 --- a/mysql-test/lib/My/Platform.pm +++ b/mysql-test/lib/My/Platform.pm @@ -113,8 +113,8 @@ sub check_socket_path_length { # Create a tempfile name with same length as "path" my $tmpdir = tempdir( CLEANUP => 0); - my $len = length($path) - length($tmpdir); - my $testfile = $tmpdir . "x" x ($len > 0 ? $len : 1); + my $len = length($path) - length($tmpdir) - 1; + my $testfile = $tmpdir . "/" . "x" x ($len > 0 ? $len : 1); my $sock; eval { $sock= new IO::Socket::UNIX @@ -126,17 +126,15 @@ sub check_socket_path_length { die "Could not create UNIX domain socket: $!" unless defined $sock; - die "UNIX domain socket patch was truncated" + die "UNIX domain socket path was truncated" unless ($testfile eq $sock->hostpath()); $truncated= 0; # Yes, it worked! }; - #print "check_socket_path_length, failed: ", $@, '\n' if ($@); $sock= undef; # Close socket - unlink($testfile); # Remove the physical file - rmdir($tmpdir); # Remove the tempdir + rmtree($tmpdir); # Remove the tempdir and any socket file created return $truncated; } From 72273a6572df2cecc9fc5eb9fc7428420f78d457 Mon Sep 17 00:00:00 2001 From: Bjorn Munch Date: Wed, 25 Feb 2009 11:29:50 +0100 Subject: [PATCH 05/13] fixing bzr tree name --- .bzr-mysql/default.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.bzr-mysql/default.conf b/.bzr-mysql/default.conf index f044f8e62da..63057f42ac6 100644 --- a/.bzr-mysql/default.conf +++ b/.bzr-mysql/default.conf @@ -1,4 +1,4 @@ [MYSQL] post_commit_to = "commits@lists.mysql.com" post_push_to = "commits@lists.mysql.com" -tree_name = "mysql-5.1" +tree_name = "mysql-5.1-mtr" From 0d097d80e2174f7051aadd12f38519693cdb9341 Mon Sep 17 00:00:00 2001 From: Daniel Fischer Date: Wed, 25 Feb 2009 15:00:17 +0100 Subject: [PATCH 06/13] address review comments --- mysql-test/collections/README.experimental | 2 +- mysql-test/lib/mtr_report.pm | 16 ++++++--- mysql-test/mysql-test-run.pl | 38 +++++++++++++--------- 3 files changed, 34 insertions(+), 22 deletions(-) diff --git a/mysql-test/collections/README.experimental b/mysql-test/collections/README.experimental index d06e55f1246..9eee2394423 100644 --- a/mysql-test/collections/README.experimental +++ b/mysql-test/collections/README.experimental @@ -11,7 +11,7 @@ The syntax is as follows: 2) Empty lines and lines starting with a hash (#) are ignored. -3) If any other line contains a black followed by a hash (#), the hash +3) If any other line contains a blank followed by a hash (#), the hash and any subsequent characters are ignored. 4) The full test case name including the suite and execution mode diff --git a/mysql-test/lib/mtr_report.pm b/mysql-test/lib/mtr_report.pm index d1cae6324cb..73401dc4b33 100644 --- a/mysql-test/lib/mtr_report.pm +++ b/mysql-test/lib/mtr_report.pm @@ -109,10 +109,10 @@ sub mtr_report_test ($) { my ($tinfo)= @_; my $test_name = _mtr_report_test_name($tinfo); - my $comment= $tinfo->{'comment'}; - my $logfile= $tinfo->{'logfile'}; - my $warnings= $tinfo->{'warnings'}; - my $result= $tinfo->{'result'}; + my $comment= $tinfo->{'comment'}; + my $logfile= $tinfo->{'logfile'}; + my $warnings= $tinfo->{'warnings'}; + my $result= $tinfo->{'result'}; if ($result eq 'MTR_RES_FAILED'){ @@ -123,14 +123,20 @@ sub mtr_report_test ($) { { # Find out if this test case is an experimental one, so we can treat # the failure as an expected failure instead of a regression. - for my $exp ( @$::opt_experimental ) { + for my $exp ( @$::experimental_test_cases ) { if ( $exp ne $test_name ) { + # if the expression is not the name of this test case, but has + # an asterisk at the end, determine if the characters up to + # but excluding the asterisk are the same if ( $exp ne "" && substr($exp, -1, 1) eq "*" ) { $exp = substr($exp, 0, length($exp) - 1); if ( substr($test_name, 0, length($exp)) ne $exp ) { + # no match, try next entry next; } + # if yes, fall through to set the exp-fail status } else { + # no match, try next entry next; } } diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 8e772279aa3..89a6d89687a 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -170,6 +170,7 @@ my $config; # The currently running config my $current_config_name; # The currently running config file template our $opt_experimental; +our $experimental_test_cases; my $baseport; my $opt_build_thread= $ENV{'MTR_BUILD_THREAD'} || "auto"; @@ -963,24 +964,29 @@ sub command_line_setup { if ( $opt_experimental ) { - if ( open(FILE, "<", $opt_experimental) ) { - mtr_report("Using experimental file: $opt_experimental"); - $opt_experimental = []; - while() { - chomp; - s/( +|^)#.*$//; - s/^ +//; - s/ +$//; - if ( $_ eq "" ) { - next; - } - print " - $_\n"; - push @$opt_experimental, $_; + # read the list of experimental test cases from the file specified on + # the command line + open(FILE, "<", $opt_experimental) or mtr_error("Can't read experimental file: $opt_experimental"); + mtr_report("Using experimental file: $opt_experimental"); + $experimental_test_cases = []; + while() { + chomp; + # remove comments (# foo) at the beginning of the line, or after a + # blank at the end of the line + s/( +|^)#.*$//; + # remove whitespace + s/^ +//; + s/ +$//; + # if nothing left, don't need to remember this line + if ( $_ eq "" ) { + next; } - close FILE; - } else { - mtr_error("Can't read experimental file: $opt_experimental"); + # remember what is left as the name of another test case that should be + # treated as experimental + print " - $_\n"; + push @$experimental_test_cases, $_; } + close FILE; } foreach my $arg ( @ARGV ) From a892ad5c62125a7116c7da0aae7805af8c26ffd9 Mon Sep 17 00:00:00 2001 From: Bjorn Munch Date: Fri, 27 Feb 2009 13:07:01 +0100 Subject: [PATCH 07/13] Bug #43256 Bug#39026 got re-surrected Problems with use of share/mysql dir Explicitly look for "english" language file --- mysql-test/mysql-test-run.pl | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 82ed1ff67fc..5e85cfe5cac 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -932,12 +932,12 @@ sub command_line_setup { } # Look for language files and charsetsdir, use same share - my $path_share= mtr_path_exists("$basedir/share/mysql", - "$basedir/sql/share", - "$basedir/share"); + $path_language= mtr_path_exists("$basedir/share/mysql/english", + "$basedir/sql/share/english", + "$basedir/share/english"); - - $path_language= mtr_path_exists("$path_share/english"); + + my $path_share= dirname($path_language); $path_charsetsdir= mtr_path_exists("$path_share/charsets"); if (using_extern()) From 0314eb7e400ec9aff319d77d3686ba6d775bfcef Mon Sep 17 00:00:00 2001 From: Bjorn Munch Date: Mon, 2 Mar 2009 13:48:35 +0100 Subject: [PATCH 08/13] Bug #40978 Error log gets truncated during testsuite, prevents debugging Error log gets truncated when mysqld is restarted by MTR --- mysql-test/include/check-warnings.test | 2 +- mysql-test/lib/My/ConfigFactory.pm | 8 ++++---- mysql-test/mysql-test-run.pl | 19 ++++++++++++++----- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/mysql-test/include/check-warnings.test b/mysql-test/include/check-warnings.test index 2144957f742..5295dd51a85 100644 --- a/mysql-test/include/check-warnings.test +++ b/mysql-test/include/check-warnings.test @@ -26,7 +26,7 @@ create temporary table error_log ( ) engine=myisam; # Get the name of servers error log -let $log_error= query_get_value(show variables like 'log_error', Value, 1); +let $log_error= $MTR_LOG_ERROR; let $log_warning= $log_error.warnings; # Try tload the warnings into a temporary table, diff --git a/mysql-test/lib/My/ConfigFactory.pm b/mysql-test/lib/My/ConfigFactory.pm index 567a05ac7a1..852f706c858 100644 --- a/mysql-test/lib/My/ConfigFactory.pm +++ b/mysql-test/lib/My/ConfigFactory.pm @@ -116,8 +116,8 @@ sub fix_tmpdir { sub fix_log_error { my ($self, $config, $group_name, $group)= @_; - my $dir= dirname($group->value('datadir')); - return "$dir/mysqld.err"; + my $dir= $self->{ARGS}->{vardir}; + return "$dir/log/$group_name.err"; } sub fix_log { @@ -203,7 +203,7 @@ my @mysqld_rules= { '#host' => \&fix_host }, { 'port' => \&fix_port }, { 'socket' => \&fix_socket }, - { 'log-error' => \&fix_log_error }, + { '#log-error' => \&fix_log_error }, { 'log' => \&fix_log }, { 'log-slow-queries' => \&fix_log_slow_queries }, { '#user' => sub { return shift->{ARGS}->{user} || ""; } }, @@ -389,7 +389,7 @@ sub post_check_embedded_group { my @no_copy = ( - 'log-error', # Embedded server writes stderr to mysqltest's log file + '#log-error', # Embedded server writes stderr to mysqltest's log file 'slave-net-timeout', # Embedded server are not build with replication ); diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 5e85cfe5cac..a254180056b 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -3470,7 +3470,10 @@ sub start_check_warnings ($$) { my $name= "warnings-".$mysqld->name(); - extract_warning_lines($mysqld->value('log-error')); + my $log_error= $mysqld->value('#log-error'); + # To be communicated to the test + $ENV{MTR_LOG_ERROR}= $log_error; + extract_warning_lines($log_error); my $args; mtr_init_args(\$args); @@ -3986,6 +3989,12 @@ sub mysqld_start ($$) { $path_vardir_trace, $mysqld->name()); } + if (IS_WINDOWS) + { + # Trick the server to send output to stderr, with --console + mtr_add_arg($args, "--console"); + } + if ( $opt_gdb || $opt_manual_gdb ) { gdb_arguments(\$args, \$exe, $mysqld->name()); @@ -4018,7 +4027,7 @@ sub mysqld_start ($$) { # Remove the old pidfile if any unlink($mysqld->value('pid-file')); - my $output= $mysqld->value('log-error'); + my $output= $mysqld->value('#log-error'); if ( $opt_valgrind and $opt_debug ) { # When both --valgrind and --debug is selected, send @@ -4319,7 +4328,7 @@ sub start_servers($) { # Already started # Write start of testcase to log file - mark_log($mysqld->value('log-error'), $tinfo); + mark_log($mysqld->value('#log-error'), $tinfo); next; } @@ -4378,7 +4387,7 @@ sub start_servers($) { mkpath($tmpdir) unless -d $tmpdir; # Write start of testcase to log file - mark_log($mysqld->value('log-error'), $tinfo); + mark_log($mysqld->value('#log-error'), $tinfo); # Run -master.sh if ($mysqld->option('#!run-master-sh') and @@ -4429,7 +4438,7 @@ sub start_servers($) { $tinfo->{comment}= "Failed to start ".$mysqld->name(); - my $logfile= $mysqld->value('log-error'); + my $logfile= $mysqld->value('#log-error'); if ( defined $logfile and -f $logfile ) { $tinfo->{logfile}= mtr_fromfile($logfile); From 23b7f4e4b2ff5ae47957656295fa54d75b63abf8 Mon Sep 17 00:00:00 2001 From: Bjorn Munch Date: Wed, 4 Mar 2009 11:34:47 +0100 Subject: [PATCH 09/13] Bug #43132 Pusbbuild 2 host sol10 sparc64 max is not running tests due to port unavailble MTR gives up if wanted port not available Try next range if set to 'auto' Also, use next number for additional threads if explicitly set --- mysql-test/lib/mtr_unique.pm | 2 ++ mysql-test/mysql-test-run.pl | 60 ++++++++++++++++++++---------------- 2 files changed, 35 insertions(+), 27 deletions(-) diff --git a/mysql-test/lib/mtr_unique.pm b/mysql-test/lib/mtr_unique.pm index 2ac172883a2..294a5d7b4d6 100644 --- a/mysql-test/lib/mtr_unique.pm +++ b/mysql-test/lib/mtr_unique.pm @@ -188,6 +188,8 @@ sub mtr_release_unique_id($) { flock SEM, LOCK_UN or warn "can't unlock $file.sem"; close SEM; + + delete $mtr_unique_ids{$$}; } diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index a254180056b..d440994034b 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -171,6 +171,7 @@ my $current_config_name; # The currently running config file template my $baseport; my $opt_build_thread= $ENV{'MTR_BUILD_THREAD'} || "auto"; +my $build_thread= 0; my $opt_record; my $opt_report_features; @@ -665,14 +666,9 @@ sub run_worker ($) { report_option('name',"worker[$thread_num]"); # -------------------------------------------------------------------------- - # Use auto build thread in all but first worker + # Set different ports per thread # -------------------------------------------------------------------------- - set_build_thread_ports($thread_num > 1 ? 'auto' : $opt_build_thread); - - if (check_ports_free()){ - # Some port was not free(which one has already been printed) - mtr_error("Some port(s) was not free") - } + set_build_thread_ports($thread_num); # -------------------------------------------------------------------------- # Turn off verbosity in workers, unless explicitly specified @@ -1268,18 +1264,32 @@ sub command_line_setup { # But a fairly safe range seems to be 5001 - 32767 # sub set_build_thread_ports($) { - my $build_thread= shift || 0; + my $thread= shift || 0; - if ( lc($build_thread) eq 'auto' ) { - #mtr_report("Requesting build thread... "); - $build_thread= mtr_get_unique_id(250, 299); - if ( !defined $build_thread ) { - mtr_error("Could not get a unique build thread id"); + if ( lc($opt_build_thread) eq 'auto' ) { + my $found_free = 0; + $build_thread = 250; # Start attempts from here + while (! $found_free) + { + $build_thread= mtr_get_unique_id($build_thread, 299); + if ( !defined $build_thread ) { + mtr_error("Could not get a unique build thread id"); + } + $found_free= check_ports_free($build_thread); + # If not free, release and try from next number + mtr_release_unique_id($build_thread++) unless $found_free; } - #mtr_report(" - got $build_thread"); + } + else + { + $build_thread = $opt_build_thread + $thread - 1; } $ENV{MTR_BUILD_THREAD}= $build_thread; - $opt_build_thread= $build_thread; + + if (! check_ports_free($build_thread)) { + # Some port was not free(which one has already been printed) + mtr_error("Some port(s) was not free") + } # Calculate baseport $baseport= $build_thread * 10 + 10000; @@ -2433,22 +2443,18 @@ sub kill_leftovers ($) { # Check that all the ports that are going to # be used are free # -sub check_ports_free +sub check_ports_free ($) { - my @ports_to_check; - for ($baseport..$baseport+9){ - push(@ports_to_check, $_); - } - #mtr_report("Checking ports..."); - # print "@ports_to_check\n"; - foreach my $port (@ports_to_check){ - if (mtr_ping_port($port)){ - mtr_report(" - 'localhost:$port' was not free"); - return 1; # One port was not free + my $bthread= shift; + my $portbase = $bthread * 10 + 10000; + for ($portbase..$portbase+9){ + if (mtr_ping_port($_)){ + mtr_report(" - 'localhost:$_' was not free"); + return 0; # One port was not free } } - return 0; # All ports free + return 1; # All ports free } From 7c1ea06e63dbdb3d0864f9d67db00f066682e964 Mon Sep 17 00:00:00 2001 From: Bjorn Munch Date: Wed, 4 Mar 2009 12:12:57 +0100 Subject: [PATCH 10/13] Bug #42986 MTR2 should not allow 0 as a value for --parallel Add sanity check that $opt_parallel > 0 --- mysql-test/mysql-test-run.pl | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index d440994034b..f20bcf5245f 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -1075,6 +1075,14 @@ sub command_line_setup { $opt_shutdown_timeout= 0; # Kill processes instead of nice shutdown } + # -------------------------------------------------------------------------- + # Check parallel value + # -------------------------------------------------------------------------- + if ($opt_parallel < 1) + { + mtr_error("0 or negative parallel value makes no sense, use positive number"); + } + # -------------------------------------------------------------------------- # Record flag # -------------------------------------------------------------------------- From 6dbc7df4639c1d6fa2016793195a4208104c2758 Mon Sep 17 00:00:00 2001 From: Bjorn Munch Date: Wed, 4 Mar 2009 16:41:45 +0100 Subject: [PATCH 11/13] merge 42797 --- mysql-test/mysql-test-run.pl | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index f20bcf5245f..c313063ddf4 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -107,6 +107,17 @@ our $default_vardir; our $opt_vardir; # Path to use for var/ dir my $path_vardir_trace; # unix formatted opt_vardir for trace files my $opt_tmpdir; # Path to use for tmp/ dir +my $opt_tmpdir_pid; + +END { + if (defined $opt_tmpdir_pid and + $opt_tmpdir_pid == $$){ + # Remove the tempdir this process has created + mtr_verbose("Removing tmpdir '$opt_tmpdir"); + rmtree($opt_tmpdir); + } +} + my $path_config_file; # The generated config file, var/my.cnf # Visual Studio produces executables in different sub-directories based on the @@ -1062,8 +1073,11 @@ sub command_line_setup { " creating a shorter one..."); # Create temporary directory in standard location for temporary files - $opt_tmpdir= tempdir( TMPDIR => 1, CLEANUP => 1 ); + $opt_tmpdir= tempdir( TMPDIR => 1, CLEANUP => 0 ); mtr_report(" - using tmpdir: '$opt_tmpdir'\n"); + + # Remember pid that created dir so it's removed by correct process + $opt_tmpdir_pid= $$; } } $opt_tmpdir =~ s,/+$,,; # Remove ending slash if any From 739d5775b1ec61dda7eae5b8478d64adf79698e3 Mon Sep 17 00:00:00 2001 From: Bjorn Munch Date: Mon, 9 Mar 2009 12:59:34 +0100 Subject: [PATCH 12/13] Bug #43148 MTR2 + PB2 should display correct number of failures Retried tests are reported the same as ordinary ones Prepend "retry-" to fail or pass for retried tests --- mysql-test/lib/mtr_report.pm | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/mysql-test/lib/mtr_report.pm b/mysql-test/lib/mtr_report.pm index 73401dc4b33..9c6ab35ee5e 100644 --- a/mysql-test/lib/mtr_report.pm +++ b/mysql-test/lib/mtr_report.pm @@ -113,6 +113,7 @@ sub mtr_report_test ($) { my $logfile= $tinfo->{'logfile'}; my $warnings= $tinfo->{'warnings'}; my $result= $tinfo->{'result'}; + my $retry= $tinfo->{'retries'} ? "retry-" : ""; if ($result eq 'MTR_RES_FAILED'){ @@ -147,7 +148,7 @@ sub mtr_report_test ($) { if ( $warnings ) { - mtr_report("[ $fail ] Found warnings/errors in server log file!"); + mtr_report("[ $retry$fail ] Found warnings/errors in server log file!"); mtr_report(" Test ended at $timest"); mtr_report($warnings); return; @@ -155,14 +156,14 @@ sub mtr_report_test ($) { my $timeout= $tinfo->{'timeout'}; if ( $timeout ) { - mtr_report("[ $fail ] timeout after $timeout seconds"); + mtr_report("[ $retry$fail ] timeout after $timeout seconds"); mtr_report(" Test ended at $timest"); mtr_report("\n$tinfo->{'comment'}"); return; } else { - mtr_report("[ $fail ]\n Test ended at $timest"); + mtr_report("[ $retry$fail ]\n Test ended at $timest"); } if ( $logfile ) @@ -205,7 +206,7 @@ sub mtr_report_test ($) { { my $timer_str= $tinfo->{timer} || ""; $tot_real_time += ($timer_str/1000); - mtr_report("[ pass ] ", sprintf("%5s", $timer_str)); + mtr_report("[ ${retry}pass ] ", sprintf("%5s", $timer_str)); # Show any problems check-testcase found if ( defined $tinfo->{'check'} ) From 8179ed26494806a9cf0218b9d8d6bba0924d28ea Mon Sep 17 00:00:00 2001 From: Bjorn Munch Date: Mon, 9 Mar 2009 14:31:39 +0100 Subject: [PATCH 13/13] Bug #43410 --skip-core-file has no effect if core file size is set Would not prevent mysqld from core dumping Passes --nocore arg to safe_process, which then sets rlimit core to 0 for child --- mysql-test/lib/My/SafeProcess.pm | 2 ++ mysql-test/lib/My/SafeProcess/safe_process.cc | 16 +++++++++++++++- mysql-test/mysql-test-run.pl | 4 ++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/mysql-test/lib/My/SafeProcess.pm b/mysql-test/lib/My/SafeProcess.pm index 0e3aa968052..5ef3286ad8e 100644 --- a/mysql-test/lib/My/SafeProcess.pm +++ b/mysql-test/lib/My/SafeProcess.pm @@ -117,6 +117,7 @@ sub new { my $output = delete($opts{'output'}); my $error = delete($opts{'error'}); my $verbose = delete($opts{'verbose'}); + my $nocore = delete($opts{'nocore'}); my $host = delete($opts{'host'}); my $shutdown = delete($opts{'shutdown'}); my $user_data= delete($opts{'user_data'}); @@ -137,6 +138,7 @@ sub new { push(@safe_args, $safe_script) if defined $safe_script; push(@safe_args, "--verbose") if $verbose > 0; + push(@safe_args, "--nocore") if $nocore; # Point the safe_process at the right parent if running on cygwin push(@safe_args, "--parent-pid=".Cygwin::pid_to_winpid($$)) if IS_CYGWIN; diff --git a/mysql-test/lib/My/SafeProcess/safe_process.cc b/mysql-test/lib/My/SafeProcess/safe_process.cc index 7932f3fd2d6..6ad45a3226e 100644 --- a/mysql-test/lib/My/SafeProcess/safe_process.cc +++ b/mysql-test/lib/My/SafeProcess/safe_process.cc @@ -45,6 +45,7 @@ #include #include +#include #include #include #include @@ -149,7 +150,8 @@ int main(int argc, char* const argv[] ) char* const* child_argv= 0; pid_t own_pid= getpid(); pid_t parent_pid= getppid(); - + bool nocore = false; + /* Install signal handlers */ signal(SIGTERM, handle_signal); signal(SIGINT, handle_signal); @@ -181,6 +183,9 @@ int main(int argc, char* const argv[] ) start++; /* Step past = */ if ((parent_pid= atoi(start)) == 0) die("Invalid value '%s' passed to --parent-id", start); + } else if ( strcmp(arg, "--nocore") == 0 ) + { + nocore = true; // Don't allow the process to dump core } else die("Unknown option: %s", arg); @@ -218,6 +223,15 @@ int main(int argc, char* const argv[] ) // it and any childs(that hasn't changed group themself) setpgid(0, 0); + if (nocore) + { + struct rlimit corelim = { 0, 0 }; + if (setrlimit (RLIMIT_CORE, &corelim) < 0) + { + message("setrlimit failed, errno=%d", errno); + } + } + // Signal that child is ready buf= 37; write(pfd[1], &buf, 1); diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index cc87921c928..47498026e72 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -190,6 +190,8 @@ my $build_thread= 0; my $opt_record; my $opt_report_features; +my $opt_skip_core; + our $opt_check_testcases= 1; my $opt_mark_progress; @@ -4008,6 +4010,7 @@ sub mysqld_arguments ($$$) { mtr_add_arg($args, "%s", $arg); } } + $opt_skip_core = $found_skip_core; if ( !$found_skip_core ) { mtr_add_arg($args, "%s", "--core-file"); @@ -4105,6 +4108,7 @@ sub mysqld_start ($$) { error => $output, append => 1, verbose => $opt_verbose, + nocore => $opt_skip_core, host => undef, shutdown => sub { mysqld_stop($mysqld) }, );