diff options
author | Magnus Svensson <msvensson@mysql.com> | 2009-01-27 14:53:58 +0100 |
---|---|---|
committer | Magnus Svensson <msvensson@mysql.com> | 2009-01-27 14:53:58 +0100 |
commit | 377d27b6d531a800224ad310ebed87995f208b77 (patch) | |
tree | cca0d998bf79dd9612c2a141324a80612a32dde2 /mysql-test | |
parent | 3dbc5cf41861324bc0372772af972b6d78dcdc08 (diff) | |
download | mariadb-git-377d27b6d531a800224ad310ebed87995f208b77.tar.gz |
WL#4189 mtr.pl v2
- Make a rough filtering of the servers error log and write
all suspicious warnings to $error_log.warnings
The .warnings file is then examined more carefully by check_warnings.test
- This will speed things up, doing all of this in a server running
under valgrind takes far too long time.
Diffstat (limited to 'mysql-test')
-rw-r--r-- | mysql-test/include/check-warnings.test | 39 | ||||
-rw-r--r-- | mysql-test/include/mtr_warnings.sql | 47 | ||||
-rwxr-xr-x | mysql-test/mysql-test-run.pl | 81 |
3 files changed, 92 insertions, 75 deletions
diff --git a/mysql-test/include/check-warnings.test b/mysql-test/include/check-warnings.test index 9fbce4acd3d..154de4be290 100644 --- a/mysql-test/include/check-warnings.test +++ b/mysql-test/include/check-warnings.test @@ -1,8 +1,11 @@ - # # This test is executed once after each test to check the servers # for unexpected warnings found in the servers error log # +# NOTE! mysql-test-run.pl has already done a rough filtering +# of the file and written any suspicious lines +# to $error_log.warnings file +# --disable_query_log # Don't write these queries to binlog @@ -17,41 +20,21 @@ use mtr; create temporary table error_log ( row int auto_increment primary key, - suspicious int default 0, + suspicious int default 1, file_name varchar(255), line varchar(1024) default null ) engine=myisam; # Get the name of servers error log let $log_error= query_get_value(show variables like 'log_error', Value, 1); +let $log_warning= $log_error.warnings; -# Try to load the error log into the temporary table ---error 0,1085 -eval load data infile '$log_error' into table error_log - fields terminated by 'xykls37' (line) +# Load the warnings into a temporary table +eval load data infile '$log_warning' into table error_log + fields terminated by 'xykls37' + ignore 1 lines + (line) set file_name='$log_error'; -if ($mysql_errno) -{ - # The error log was not world readable, this is normally - # caused by a "flush logs" in the test program. mysqld - # will then rename the error log to .err-old and open - # a new error log file that is not world readable. - # chmod the error log file and try to open it again - chmod 0644 $log_error; - eval load data infile '$log_error' into table error_log - fields terminated by 'xykls37' (line) - set file_name='$log_error'; - - # Also load the .err-old file where there might be - # additional warnings - - # Disabled intil Bug#42320 has been fixed - #let $old_log_error = $log_error-old; - #chmod 0644 $old_log_error; - #eval load data infile '$old_log_error' into table error_log - # fields terminated by 'xykls37' (line) - # set file_name='$old_log_error'; -} # Call check_warnings to filter out any warning in # the error_log table diff --git a/mysql-test/include/mtr_warnings.sql b/mysql-test/include/mtr_warnings.sql index c1476457ff4..73287900f3c 100644 --- a/mysql-test/include/mtr_warnings.sql +++ b/mysql-test/include/mtr_warnings.sql @@ -187,42 +187,6 @@ BEGIN SET SQL_LOG_BIN=0; -- - -- Remove all lines belonging to previous tests - -- - SELECT COALESCE(MAX(row),0) INTO @max_row - FROM error_log - WHERE line REGEXP "^CURRENT_TEST:"; - DELETE FROM error_log WHERE row < @max_row; - - -- - -- Mark all lines with certain patterns as suspicious - -- - UPDATE error_log SET suspicious= 1 - WHERE suspicious=0 - AND line REGEXP "^Warning:|mysqld: Warning|\\[Warning\\]"; - UPDATE error_log SET suspicious= 1 - WHERE suspicious=0 - AND line REGEXP "^Error:|\\[ERROR\\]"; - UPDATE error_log SET suspicious= 1 - WHERE suspicious=0 - AND line REGEXP "^==.* at 0x"; - UPDATE error_log SET suspicious= 1 - WHERE suspicious=0 - AND line REGEXP "InnoDB: Warning"; - UPDATE error_log SET suspicious= 1 - WHERE suspicious=0 - AND line REGEXP "^safe_mutex:|allocated at line"; - UPDATE error_log SET suspicious= 1 - WHERE suspicious=0 - AND line REGEXP "missing DBUG_RETURN"; - UPDATE error_log SET suspicious= 1 - WHERE suspicious=0 - AND line REGEXP "Attempting backtrace"; - UPDATE error_log SET suspicious= 1 - WHERE suspicious=0 - AND line REGEXP "Assertion .* failed"; - - -- -- Remove mark from lines that are suppressed by global suppressions -- UPDATE error_log el, global_suppressions gs @@ -237,17 +201,6 @@ BEGIN WHERE el.suspicious=1 AND el.line REGEXP ts.pattern; -- - -- Suppress intentional safemalloc dump warnings - -- i.e inside "Begin/End safemalloc memeory dump" block - -- - SELECT @min_row:=row - FROM error_log WHERE line = "Begin safemalloc memory dump:"; - SELECT @max_row:=row - FROM error_log WHERE line = "End safemalloc memory dump."; - UPDATE error_log SET suspicious=0 - WHERE suspicious=1 AND row > @min_row AND row < @max_row; - - -- -- Get the number of marked lines and return result -- SELECT COUNT(*) INTO @num_warnings FROM error_log diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 841757af251..0d2a7f8c861 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -3356,6 +3356,85 @@ sub run_testcase ($) { } +# +# 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) = @_; + + # Open the servers .err log file and read all lines + # belonging to current tets into @lines + my $Ferr = IO::File->new($error_log) + or mtr_error("Could not open file '$error_log' for reading: $!"); + + my @lines; + while ( my $line = <$Ferr> ) + { + if ( $line =~ /"^CURRENT_TEST:"/ ) + { + # Throw away lines from previous tests + @lines = (); + } + push(@lines, $line); + } + $Ferr = undef; # Close error log file + + # mysql_client_test.test sends a COM_DEBUG packet to the server + # to provoke a SAFEMALLOC leak report, ignore any warnings + # between "Begin/end safemalloc memory dump" + if ( grep(/Begin safemalloc memory dump:/, @lines) > 0) + { + my $discard_lines= 1; + foreach my $line ( @lines ) + { + if ($line =~ /Begin safemalloc memory dump:/){ + $discard_lines = 1; + } elsif ($line =~ /End safemalloc memory dump./){ + $discard_lines = 0; + } + + if ($discard_lines){ + $line = "ignored"; + } + } + } + + # 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: $!"); + print $Fwarn "Suspicious lines from $error_log\n"; + + my @patterns = + ( + qr/^Warning:|mysqld: Warning|\\[Warning\\]/, + qr/^Error:|\\[ERROR\\]/, + qr/^==.* at 0x/, + qr/InnoDB: Warning|InnoDB: Error/, + qr/^safe_mutex:|allocated at line/, + qr/missing DBUG_RETURN/, + qr/Attempting backtrace/, + qr/Assertion .* failed/, + ); + + foreach my $line ( @lines ) + { + foreach my $pat ( @patterns ) + { + if ( $line =~ /$pat/ ) + { + print $Fwarn $line; + last; + } + } + } + $Fwarn = undef; # Close file + +} + + # Run include/check-warnings.test # # RETURN VALUE @@ -3368,6 +3447,8 @@ sub start_check_warnings ($$) { my $name= "warnings-".$mysqld->name(); + extract_warning_lines($mysqld->value('log-error')); + my $args; mtr_init_args(\$args); |