summaryrefslogtreecommitdiff
path: root/mysql-test
diff options
context:
space:
mode:
authorMagnus Svensson <msvensson@mysql.com>2009-01-27 14:53:58 +0100
committerMagnus Svensson <msvensson@mysql.com>2009-01-27 14:53:58 +0100
commit377d27b6d531a800224ad310ebed87995f208b77 (patch)
treecca0d998bf79dd9612c2a141324a80612a32dde2 /mysql-test
parent3dbc5cf41861324bc0372772af972b6d78dcdc08 (diff)
downloadmariadb-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.test39
-rw-r--r--mysql-test/include/mtr_warnings.sql47
-rwxr-xr-xmysql-test/mysql-test-run.pl81
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);