From ec7e213b12d38b2cd0f6c3969b5f06d37ae6714f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Magnus=20Bl=C3=A5udd?= Date: Thu, 24 Sep 2009 16:09:11 +0200 Subject: [PATCH 01/17] Bug#47612 mtr - improving the report for valgrind erorrs - Improve the report produced when a valgrind error is detected --- mysql-test/include/check-warnings.test | 2 +- mysql-test/include/mtr_warnings.sql | 2 +- mysql-test/mysql-test-run.pl | 5 ++++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/mysql-test/include/check-warnings.test b/mysql-test/include/check-warnings.test index 5295dd51a85..da6b7a7e92e 100644 --- a/mysql-test/include/check-warnings.test +++ b/mysql-test/include/check-warnings.test @@ -57,5 +57,5 @@ if (`select @result = 0`){ skip OK; } --enable_query_log -echo ^ Found warnings!!; +echo ^ Found warnings in $log_error!!; exit; diff --git a/mysql-test/include/mtr_warnings.sql b/mysql-test/include/mtr_warnings.sql index b99402c8031..c14d84ef0c8 100644 --- a/mysql-test/include/mtr_warnings.sql +++ b/mysql-test/include/mtr_warnings.sql @@ -207,7 +207,7 @@ BEGIN WHERE suspicious=1; IF @num_warnings > 0 THEN - SELECT file_name, line + SELECT line FROM error_log WHERE suspicious=1; --SELECT * FROM test_suppressions; -- Return 2 -> check failed diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 2a6a069d81c..4260af75fd3 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -1307,6 +1307,9 @@ sub command_line_setup { push(@valgrind_args, @default_valgrind_args) unless @valgrind_args; + # Make valgrind run in quiet mode so it only print errors + push(@valgrind_args, "--quiet" ); + mtr_report("Running valgrind with options \"", join(" ", @valgrind_args), "\""); } @@ -3588,7 +3591,7 @@ sub extract_warning_lines ($) { # qr/^Error:|\[ERROR\]/, qr/^Warning:|mysqld: Warning/, qr/^Error:/, - qr/^==.* at 0x/, + qr/^==\d*==/, # valgrind errors qr/InnoDB: Warning|InnoDB: Error/, qr/^safe_mutex:|allocated at line/, qr/missing DBUG_RETURN/, From 017a0fd20d677294b7af427b10654156512a7c77 Mon Sep 17 00:00:00 2001 From: Vladislav Vaintroub Date: Wed, 30 Sep 2009 00:19:00 +0200 Subject: [PATCH 02/17] Bug #47731 mtr freezes for many seconds when process to be killed has already gone. The problem is that safe_kill_win fails to detect a dead process. OpenProcess() will succeed even after the process died, it will first fail after the last handle to process is closed. To fix the problem, check process status with GetExitCodeProcess() and consider process to be dead if the exit code returned by this routine is not STILL_ALIVE. --- .../lib/My/SafeProcess/safe_kill_win.cc | 28 +++++++++++++++---- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/mysql-test/lib/My/SafeProcess/safe_kill_win.cc b/mysql-test/lib/My/SafeProcess/safe_kill_win.cc index c6256fd92e1..963a02c8099 100755 --- a/mysql-test/lib/My/SafeProcess/safe_kill_win.cc +++ b/mysql-test/lib/My/SafeProcess/safe_kill_win.cc @@ -30,7 +30,7 @@ int main(int argc, const char** argv ) DWORD pid= -1; HANDLE shutdown_event; char safe_process_name[32]= {0}; - int retry_open_event= 100; + int retry_open_event= 2; /* Ignore any signals */ signal(SIGINT, SIG_IGN); signal(SIGBREAK, SIG_IGN); @@ -51,15 +51,31 @@ int main(int argc, const char** argv ) { /* Check if the process is alive, otherwise there is really - no idea to retry the open of the event + no sense to retry the open of the event */ HANDLE process; - if ((process= OpenProcess(SYNCHRONIZE, FALSE, pid)) == NULL) + DWORD exit_code; + process= OpenProcess(SYNCHRONIZE| PROCESS_QUERY_INFORMATION, FALSE, pid); + if (!process) { - fprintf(stderr, "Could not open event or process %d, error: %d\n", - pid, GetLastError()); - exit(3); + /* Already died */ + exit(1); } + + if (!GetExitCodeProcess(process,&exit_code)) + { + fprintf(stderr, "GetExitCodeProcess failed, pid= %d, err= %d\n", + pid, GetLastError()); + exit(1); + } + + if (exit_code != STILL_ACTIVE) + { + /* Already died */ + CloseHandle(process); + exit(2); + } + CloseHandle(process); if (retry_open_event--) From 28b190b2725fbf1b35d3544e96b12fa566f3e95f Mon Sep 17 00:00:00 2001 From: Bjorn Munch Date: Fri, 2 Oct 2009 10:36:38 +0200 Subject: [PATCH 03/17] Bug #47383 let mysql-test-run.pl run innodb tests using the plugin Alt. solution: let the "InnoDB plugin" combinations apply Added some alternative plugin paths (I need to move the code anyway) --- mysql-test/lib/mtr_cases.pm | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/mysql-test/lib/mtr_cases.pm b/mysql-test/lib/mtr_cases.pm index 224babaaf32..76ad5eec4e0 100644 --- a/mysql-test/lib/mtr_cases.pm +++ b/mysql-test/lib/mtr_cases.pm @@ -69,6 +69,10 @@ require "mtr_misc.pl"; my $do_test_reg; my $skip_test_reg; +# Related to adding InnoDB plugin combinations +my $lib_innodb_plugin; +my $do_innodb_plugin; + # If "Quick collect", set to 1 once a test to run has been found. my $some_test_found; @@ -103,6 +107,17 @@ sub collect_test_cases ($$) { $do_test_reg= init_pattern($do_test, "--do-test"); $skip_test_reg= init_pattern($skip_test, "--skip-test"); + $lib_innodb_plugin= + my_find_file($::basedir, + ["storage/innodb_plugin", "storage/innodb_plugin/.libs", + "lib/mysql/plugin", "lib/plugin"], + ["ha_innodb_plugin.dll", "ha_innodb_plugin.so", + "ha_innodb_plugin.sl"], + NOT_REQUIRED); + $do_innodb_plugin= ($::mysql_version_id >= 50100 && + !(IS_WINDOWS && $::opt_embedded_server) && + $lib_innodb_plugin); + foreach my $suite (split(",", $suites)) { push(@$cases, collect_one_suite($suite, $opt_cases)); @@ -484,19 +499,15 @@ sub collect_one_suite($) # ---------------------------------------------------------------------- # Testing InnoDB plugin. # ---------------------------------------------------------------------- - my $lib_innodb_plugin= - mtr_file_exists(::vs_config_dirs('storage/innodb_plugin', 'ha_innodb_plugin.dll'), - "$::basedir/storage/innodb_plugin/.libs/ha_innodb_plugin.so", - "$::basedir/lib/mysql/plugin/ha_innodb_plugin.so", - "$::basedir/lib/mysql/plugin/ha_innodb_plugin.dll"); - if ($::mysql_version_id >= 50100 && !(IS_WINDOWS && $::opt_embedded_server) && - $lib_innodb_plugin) + if ($do_innodb_plugin) { my @new_cases; foreach my $test (@cases) { - next if ($test->{'skip'} || !$test->{'innodb_test'}); + next if (!$test->{'innodb_test'}); + # If skipped due to no builtin innodb, we can still run it with plugin + next if ($test->{'skip'} && $test->{comment} ne "No innodb support"); # Exceptions next if ($test->{'name'} eq 'main.innodb'); # Failed with wrong errno (fk) next if ($test->{'name'} eq 'main.index_merge_innodb'); # Explain diff @@ -516,7 +527,7 @@ sub collect_one_suite($) } else { - $new_test->{$key}= $value; + $new_test->{$key}= $value unless ($key eq 'skip'); } } my $plugin_filename= basename($lib_innodb_plugin); @@ -975,8 +986,11 @@ sub collect_one_test_case { { # innodb is not supported, skip it $tinfo->{'skip'}= 1; + # This comment is checked for running with innodb plugin (see above), + # please keep that in mind if changing the text. $tinfo->{'comment'}= "No innodb support"; - return $tinfo; + # But continue processing if we may run it with innodb plugin + return $tinfo unless $do_innodb_plugin; } } else From 861cf983fc1ad93d72cc972b88fbc856df9fb6f0 Mon Sep 17 00:00:00 2001 From: Bjorn Munch Date: Mon, 5 Oct 2009 13:08:10 +0200 Subject: [PATCH 04/17] Bug #47243 Allow MTR to read max auto setting for --parallel from env. variable In stead of hard-coded 8, read from $MTR_MAX_PARALLEL if set --- mysql-test/mysql-test-run.pl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 114b6c84aa3..b3acebbfc44 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -322,7 +322,8 @@ sub main { for my $limit (2000, 1500, 1000, 500){ $opt_parallel-- if ($sys_info->min_bogomips() < $limit); } - $opt_parallel= 8 if ($opt_parallel > 8); + my $max_par= $ENV{MTR_MAX_PARALLEL} || 8; + $opt_parallel= $max_par if ($opt_parallel > $max_par); $opt_parallel= $num_tests if ($opt_parallel > $num_tests); $opt_parallel= 1 if (IS_WINDOWS and $sys_info->isvm()); $opt_parallel= 1 if ($opt_parallel < 1); From 109ae607fbe3e07d6e208ea82899735406c72776 Mon Sep 17 00:00:00 2001 From: Bjorn Munch Date: Tue, 6 Oct 2009 10:35:35 +0200 Subject: [PATCH 05/17] Bug #46327 MTR2 prevents gcov data accumulation mysqladmin fails on Linux in 6.0 without --character-sets-dir Also added timeout for server shutdown, hope this will solve it --- mysql-test/mysql-test-run.pl | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index b3acebbfc44..478462f8c64 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -738,6 +738,7 @@ sub run_worker ($) { } elsif ($line eq 'BYE'){ mtr_report("Server said BYE"); + stop_all_servers($opt_shutdown_timeout); exit(0); } else { @@ -3435,14 +3436,14 @@ sub run_testcase ($) { my $check_res; if ( restart_forced_by_test() ) { - stop_all_servers(); + stop_all_servers($opt_shutdown_timeout); } elsif ( $opt_check_testcases and $check_res= check_testcase($tinfo, "after")) { if ($check_res == 1) { # Test case had sideeffects, not fatal error, just continue - stop_all_servers(); + stop_all_servers($opt_shutdown_timeout); mtr_report("Resuming tests...\n"); } else { @@ -4083,6 +4084,7 @@ sub mysqld_stop { mtr_init_args(\$args); mtr_add_arg($args, "--no-defaults"); + mtr_add_arg($args, "--character-sets-dir=%s", $mysqld->value('character-sets-dir')); mtr_add_arg($args, "--user=%s", $opt_user); mtr_add_arg($args, "--password="); mtr_add_arg($args, "--port=%d", $mysqld->value('port')); @@ -4286,11 +4288,12 @@ sub mysqld_start ($$) { sub stop_all_servers () { + my $shutdown_timeout = $_[0] or 0; mtr_verbose("Stopping all servers..."); # Kill all started servers - My::SafeProcess::shutdown(0, # shutdown timeout 0 => kill + My::SafeProcess::shutdown($shutdown_timeout, started(all_servers())); # Remove pidfiles From 3141528ea84b95e4a7b4bfe38fb9b0801ac390ce Mon Sep 17 00:00:00 2001 From: Bjorn Munch Date: Tue, 6 Oct 2009 10:42:05 +0200 Subject: [PATCH 06/17] Bug #47811 ./mysql-test-run.pl --valgrind uses old (too narrow) allignment Remove the alignment option, let valgrind use its default --- mysql-test/mysql-test-run.pl | 1 - 1 file changed, 1 deletion(-) diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 478462f8c64..863863cece7 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -5081,7 +5081,6 @@ sub valgrind_arguments { else { mtr_add_arg($args, "--tool=memcheck"); # From >= 2.1.2 needs this option - mtr_add_arg($args, "--alignment=8"); mtr_add_arg($args, "--leak-check=yes"); mtr_add_arg($args, "--num-callers=16"); mtr_add_arg($args, "--suppressions=%s/valgrind.supp", $glob_mysql_test_dir) From 610778dccecac3ee16ad1e497a755946dc4dedb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Magnus=20Bl=C3=A5udd?= Date: Wed, 7 Oct 2009 16:25:36 +0200 Subject: [PATCH 07/17] BUG#47612 - fix review comment --- mysql-test/include/check-warnings.test | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mysql-test/include/check-warnings.test b/mysql-test/include/check-warnings.test index da6b7a7e92e..41b0a98e43b 100644 --- a/mysql-test/include/check-warnings.test +++ b/mysql-test/include/check-warnings.test @@ -57,5 +57,5 @@ if (`select @result = 0`){ skip OK; } --enable_query_log -echo ^ Found warnings in $log_error!!; +echo ^ Found warnings in $log_error; exit; From fabde82dbd0d4281421ee414603640659c9ab8aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Magnus=20Bl=C3=A5udd?= Date: Thu, 8 Oct 2009 10:39:15 +0200 Subject: [PATCH 08/17] Bug#47801 The plugin test fails with the Embedded Server on Windows - Remove the "hack" from mtr.pl that skipped searching for the .dll files when embedded and windows. Now the variables will be preoperly initialized. - Make the tests detect that they can't run on windows+embedded --- mysql-test/include/not_windows_embedded.inc | 11 +++++++++++ mysql-test/mysql-test-run.pl | 2 +- mysql-test/t/plugin.test | 1 + mysql-test/t/plugin_load.test | 1 + 4 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 mysql-test/include/not_windows_embedded.inc diff --git a/mysql-test/include/not_windows_embedded.inc b/mysql-test/include/not_windows_embedded.inc new file mode 100644 index 00000000000..46f5e0ccfce --- /dev/null +++ b/mysql-test/include/not_windows_embedded.inc @@ -0,0 +1,11 @@ +let $is_win = `select convert(@@version_compile_os using latin1) IN ("Win32","Win64","Windows")`; +let $is_embedded = `select version() like '%embedded%'`; +#echo is_win: $is_win; +#echo is_embedded: $is_embedded; +if ($is_win) +{ + if ($is_embedded) + { + skip Not supported with embedded on windows; + } +} diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index b3f1a89bd36..846f307ea97 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -1797,7 +1797,7 @@ sub environment_setup { # -------------------------------------------------------------------------- # Add the path where mysqld will find ha_example.so # -------------------------------------------------------------------------- - if ($mysql_version_id >= 50100 && !(IS_WINDOWS && $opt_embedded_server)) { + if ($mysql_version_id >= 50100) { my $plugin_filename; if (IS_WINDOWS) { diff --git a/mysql-test/t/plugin.test b/mysql-test/t/plugin.test index 7fc62b445c9..788a7b336ef 100644 --- a/mysql-test/t/plugin.test +++ b/mysql-test/t/plugin.test @@ -1,3 +1,4 @@ +--source include/not_windows_embedded.inc --source include/have_example_plugin.inc CREATE TABLE t1(a int) ENGINE=EXAMPLE; diff --git a/mysql-test/t/plugin_load.test b/mysql-test/t/plugin_load.test index 8555247dd71..97b2afbe219 100644 --- a/mysql-test/t/plugin_load.test +++ b/mysql-test/t/plugin_load.test @@ -1,3 +1,4 @@ +--source include/not_windows_embedded.inc --source include/have_example_plugin.inc SELECT @@global.example_enum_var = 'e2'; From 0aca4f0011b8f13b482930f4b8088cdc4c8ab3b6 Mon Sep 17 00:00:00 2001 From: Bjorn Munch Date: Thu, 8 Oct 2009 11:14:42 +0200 Subject: [PATCH 09/17] Bug #46625 Pushbuild2: does not notice test failure in "Innodb Plugin" mode Disallow (and don't use) space in combination names --- mysql-test/lib/mtr_cases.pm | 4 ++-- mysql-test/mysql-test-run.pl | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/mysql-test/lib/mtr_cases.pm b/mysql-test/lib/mtr_cases.pm index 76ad5eec4e0..eabc981d54a 100644 --- a/mysql-test/lib/mtr_cases.pm +++ b/mysql-test/lib/mtr_cases.pm @@ -539,11 +539,11 @@ sub collect_one_suite($) push(@{$new_test->{slave_opt}}, "--plugin_load=innodb=$plugin_filename;innodb_locks=$plugin_filename"); if ($new_test->{combination}) { - $new_test->{combination}.= ' + InnoDB plugin'; + $new_test->{combination}.= '+innodb_plugin'; } else { - $new_test->{combination}= 'InnoDB plugin'; + $new_test->{combination}= 'innodb_plugin'; } push(@new_cases, $new_test); } diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 846f307ea97..46a6d5af4bc 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -3247,6 +3247,12 @@ sub run_testcase ($) { mtr_verbose("Running test:", $tinfo->{name}); + # Allow only alpanumerics pluss _ - + . in combination names + my $combination= $tinfo->{combination}; + if ($combination && $combination !~ /^\w[\w-\.\+]+$/) + { + mtr_error("Combination '$combination' contains illegal characters"); + } # ------------------------------------------------------- # Init variables that can change between each test case # ------------------------------------------------------- From b1b958ffab63f4988dc0a8331acd3f3bf357994f Mon Sep 17 00:00:00 2001 From: Bjorn Munch Date: Thu, 8 Oct 2009 11:23:04 +0200 Subject: [PATCH 10/17] Bug #47716 mtr2 prints obscure error when started with -gdb and xterm is missing Tried to use an expression inside "" Go via variable, and add $exe to the output --- mysql-test/mysql-test-run.pl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 46a6d5af4bc..3f705019ea8 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -4286,7 +4286,8 @@ sub mysqld_start ($$) { $opt_start_timeout, $mysqld->{'proc'})) { - mtr_error("Failed to start mysqld $mysqld->name()"); + my $mname= $mysqld->name(); + mtr_error("Failed to start mysqld $mname with command $exe"); } # Remember options used when starting From 9edd40c87e355890aabec9b7961a992c6ddc9558 Mon Sep 17 00:00:00 2001 From: Bjorn Munch Date: Thu, 8 Oct 2009 11:30:03 +0200 Subject: [PATCH 11/17] Bug #47218 mysqltest ignores "error" command inside if inside loop This was affected by same problem as append_file etc. Added Q_ERROR to special handling, and added small test --- client/mysqltest.cc | 1 + mysql-test/r/mysqltest.result | 1 + mysql-test/t/mysqltest.test | 3 +++ 3 files changed, 5 insertions(+) diff --git a/client/mysqltest.cc b/client/mysqltest.cc index aaa08441e51..00131621bf5 100644 --- a/client/mysqltest.cc +++ b/client/mysqltest.cc @@ -7708,6 +7708,7 @@ int main(int argc, char **argv) if (!ok_to_do) { if (command->type == Q_SOURCE || + command->type == Q_ERROR || command->type == Q_WRITE_FILE || command->type == Q_APPEND_FILE || command->type == Q_PERL) diff --git a/mysql-test/r/mysqltest.result b/mysql-test/r/mysqltest.result index f68413264e4..2e3a9489593 100644 --- a/mysql-test/r/mysqltest.result +++ b/mysql-test/r/mysqltest.result @@ -317,6 +317,7 @@ here is the sourced script outer=2 ifval=0 outer=1 ifval=1 here is the sourced script +ERROR 42S02: Table 'test.nowhere' doesn't exist In loop here is the sourced script diff --git a/mysql-test/t/mysqltest.test b/mysql-test/t/mysqltest.test index 9859e73cfae..bcf33aa8c27 100644 --- a/mysql-test/t/mysqltest.test +++ b/mysql-test/t/mysqltest.test @@ -854,6 +854,7 @@ while ($outer) } # Test source in an if in a while which is false on 1st iteration +# Also test --error in same context let $outer= 2; # Number of outer loops let $ifval= 0; # false 1st time while ($outer) @@ -862,6 +863,8 @@ while ($outer) if ($ifval) { --source $MYSQLTEST_VARDIR/tmp/sourced.inc + --error ER_NO_SUCH_TABLE + SELECT * from nowhere; } dec $outer; inc $ifval; From 79060e12ee42295d7269368a2a2584eecbce8191 Mon Sep 17 00:00:00 2001 From: Bjorn Munch Date: Thu, 8 Oct 2009 14:31:39 +0200 Subject: [PATCH 12/17] Remove obsolete comments after fixing 42408 --- mysql-test/mysql-test-run.pl | 5 ----- 1 file changed, 5 deletions(-) diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 3f705019ea8..1be4a8aabd3 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -3654,11 +3654,6 @@ sub extract_warning_lines ($$) { my @patterns = ( - # The patterns for detection of [Warning] and [ERROR] - # in the server log files have been faulty for a longer period - # and correcting them shows a few additional harmless warnings. - # Thus those patterns are temporarily removed from the list - # of patterns. For more info see BUG#42408 qr/^Warning:|mysqld: Warning|\[Warning\]/, qr/^Error:|\[ERROR\]/, qr/^==\d*==/, # valgrind errors From 052d9bef839adba497fbb2adb0d9e239a49b35f8 Mon Sep 17 00:00:00 2001 From: Bjorn Munch Date: Fri, 9 Oct 2009 15:16:36 +0200 Subject: [PATCH 13/17] avoid regexp warning after 46625 --- mysql-test/mysql-test-run.pl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 1be4a8aabd3..e7785b4ac69 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -3249,7 +3249,7 @@ sub run_testcase ($) { # Allow only alpanumerics pluss _ - + . in combination names my $combination= $tinfo->{combination}; - if ($combination && $combination !~ /^\w[\w-\.\+]+$/) + if ($combination && $combination !~ /^\w[-\w\.\+]+$/) { mtr_error("Combination '$combination' contains illegal characters"); } From 972e938dac7a74c5123267cc9fdcf32511a81419 Mon Sep 17 00:00:00 2001 From: Bjorn Munch Date: Wed, 14 Oct 2009 09:31:34 +0200 Subject: [PATCH 14/17] Bug #46007 Tests fail due to a crash while running 'check testcase before test' Difficult to debug due to lacking report This does not solve the real issue, but extracts server log when it happens Forst commit was incomplete, didn't cover all cases --- mysql-test/mysql-test-run.pl | 52 +++++++++++++++++++++++++++++------- 1 file changed, 42 insertions(+), 10 deletions(-) diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index e7785b4ac69..bb847a7f310 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -3015,7 +3015,8 @@ test case was executed:\n"; # Unknown process returned, most likley a crash, abort everything $tinfo->{comment}= "The server $proc crashed while running ". - "'check testcase $mode test'"; + "'check testcase $mode test'". + get_log_from_proc($proc, $tinfo->{name}); $result= 3; } @@ -3133,7 +3134,8 @@ sub run_on_all($$) else { # Unknown process returned, most likley a crash, abort everything $tinfo->{comment}.= - "The server $proc crashed while running '$run'"; + "The server $proc crashed while running '$run'". + get_log_from_proc($proc, $tinfo->{name}); } # Kill any check processes still running @@ -3533,7 +3535,8 @@ sub run_testcase ($) { { # Server failed, probably crashed $tinfo->{comment}= - "Server $proc failed during test run"; + "Server $proc failed during test run" . + get_log_from_proc($proc, $tinfo->{name}); # ---------------------------------------------------- # It's not mysqltest that has exited, kill it @@ -3588,12 +3591,11 @@ sub run_testcase ($) { } +# Extract server log from after the last occurrence of named test +# Return as an array of lines # -# Perform a rough examination of the servers -# error log and write all lines that look -# suspicious into $error_log.warnings -# -sub extract_warning_lines ($$) { + +sub extract_server_log ($$) { my ($error_log, $tname) = @_; # Open the servers .err log file and read all lines @@ -3645,8 +3647,37 @@ sub extract_warning_lines ($$) { } } } + return @lines; +} - # Write all suspicious lines to $error_log.warnings file +# Get log from server identified from its $proc object, from named test +# Return as a single string +# + +sub get_log_from_proc ($$) { + my ($proc, $name)= @_; + my $srv_log= ""; + + foreach my $mysqld (mysqlds()) { + if ($mysqld->{proc} eq $proc) { + my @srv_lines= extract_server_log($mysqld->value('#log-error'), $name); + $srv_log= "\nServer log from this test:\n" . join ("", @srv_lines); + last; + } + } + return $srv_log; +} + +# Perform a rough examination of the servers +# error log and write all lines that look +# suspicious into $error_log.warnings +# +sub extract_warning_lines ($$) { + my ($error_log, $tname) = @_; + + my @lines= extract_server_log($error_log, $tname); + +# Write all suspicious lines to $error_log.warnings file my $warning_log = "$error_log.warnings"; my $Fwarn = IO::File->new($warning_log, "w") or die("Could not open file '$warning_log' for writing: $!"); @@ -3829,7 +3860,8 @@ sub check_warnings ($) { else { # Unknown process returned, most likley a crash, abort everything $tinfo->{comment}= - "The server $proc crashed while running 'check warnings'"; + "The server $proc crashed while running 'check warnings'". + get_log_from_proc($proc, $tinfo->{name}); $result= 3; } From dcf6aae40745f88c240955b9e252ebee7362f9a4 Mon Sep 17 00:00:00 2001 From: Bjorn Munch Date: Sat, 17 Oct 2009 18:34:56 +0200 Subject: [PATCH 15/17] Bug #48130 Expected failures should not count towards max-test-fail Test batches may be terminated too early Avoid counting exp-fail tests --- mysql-test/lib/mtr_report.pm | 1 + mysql-test/mysql-test-run.pl | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/mysql-test/lib/mtr_report.pm b/mysql-test/lib/mtr_report.pm index f2131b9bd76..937e19111fb 100644 --- a/mysql-test/lib/mtr_report.pm +++ b/mysql-test/lib/mtr_report.pm @@ -146,6 +146,7 @@ sub mtr_report_test ($) { } } $fail = "exp-fail"; + $tinfo->{exp_fail}= 1; last; } } diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index bb847a7f310..40b1f242c34 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -519,7 +519,8 @@ sub run_test_server ($$$) { } } $num_saved_datadir++; - $num_failed_test++ unless $result->{retries}; + $num_failed_test++ unless ($result->{retries} || + $result->{exp_fail}); if ( !$opt_force ) { # Test has failed, force is off From c6533f9eb3945a36608fd90a6f7100028da54c2c Mon Sep 17 00:00:00 2001 From: Bjorn Munch Date: Sun, 18 Oct 2009 13:01:46 +0200 Subject: [PATCH 16/17] Bug #48133 MTR should not dump entire history of mysqld log when failing to start server Don't print entire log, but use extract_server_log() introduced by 46007 --- mysql-test/mysql-test-run.pl | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 40b1f242c34..e59b226825d 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -4702,7 +4702,8 @@ sub start_servers($) { my $logfile= $mysqld->value('#log-error'); if ( defined $logfile and -f $logfile ) { - $tinfo->{logfile}= mtr_fromfile($logfile); + my @srv_lines= extract_server_log($logfile, $tinfo->{name}); + $tinfo->{logfile}= "Server log is:\n" . join ("", @srv_lines); } else { From e6bc01d170b3beb967b235d385aaa05c665bf7f9 Mon Sep 17 00:00:00 2001 From: Bjorn Munch Date: Mon, 19 Oct 2009 15:51:47 +0200 Subject: [PATCH 17/17] Bug #48149 MTR should automatically skip SSL tests if SSL not supported Knowledge of no SSL support is not used Skip tests the same way e.g. innodb tests are Does not refer to have_ssl_communication.inc, will add this when merging to 6.0-codebase --- mysql-test/lib/mtr_cases.pm | 12 ++++++++++++ mysql-test/mysql-test-run.pl | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/mysql-test/lib/mtr_cases.pm b/mysql-test/lib/mtr_cases.pm index eabc981d54a..fee44253ae9 100644 --- a/mysql-test/lib/mtr_cases.pm +++ b/mysql-test/lib/mtr_cases.pm @@ -1036,6 +1036,17 @@ sub collect_one_test_case { } } + if ( $tinfo->{'need_ssl'} ) + { + # This is a test that needs ssl + if ( ! $::opt_ssl_supported ) { + # SSL is not supported, skip it + $tinfo->{'skip'}= 1; + $tinfo->{'comment'}= "No SSL support"; + return $tinfo; + } + } + # ---------------------------------------------------------------------- # Find config file to use if not already selected in .opt file # ---------------------------------------------------------------------- @@ -1116,6 +1127,7 @@ my @tags= ["include/ndb_master-slave.inc", "ndb_test", 1], ["federated.inc", "federated_test", 1], ["include/not_embedded.inc", "not_embedded", 1], + ["include/have_ssl.inc", "need_ssl", 1], ); diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index e59b226825d..21e253cfb95 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -144,7 +144,7 @@ our @opt_extra_mysqld_opt; my $opt_compress; my $opt_ssl; my $opt_skip_ssl; -my $opt_ssl_supported; +our $opt_ssl_supported; my $opt_ps_protocol; my $opt_sp_protocol; my $opt_cursor_protocol;