diff options
author | unknown <msvensson@pilot.mysql.com> | 2008-01-07 19:44:48 +0100 |
---|---|---|
committer | unknown <msvensson@pilot.mysql.com> | 2008-01-07 19:44:48 +0100 |
commit | 919fed54d06e050f12d1795cd87c0a4eccfacb09 (patch) | |
tree | 12e394bf0907cfeb811b29810a9ee620a04fdc89 /mysql-test/mysql-test-run.pl | |
parent | ec9967a8a50fc0c39952350fabef6f57087aa0d1 (diff) | |
download | mariadb-git-919fed54d06e050f12d1795cd87c0a4eccfacb09.tar.gz |
Try to dynamically change option, restart if it fails
mysql-test/mysql-test-run.pl:
Try to dynamically change option, restart if it fails.
mysql-test/lib/mtr_cases.pm:
Try to dynamically change option, restart if it fails.
mysql-test/lib/mtr_misc.pl:
Move functions to My::Optiosn
mysql-test/lib/mtr_report.pl:
Add a small dot if test detected restart
mysql-test/lib/My/Options.pm:
New BitKeeper file ``mysql-test/lib/My/Options.pm''
mysql-test/lib/t/Options.t:
New BitKeeper file ``mysql-test/lib/t/Options.t''
Diffstat (limited to 'mysql-test/mysql-test-run.pl')
-rwxr-xr-x | mysql-test/mysql-test-run.pl | 82 |
1 files changed, 42 insertions, 40 deletions
diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index ce0fe4c8a2b..4eda93fb664 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -48,6 +48,7 @@ use File::Copy; use File::Temp qw / tempdir /; use My::SafeProcess; use My::ConfigFactory; +use My::Options; use mtr_cases; our $is_win32_perl= ($^O eq "MSWin32"); # ActiveState Win32 Perl @@ -230,7 +231,7 @@ sub main { # Figure out which tests we are going to run mtr_report("Collecting tests..."); - my $tests= collect_test_cases($opt_suites); + my $tests= collect_test_cases($opt_suites, \@opt_cases); initialize_servers(); @@ -2075,28 +2076,29 @@ sub run_testcase_check_skip_test($) } -sub dynamic_binlog_format_switch { - my ($tinfo, $mysqld)= @_; +sub run_query { + my ($tinfo, $mysqld, $query)= @_; - my $sql= "include/set_binlog_format_".$tinfo->{binlog_format_switch}.".sql"; my $args; mtr_init_args(\$args); mtr_add_arg($args, "--defaults-file=%s", $path_config_file); mtr_add_arg($args, "--defaults-group-suffix=%s", $mysqld->after('mysqld')); + + mtr_add_arg($args, "-e %s", $query); + my $res= My::SafeProcess->run ( - name => "switch binlog format ".$mysqld->name(), + name => "run_query -> ".$mysqld->name(), path => $exe_mysql, args => \$args, - input => $sql, + output => '/dev/null', + error => '/dev/null' ); - if ($res != 0) - { - mtr_error("Failed to switch binlog format"); - } + return $res } + sub do_before_run_mysqltest($) { my $tinfo= shift; @@ -2570,7 +2572,7 @@ sub mysqld_stop { sub mysqld_arguments ($$$) { my $args= shift; my $mysqld= shift; - my $extra_opt= shift; + my $extra_opts= shift; my $prefix= ""; # If mysqltest server arg if ( $opt_embedded_server ) @@ -2585,7 +2587,7 @@ sub mysqld_arguments ($$$) { # to start unless we specify what user to run as, see BUG#30630 my $euid= $>; if (!$is_win32 and $euid == 0 and - (grep(/^--user/, @$extra_opt, @opt_extra_mysqld_opt)) == 0) { + (grep(/^--user/, @$extra_opts)) == 0) { mtr_add_arg($args, "%s--user=root", $prefix); } @@ -2606,8 +2608,7 @@ sub mysqld_arguments ($$$) { } # Check if "extra_opt" contains skip-log-bin - my $skip_binlog= grep(/^(--|--loose-)skip-log-bin/, - @$extra_opt, @opt_extra_mysqld_opt); + my $skip_binlog= grep(/^(--|--loose-)skip-log-bin/, @$extra_opts); if ( $opt_debug ) { @@ -2622,7 +2623,7 @@ sub mysqld_arguments ($$$) { } my $found_skip_core= 0; - foreach my $arg ( @opt_extra_mysqld_opt, @$extra_opt ) + foreach my $arg ( @$extra_opts ) { # Allow --skip-core-file to be set in <testname>-[master|slave].opt file if ($arg eq "--skip-core-file") @@ -2651,9 +2652,12 @@ sub mysqld_arguments ($$$) { } + sub mysqld_start ($$) { my $mysqld= shift; - my $extra_opt= shift; + my $extra_opts= shift; + + mtr_verbose(My::Options::toStr("mysqld_start", @$extra_opts)); my $exe= $exe_mysqld; my $wait_for_pid_file= 1; @@ -2669,7 +2673,7 @@ sub mysqld_start ($$) { valgrind_arguments($args, \$exe); } - mysqld_arguments($args,$mysqld,$extra_opt); + mysqld_arguments($args,$mysqld,$extra_opts); if ( $opt_gdb || $opt_manual_gdb ) { @@ -2738,7 +2742,7 @@ sub mysqld_start ($$) { } # Remember options used when starting - $mysqld->{'started_opts'}= $extra_opt; + $mysqld->{'started_opts'}= $extra_opts; return; } @@ -2758,7 +2762,6 @@ sub stop_all_servers () { } - # Find out if server should be restarted for this test sub server_need_restart { my ($tinfo, $server)= @_; @@ -2811,35 +2814,34 @@ sub server_need_restart { } } - my $is_mysqld= grep ($server eq $_, mysqlds()); + my $is_mysqld= grep ($server eq $_, mysqlds()); if ($is_mysqld) { # Check that running process was started with same options # as the current test requires - my $extra_opt= get_extra_opt($server, $tinfo); + my $extra_opts= get_extra_opts($server, $tinfo); my $started_opts= $server->{'started_opts'}; - if (defined $started_opts and $extra_opt and - ! mtr_same_opts($started_opts, $extra_opt) ) + + if (!My::Options::same($started_opts, $extra_opts) ) { - # TODO Use a list to find all options that can be set dynamically - - # Check if diff is binlog format only - # and the next test has $binlog_format_switch set - my @diff_opts= mtr_diff_opts($started_opts, $extra_opt); - if (@diff_opts == 2 and - $diff_opts[0] =~/^--binlog-format=/ and - $diff_opts[1] =~/^--binlog-format=/ and - defined $tinfo->{binlog_format_switch}) - { - mtr_verbose("Using dynamic switch of binlog format from ", - $diff_opts[0],"to", $diff_opts[1]); - dynamic_binlog_format_switch($tinfo, $server); + mtr_verbose(My::Options::toStr("started_opts", @$started_opts)); + mtr_verbose(My::Options::toStr("extra_opts", @$extra_opts)); + + # Get diff and check if dynamic switch is possible + my @diff_opts= My::Options::diff($started_opts, $extra_opts); + mtr_verbose(My::Options::toStr("diff_opts", @diff_opts)); + + my $query= My::Options::toSQL(@diff_opts); + mtr_verbose("Attempting dynamic switch '$query'"); + if (run_query($tinfo, $server, $query)){ + mtr_verbose("Restart: Dynamic switch failed"); + return 1; } else { mtr_verbose("Restart: running with different options '" . - join(" ", @{$extra_opt}) . "' != '" . + join(" ", @{$extra_opts}) . "' != '" . join(" ", @{$server->{'started_opts'}}) . "'" ); return 1; } @@ -2890,7 +2892,7 @@ sub started { return grep(defined $_, map($_->{proc}, @_)); } sub stopped { return grep(!defined $_, map($_->{proc}, @_)); } -sub get_extra_opt { +sub get_extra_opts { my ($mysqld, $tinfo)= @_; return @@ -3026,8 +3028,8 @@ sub start_servers($) { return 1; } - my $extra_opt= get_extra_opt($mysqld, $tinfo); - mysqld_start($mysqld,$extra_opt); + my $extra_opts= get_extra_opts($mysqld, $tinfo); + mysqld_start($mysqld,$extra_opts); # Save this test case information, so next can examine it $mysqld->{'started_tinfo'}= $tinfo; |