Commit eca91c6f authored by Alexander Nozdrin's avatar Alexander Nozdrin

Automerge from mysql-next-mr.

parents d34e3df8 2f5413eb
...@@ -7724,6 +7724,7 @@ int main(int argc, char **argv) ...@@ -7724,6 +7724,7 @@ int main(int argc, char **argv)
if (!ok_to_do) if (!ok_to_do)
{ {
if (command->type == Q_SOURCE || if (command->type == Q_SOURCE ||
command->type == Q_ERROR ||
command->type == Q_WRITE_FILE || command->type == Q_WRITE_FILE ||
command->type == Q_APPEND_FILE || command->type == Q_APPEND_FILE ||
command->type == Q_PERL) command->type == Q_PERL)
......
...@@ -57,5 +57,5 @@ if (`select @result = 0`){ ...@@ -57,5 +57,5 @@ if (`select @result = 0`){
skip OK; skip OK;
} }
--enable_query_log --enable_query_log
echo ^ Found warnings!!; echo ^ Found warnings in $log_error;
exit; exit;
...@@ -221,7 +221,7 @@ BEGIN ...@@ -221,7 +221,7 @@ BEGIN
WHERE suspicious=1; WHERE suspicious=1;
IF @num_warnings > 0 THEN IF @num_warnings > 0 THEN
SELECT file_name, line SELECT line
FROM error_log WHERE suspicious=1; FROM error_log WHERE suspicious=1;
--SELECT * FROM test_suppressions; --SELECT * FROM test_suppressions;
-- Return 2 -> check failed -- Return 2 -> check failed
......
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;
}
}
...@@ -30,7 +30,7 @@ int main(int argc, const char** argv ) ...@@ -30,7 +30,7 @@ int main(int argc, const char** argv )
DWORD pid= -1; DWORD pid= -1;
HANDLE shutdown_event; HANDLE shutdown_event;
char safe_process_name[32]= {0}; char safe_process_name[32]= {0};
int retry_open_event= 100; int retry_open_event= 2;
/* Ignore any signals */ /* Ignore any signals */
signal(SIGINT, SIG_IGN); signal(SIGINT, SIG_IGN);
signal(SIGBREAK, SIG_IGN); signal(SIGBREAK, SIG_IGN);
...@@ -51,15 +51,31 @@ int main(int argc, const char** argv ) ...@@ -51,15 +51,31 @@ int main(int argc, const char** argv )
{ {
/* /*
Check if the process is alive, otherwise there is really 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; 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", /* Already died */
exit(1);
}
if (!GetExitCodeProcess(process,&exit_code))
{
fprintf(stderr, "GetExitCodeProcess failed, pid= %d, err= %d\n",
pid, GetLastError()); pid, GetLastError());
exit(3); exit(1);
}
if (exit_code != STILL_ACTIVE)
{
/* Already died */
CloseHandle(process);
exit(2);
} }
CloseHandle(process); CloseHandle(process);
if (retry_open_event--) if (retry_open_event--)
......
...@@ -981,6 +981,17 @@ sub collect_one_test_case { ...@@ -981,6 +981,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 <testname>.opt file # Find config file to use if not already selected in <testname>.opt file
# ---------------------------------------------------------------------- # ----------------------------------------------------------------------
...@@ -1061,6 +1072,7 @@ my @tags= ...@@ -1061,6 +1072,7 @@ my @tags=
["include/ndb_master-slave.inc", "ndb_test", 1], ["include/ndb_master-slave.inc", "ndb_test", 1],
["federated.inc", "federated_test", 1], ["federated.inc", "federated_test", 1],
["include/not_embedded.inc", "not_embedded", 1], ["include/not_embedded.inc", "not_embedded", 1],
["include/have_ssl.inc", "need_ssl", 1],
); );
......
...@@ -146,6 +146,7 @@ sub mtr_report_test ($) { ...@@ -146,6 +146,7 @@ sub mtr_report_test ($) {
} }
} }
$fail = "exp-fail"; $fail = "exp-fail";
$tinfo->{exp_fail}= 1;
last; last;
} }
} }
......
...@@ -144,7 +144,7 @@ our @opt_extra_mysqld_opt; ...@@ -144,7 +144,7 @@ our @opt_extra_mysqld_opt;
my $opt_compress; my $opt_compress;
my $opt_ssl; my $opt_ssl;
my $opt_skip_ssl; my $opt_skip_ssl;
my $opt_ssl_supported; our $opt_ssl_supported;
my $opt_ps_protocol; my $opt_ps_protocol;
my $opt_sp_protocol; my $opt_sp_protocol;
my $opt_cursor_protocol; my $opt_cursor_protocol;
...@@ -323,7 +323,8 @@ sub main { ...@@ -323,7 +323,8 @@ sub main {
for my $limit (2000, 1500, 1000, 500){ for my $limit (2000, 1500, 1000, 500){
$opt_parallel-- if ($sys_info->min_bogomips() < $limit); $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= $num_tests if ($opt_parallel > $num_tests);
$opt_parallel= 1 if (IS_WINDOWS and $sys_info->isvm()); $opt_parallel= 1 if (IS_WINDOWS and $sys_info->isvm());
$opt_parallel= 1 if ($opt_parallel < 1); $opt_parallel= 1 if ($opt_parallel < 1);
...@@ -519,7 +520,8 @@ sub run_test_server ($$$) { ...@@ -519,7 +520,8 @@ sub run_test_server ($$$) {
} }
} }
$num_saved_datadir++; $num_saved_datadir++;
$num_failed_test++ unless $result->{retries}; $num_failed_test++ unless ($result->{retries} ||
$result->{exp_fail});
if ( !$opt_force ) { if ( !$opt_force ) {
# Test has failed, force is off # Test has failed, force is off
...@@ -738,6 +740,7 @@ sub run_worker ($) { ...@@ -738,6 +740,7 @@ sub run_worker ($) {
} }
elsif ($line eq 'BYE'){ elsif ($line eq 'BYE'){
mtr_report("Server said BYE"); mtr_report("Server said BYE");
stop_all_servers($opt_shutdown_timeout);
exit(0); exit(0);
} }
else { else {
...@@ -1336,6 +1339,9 @@ sub command_line_setup { ...@@ -1336,6 +1339,9 @@ sub command_line_setup {
push(@valgrind_args, @default_valgrind_args) push(@valgrind_args, @default_valgrind_args)
unless @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 \"", mtr_report("Running valgrind with options \"",
join(" ", @valgrind_args), "\""); join(" ", @valgrind_args), "\"");
} }
...@@ -1793,7 +1799,7 @@ sub environment_setup { ...@@ -1793,7 +1799,7 @@ sub environment_setup {
# -------------------------------------------------------------------------- # --------------------------------------------------------------------------
# Add the path where mysqld will find ha_example.so # 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; my $plugin_filename;
if (IS_WINDOWS) if (IS_WINDOWS)
{ {
...@@ -3019,7 +3025,8 @@ test case was executed:\n"; ...@@ -3019,7 +3025,8 @@ test case was executed:\n";
# Unknown process returned, most likley a crash, abort everything # Unknown process returned, most likley a crash, abort everything
$tinfo->{comment}= $tinfo->{comment}=
"The server $proc crashed while running ". "The server $proc crashed while running ".
"'check testcase $mode test'"; "'check testcase $mode test'".
get_log_from_proc($proc, $tinfo->{name});
$result= 3; $result= 3;
} }
...@@ -3137,7 +3144,8 @@ sub run_on_all($$) ...@@ -3137,7 +3144,8 @@ sub run_on_all($$)
else { else {
# Unknown process returned, most likley a crash, abort everything # Unknown process returned, most likley a crash, abort everything
$tinfo->{comment}.= $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 # Kill any check processes still running
...@@ -3251,6 +3259,12 @@ sub run_testcase ($) { ...@@ -3251,6 +3259,12 @@ sub run_testcase ($) {
mtr_verbose("Running test:", $tinfo->{name}); 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 # Init variables that can change between each test case
# ------------------------------------------------------- # -------------------------------------------------------
...@@ -3443,14 +3457,14 @@ sub run_testcase ($) { ...@@ -3443,14 +3457,14 @@ sub run_testcase ($) {
my $check_res; my $check_res;
if ( restart_forced_by_test() ) if ( restart_forced_by_test() )
{ {
stop_all_servers(); stop_all_servers($opt_shutdown_timeout);
} }
elsif ( $opt_check_testcases and elsif ( $opt_check_testcases and
$check_res= check_testcase($tinfo, "after")) $check_res= check_testcase($tinfo, "after"))
{ {
if ($check_res == 1) { if ($check_res == 1) {
# Test case had sideeffects, not fatal error, just continue # Test case had sideeffects, not fatal error, just continue
stop_all_servers(); stop_all_servers($opt_shutdown_timeout);
mtr_report("Resuming tests...\n"); mtr_report("Resuming tests...\n");
} }
else { else {
...@@ -3531,7 +3545,8 @@ sub run_testcase ($) { ...@@ -3531,7 +3545,8 @@ sub run_testcase ($) {
{ {
# Server failed, probably crashed # Server failed, probably crashed
$tinfo->{comment}= $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 # It's not mysqltest that has exited, kill it
...@@ -3586,12 +3601,11 @@ sub run_testcase ($) { ...@@ -3586,12 +3601,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 sub extract_server_log ($$) {
# suspicious into $error_log.warnings
#
sub extract_warning_lines ($$) {
my ($error_log, $tname) = @_; my ($error_log, $tname) = @_;
# Open the servers .err log file and read all lines # Open the servers .err log file and read all lines
...@@ -3643,8 +3657,37 @@ sub extract_warning_lines ($$) { ...@@ -3643,8 +3657,37 @@ sub extract_warning_lines ($$) {
} }
} }
} }
return @lines;
}
# 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= "";
# Write all suspicious lines to $error_log.warnings file 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 $warning_log = "$error_log.warnings";
my $Fwarn = IO::File->new($warning_log, "w") my $Fwarn = IO::File->new($warning_log, "w")
or die("Could not open file '$warning_log' for writing: $!"); or die("Could not open file '$warning_log' for writing: $!");
...@@ -3652,14 +3695,9 @@ sub extract_warning_lines ($$) { ...@@ -3652,14 +3695,9 @@ sub extract_warning_lines ($$) {
my @patterns = 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/^Warning:|mysqld: Warning|\[Warning\]/,
qr/^Error:|\[ERROR\]/, qr/^Error:|\[ERROR\]/,
qr/^==.* at 0x/, qr/^==\d*==/, # valgrind errors
qr/InnoDB: Warning|InnoDB: Error/, qr/InnoDB: Warning|InnoDB: Error/,
qr/^safe_mutex:|allocated at line/, qr/^safe_mutex:|allocated at line/,
qr/missing DBUG_RETURN/, qr/missing DBUG_RETURN/,
...@@ -3832,7 +3870,8 @@ sub check_warnings ($) { ...@@ -3832,7 +3870,8 @@ sub check_warnings ($) {
else { else {
# Unknown process returned, most likley a crash, abort everything # Unknown process returned, most likley a crash, abort everything
$tinfo->{comment}= $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; $result= 3;
} }
...@@ -4091,6 +4130,7 @@ sub mysqld_stop { ...@@ -4091,6 +4130,7 @@ sub mysqld_stop {
mtr_init_args(\$args); mtr_init_args(\$args);
mtr_add_arg($args, "--no-defaults"); 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, "--user=%s", $opt_user);
mtr_add_arg($args, "--password="); mtr_add_arg($args, "--password=");
mtr_add_arg($args, "--port=%d", $mysqld->value('port')); mtr_add_arg($args, "--port=%d", $mysqld->value('port'));
...@@ -4288,7 +4328,8 @@ sub mysqld_start ($$) { ...@@ -4288,7 +4328,8 @@ sub mysqld_start ($$) {
$opt_start_timeout, $opt_start_timeout,
$mysqld->{'proc'})) $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 # Remember options used when starting
...@@ -4299,11 +4340,12 @@ sub mysqld_start ($$) { ...@@ -4299,11 +4340,12 @@ sub mysqld_start ($$) {
sub stop_all_servers () { sub stop_all_servers () {
my $shutdown_timeout = $_[0] or 0;
mtr_verbose("Stopping all servers..."); mtr_verbose("Stopping all servers...");
# Kill all started servers # Kill all started servers
My::SafeProcess::shutdown(0, # shutdown timeout 0 => kill My::SafeProcess::shutdown($shutdown_timeout,
started(all_servers())); started(all_servers()));
# Remove pidfiles # Remove pidfiles
...@@ -4674,7 +4716,8 @@ sub start_servers($) { ...@@ -4674,7 +4716,8 @@ sub start_servers($) {
my $logfile= $mysqld->value('#log-error'); my $logfile= $mysqld->value('#log-error');
if ( defined $logfile and -f $logfile ) 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 else
{ {
......
...@@ -317,6 +317,7 @@ here is the sourced script ...@@ -317,6 +317,7 @@ here is the sourced script
outer=2 ifval=0 outer=2 ifval=0
outer=1 ifval=1 outer=1 ifval=1
here is the sourced script here is the sourced script
ERROR 42S02: Table 'test.nowhere' doesn't exist
In loop In loop
here is the sourced script here is the sourced script
......
...@@ -854,6 +854,7 @@ while ($outer) ...@@ -854,6 +854,7 @@ while ($outer)
} }
# Test source in an if in a while which is false on 1st iteration # 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 $outer= 2; # Number of outer loops
let $ifval= 0; # false 1st time let $ifval= 0; # false 1st time
while ($outer) while ($outer)
...@@ -862,6 +863,8 @@ while ($outer) ...@@ -862,6 +863,8 @@ while ($outer)
if ($ifval) { if ($ifval) {
--source $MYSQLTEST_VARDIR/tmp/sourced.inc --source $MYSQLTEST_VARDIR/tmp/sourced.inc
--error ER_NO_SUCH_TABLE
SELECT * from nowhere;
} }
dec $outer; dec $outer;
inc $ifval; inc $ifval;
......
--source include/not_windows_embedded.inc
--source include/have_example_plugin.inc --source include/have_example_plugin.inc
CREATE TABLE t1(a int) ENGINE=EXAMPLE; CREATE TABLE t1(a int) ENGINE=EXAMPLE;
......
--source include/not_windows_embedded.inc
--source include/have_example_plugin.inc --source include/have_example_plugin.inc
SELECT @@global.example_enum_var = 'e2'; SELECT @@global.example_enum_var = 'e2';
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment