diff options
-rw-r--r-- | mysql-test/lib/mtr_cases.pl | 81 | ||||
-rw-r--r-- | mysql-test/lib/mtr_process.pl | 2 | ||||
-rw-r--r-- | mysql-test/lib/mtr_report.pl | 12 | ||||
-rw-r--r-- | mysql-test/lib/mtr_timer.pl | 29 | ||||
-rwxr-xr-x | mysql-test/mysql-test-run.pl | 78 |
5 files changed, 104 insertions, 98 deletions
diff --git a/mysql-test/lib/mtr_cases.pl b/mysql-test/lib/mtr_cases.pl index 42062b7ba24..88c51728fb2 100644 --- a/mysql-test/lib/mtr_cases.pl +++ b/mysql-test/lib/mtr_cases.pl @@ -59,7 +59,9 @@ sub collect_test_cases ($) { if ( @::opt_cases ) { - foreach my $tname ( @::opt_cases ) { # Run in specified order, no sort + foreach my $tname ( @::opt_cases ) + { + # Run in specified order, no sort my $elem= undef; my $component_id= undef; @@ -85,7 +87,7 @@ sub collect_test_cases ($) { # If target component is known, check that the specified test case # exists. - # + # # Otherwise, try to guess the target component. if ( $component_id ) @@ -127,7 +129,8 @@ sub collect_test_cases ($) { } else { - foreach my $elem ( sort readdir(TESTDIR) ) { + foreach my $elem ( sort readdir(TESTDIR) ) + { my $component_id= undef; my $tname= undef; @@ -144,7 +147,9 @@ sub collect_test_cases ($) { next; } - next if $::opt_do_test and ! defined mtr_match_prefix($elem,$::opt_do_test); + # Skip tests that does not match the --do-test= filter + next if $::opt_do_test and + ! defined mtr_match_prefix($elem,$::opt_do_test); collect_one_test_case($testdir,$resdir,$tname,$elem,$cases,\%disabled, $component_id); @@ -152,7 +157,7 @@ sub collect_test_cases ($) { closedir TESTDIR; } - # Reorder the test cases in an order that wil make them faster to run + # Reorder the test cases in an order that will make them faster to run if ( $::opt_reorder ) { @@ -306,40 +311,6 @@ sub collect_one_test_case($$$$$$$) { $tinfo->{'slave_num'}= 1; } - if ( $::opt_with_ndbcluster or defined mtr_match_substring($tname,"ndb") ) - { - # This is an ndb test or all tests should be run with ndb cluster started - $tinfo->{'ndb_test'}= 1; - if ( ! $::opt_ndbcluster_supported ) - { - # Ndb is not supported, skip them - $tinfo->{'skip'}= 1; - $tinfo->{'comment'}= "No ndbcluster support"; - return; - } - elsif ( $::opt_skip_ndbcluster ) - { - # All ndb test's should be skipped - $tinfo->{'skip'}= 1; - $tinfo->{'comment'}= "No ndbcluster tests(--skip-ndbcluster)"; - return; - } - } - else - { - # This is not a ndb test - $tinfo->{'ndb_test'}= 0; - if ( $::opt_with_ndbcluster_only ) - { - # Only the ndb test should be run, all other should be skipped - $tinfo->{'skip'}= 1; - $tinfo->{'comment'}= "Only ndbcluster tests(--with-ndbcluster-only)"; - return; - } - } - - # FIXME what about embedded_server + ndbcluster, skip ?! - my $master_opt_file= "$testdir/$tname-master.opt"; my $slave_opt_file= "$testdir/$tname-slave.opt"; my $slave_mi_file= "$testdir/$tname.slave-mi"; @@ -550,6 +521,37 @@ sub collect_one_test_case($$$$$$$) { $tinfo->{'comment'}= "Test need debug binaries"; return; } + + if ( $tinfo->{'ndb_test'} ) + { + # This is a NDB test + if ( ! $::glob_ndbcluster_supported ) + { + # Ndb is not supported, skip it + $tinfo->{'skip'}= 1; + $tinfo->{'comment'}= "No ndbcluster support"; + return; + } + elsif ( $::opt_skip_ndbcluster ) + { + # All ndb test's should be skipped + $tinfo->{'skip'}= 1; + $tinfo->{'comment'}= "No ndbcluster tests(--skip-ndbcluster)"; + return; + } + } + else + { + # This is not a ndb test + if ( $::opt_with_ndbcluster_only ) + { + # Only the ndb test should be run, all other should be skipped + $tinfo->{'skip'}= 1; + $tinfo->{'comment'}= "Only ndbcluster tests(--with-ndbcluster-only)"; + return; + } + } + } } @@ -563,6 +565,7 @@ our @tags= ["include/have_binlog_format_statement.inc", "binlog_format", "stmt"], ["include/big_test.inc", "big_test", 1], ["include/have_debug.inc", "need_debug", 1], + ["include/have_ndb.inc", "ndb_test", 1], ["include/have_ndb_extra.inc", "ndb_extra", 1], ["require_manager", "require_manager", 1], ); diff --git a/mysql-test/lib/mtr_process.pl b/mysql-test/lib/mtr_process.pl index 2831c179ea5..affe8278376 100644 --- a/mysql-test/lib/mtr_process.pl +++ b/mysql-test/lib/mtr_process.pl @@ -8,7 +8,6 @@ use Socket; use Errno; use strict; -#use POSIX ":sys_wait_h"; use POSIX 'WNOHANG'; sub mtr_run ($$$$$$;$); @@ -1088,7 +1087,6 @@ sub mtr_kill_processes ($) { sub mtr_exit ($) { my $code= shift; -# cluck("Called mtr_exit()"); mtr_timer_stop_all($::glob_timers); local $SIG{HUP} = 'IGNORE'; # ToDo: Signalling -$$ will only work if we are the process group diff --git a/mysql-test/lib/mtr_report.pl b/mysql-test/lib/mtr_report.pl index b173896d48a..8d7de9d1a4b 100644 --- a/mysql-test/lib/mtr_report.pl +++ b/mysql-test/lib/mtr_report.pl @@ -130,16 +130,11 @@ sub mtr_report_test_failed ($) { my $tinfo= shift; $tinfo->{'result'}= 'MTR_RES_FAILED'; - if ( $tinfo->{'timeout'} ) + if ( defined $tinfo->{'timeout'} ) { print "[ fail ] timeout\n"; return; } - elsif ( $tinfo->{'ndb_test'} and $::cluster->[0]->{'installed_ok'} eq "NO") - { - print "[ fail ] ndbcluster start failure\n"; - return; - } else { print "[ fail ]\n"; @@ -208,8 +203,9 @@ sub mtr_report_stats ($) { else { my $ratio= $tot_passed * 100 / $tot_tests; - printf "Failed $tot_failed/$tot_tests tests, " . - "%.2f\% were successful.\n\n", $ratio; + print "Failed $tot_failed/$tot_tests tests, "; + printf("%.2f", $ratio); + print "\% were successful.\n\n"; print "The log files in var/log may give you some hint\n", "of what went wrong.\n", diff --git a/mysql-test/lib/mtr_timer.pl b/mysql-test/lib/mtr_timer.pl index a85ab8c6122..06374716c62 100644 --- a/mysql-test/lib/mtr_timer.pl +++ b/mysql-test/lib/mtr_timer.pl @@ -4,23 +4,19 @@ # and is part of the translation of the Bourne shell script with the # same name. -use Carp qw(cluck); use Socket; use Errno; use strict; -#use POSIX ":sys_wait_h"; -use POSIX 'WNOHANG'; - sub mtr_init_timers (); sub mtr_timer_start($$$); sub mtr_timer_stop($$); sub mtr_timer_stop_all($); -sub mtr_timer_waitpid($$$); + ############################################################################## # -# Initiate a structure shared by all timers +# Initiate the structure shared by all timers # ############################################################################## @@ -35,17 +31,19 @@ sub mtr_init_timers () { # Start, stop and poll a timer # # As alarm() isn't portable to Windows, we use separate processes to -# implement timers. That is why there is a mtr_timer_waitpid(), as this -# is where we catch a timeout. +# implement timers. # ############################################################################## sub mtr_timer_start($$$) { my ($timers,$name,$duration)= @_; + mtr_verbose("mtr_timer_start: $name, $duration"); + if ( exists $timers->{'timers'}->{$name} ) { # We have an old running timer, kill it + mtr_verbose("There is an old timer running"); mtr_timer_stop($timers,$name); } @@ -57,7 +55,7 @@ sub mtr_timer_start($$$) { { if ( $! == $!{EAGAIN} ) # See "perldoc Errno" { - mtr_debug("Got EAGAIN from fork(), sleep 1 second and redo"); + mtr_warning("Got EAGAIN from fork(), sleep 1 second and redo"); sleep(1); redo FORK; } @@ -70,6 +68,7 @@ sub mtr_timer_start($$$) { if ( $tpid ) { # Parent, record the information + mtr_verbose("timer parent, record info($name, $tpid, $duration)"); $timers->{'timers'}->{$name}->{'pid'}= $tpid; $timers->{'timers'}->{$name}->{'duration'}= $duration; $timers->{'pids'}->{$tpid}= $name; @@ -85,6 +84,7 @@ sub mtr_timer_start($$$) { $SIG{INT}= 'DEFAULT'; $0= "mtr_timer(timers,$name,$duration)"; + mtr_verbose("timer child $name, sleep $duration"); sleep($duration); exit(0); } @@ -95,9 +95,12 @@ sub mtr_timer_start($$$) { sub mtr_timer_stop ($$) { my ($timers,$name)= @_; + mtr_verbose("mtr_timer_stop: $name"); + if ( exists $timers->{'timers'}->{$name} ) { my $tpid= $timers->{'timers'}->{$name}->{'pid'}; + mtr_verbose("Stopping timer with pid $tpid"); # FIXME as Cygwin reuses pids fast, maybe check that is # the expected process somehow?! @@ -114,7 +117,7 @@ sub mtr_timer_stop ($$) { } else { - mtr_debug("Asked to stop timer \"$name\" not started"); + mtr_error("Asked to stop timer \"$name\" not started"); return 0; } } @@ -136,10 +139,8 @@ sub mtr_timer_timeout ($$) { return "" unless exists $timers->{'pids'}->{$pid}; - # We got a timeout - my $name= $timers->{'pids'}->{$pid}; - mtr_timer_stop($timers, $timers->{'timers'}->{$name}); - return $name; + # We got a timeout, return the name ot the timer + return $timers->{'pids'}->{$pid}; } 1; diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 35782733b20..daa5b8aca96 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -65,6 +65,7 @@ use IO::Socket; use IO::Socket::INET; use Data::Dumper; use strict; +use warnings; use diagnostics; our $glob_win32_perl= ($^O eq "MSWin32"); # ActiveState Win32 Perl @@ -277,7 +278,7 @@ our $opt_skip_ndbcluster= 0; our $opt_skip_ndbcluster_slave= 0; our $opt_with_ndbcluster= 0; our $opt_with_ndbcluster_only= 0; -our $opt_ndbcluster_supported= 0; +our $glob_ndbcluster_supported= 0; our $opt_ndb_extra_test= 0; our $opt_skip_master_binlog= 0; our $opt_skip_slave_binlog= 0; @@ -391,6 +392,8 @@ sub main () { my ($need_ndbcluster,$need_im); foreach my $test (@$tests) { + next if $test->{skip}; + $need_ndbcluster||= $test->{ndb_test}; $need_im||= $test->{component_id} eq 'im'; @@ -570,10 +573,10 @@ sub command_line_setup () { 'compress' => \$opt_compress, 'bench' => \$opt_bench, 'small-bench' => \$opt_small_bench, + 'with-ndbcluster' => \$opt_with_ndbcluster, # Control what test suites or cases to run 'force' => \$opt_force, - 'with-ndbcluster' => \$opt_with_ndbcluster, 'with-ndbcluster-only' => \$opt_with_ndbcluster_only, 'skip-ndbcluster|skip-ndb' => \$opt_skip_ndbcluster, 'skip-ndbcluster-slave|skip-ndb-slave' @@ -844,9 +847,9 @@ sub command_line_setup () { # -------------------------------------------------------------------------- # Ndb cluster flags # -------------------------------------------------------------------------- - if ( $opt_with_ndbcluster and $opt_skip_ndbcluster) + if ( $opt_with_ndbcluster and !$opt_bench) { - mtr_error("Can't specify both --with-ndbcluster and --skip-ndbcluster"); + mtr_error("Can only use --with-ndbcluster togheter with --bench"); } if ( $opt_ndbconnectstring ) @@ -1483,7 +1486,7 @@ sub environment_setup () { # -------------------------------------------------------------------------- # Add the path where libndbclient can be found # -------------------------------------------------------------------------- - if ( $opt_ndbcluster_supported ) + if ( $glob_ndbcluster_supported ) { push(@ld_library_paths, "$glob_basedir/storage/ndb/src/.libs"); } @@ -1868,6 +1871,8 @@ sub cleanup_stale_files () { rmtree(readlink($opt_vardir)); # Remove the entire "var" dir rmtree("$opt_vardir/"); + # Remove the "var" symlink + unlink($opt_vardir); } else { @@ -2040,7 +2045,7 @@ sub check_ndbcluster_support ($) { $opt_skip_ndbcluster_slave= 1; return; } - $opt_ndbcluster_supported= 1; + $glob_ndbcluster_supported= 1; mtr_report("Using ndbcluster when necessary, mysqld supports it"); if ( $mysql_version_id < 50100 ) @@ -2057,11 +2062,6 @@ sub check_ndbcluster_support ($) { sub ndbcluster_start_install ($) { my $cluster= shift; - if ( $opt_skip_ndbcluster or $glob_use_running_ndbcluster ) - { - return 0; - } - mtr_report("Installing $cluster->{'name'} Cluster"); mkdir($cluster->{'data_dir'}); @@ -2475,11 +2475,24 @@ sub mysql_install_db () { my $cluster_started_ok= 1; # Assume it can be started - if (ndbcluster_start_install($clusters->[0]) || - ($max_slave_num && !$opt_skip_ndbcluster_slave && - ndbcluster_start_install($clusters->[1]))) + if ($opt_skip_ndbcluster || $glob_use_running_ndbcluster) + { + # Don't install master cluster + } + elsif (ndbcluster_start_install($clusters->[0])) + { + mtr_warning("Failed to start install of $clusters->[0]->{name}"); + $cluster_started_ok= 0; + } + + if ($max_slave_num == 0 || + $opt_skip_ndbcluster_slave || $glob_use_running_ndbcluster_slave) + { + # Don't install slave cluster + } + elsif (ndbcluster_start_install($clusters->[1])) { - mtr_warning("Failed to start install of cluster"); + mtr_warning("Failed to start install of $clusters->[1]->{name}"); $cluster_started_ok= 0; } @@ -2512,9 +2525,6 @@ sub mysql_install_db () { } } - # Stop clusters... - stop_all_servers(); - return 0; } @@ -2753,10 +2763,9 @@ sub run_testcase_check_skip_test($) # If test needs this cluster, check it was installed ok if ( !$cluster->{'installed_ok'} ) { - mtr_tofile($path_timefile, - "Test marked as failed because $cluster->{'name'} " . - "was not installed ok!"); mtr_report_test_name($tinfo); + $tinfo->{comment}= + "Cluster $cluster->{'name'} was not installed ok"; mtr_report_test_failed($tinfo); return 1; } @@ -2879,10 +2888,8 @@ sub run_testcase ($) { # Can't restart a running server that may be in use if ( $glob_use_running_server ) { - $tinfo->{'skip'}= 1; - $tinfo->{'comment'}= "Can't restart a running server"; - mtr_report_test_name($tinfo); + $tinfo->{comment}= "Can't restart a running server"; mtr_report_test_skipped($tinfo); return; } @@ -2906,6 +2913,7 @@ sub run_testcase ($) { # ---------------------------------------------------------------------- if ( $opt_start_and_exit or $opt_start_dirty ) { + mtr_timer_stop_all($glob_timers); mtr_report("\nServers started, exiting"); exit(0); } @@ -2932,16 +2940,16 @@ sub run_testcase ($) { $tinfo->{'timeout'}= 1; # Mark as timeout report_failure_and_restart($tinfo); } + elsif ( $res == 1 ) + { + # Test case failure reported by mysqltest + report_failure_and_restart($tinfo); + } else { - # Test case failed, if in control mysqltest returns 1 - if ( $res != 1 ) - { - mtr_tofile($path_timefile, - "mysqltest returned unexpected code $res, " . - "it has probably crashed"); - } - + # mysqltest failed, probably crashed + $tinfo->{comment}= + "mysqltest returned unexpected code $res, it has probably crashed"; report_failure_and_restart($tinfo); } @@ -3593,14 +3601,14 @@ sub run_testcase_need_master_restart($) mtr_verbose("Restart master: Restart forced with --force-restart"); } elsif ( ! $opt_skip_ndbcluster and - $tinfo->{'ndb_test'} == 0 and + !$tinfo->{'ndb_test'} and $clusters->[0]->{'pid'} != 0 ) { $do_restart= 1; # Restart without cluster mtr_verbose("Restart master: Test does not need cluster"); } elsif ( ! $opt_skip_ndbcluster and - $tinfo->{'ndb_test'} == 1 and + $tinfo->{'ndb_test'} and $clusters->[0]->{'pid'} == 0 ) { $do_restart= 1; # Restart with cluster @@ -4456,6 +4464,7 @@ Options to control what engine/variation to run skip-ssl Dont start server with support for ssl connections bench Run the benchmark suite small-bench Run the benchmarks with --small-tests --small-tables + with-ndbcluster Use cluster as default table type for benchmark Options to control directories to use benchdir=DIR The directory where the benchmark suite is stored @@ -4472,7 +4481,6 @@ Options to control directories to use Options to control what test suites or cases to run force Continue to run the suite after failure - with-ndbcluster Use cluster in all tests with-ndbcluster-only Run only tests that include "ndb" in the filename skip-ndb[cluster] Skip all tests that need cluster skip-ndb[cluster]-slave Skip all tests that need a slave cluster |