diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index 3861a81fa5e..b0158043e92 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -256,7 +256,7 @@ our $opt_result_ext; our $opt_skip; our $opt_skip_rpl; -our $use_slaves; +our $max_slave_num= 0; our $use_innodb; our $opt_skip_test; our $opt_skip_im; @@ -427,7 +427,13 @@ sub main () { { $need_ndbcluster||= $test->{ndb_test}; $need_im||= $test->{component_id} eq 'im'; - $use_slaves||= $test->{slave_num}; + + # Count max number of slaves used by a test case + if ( $test->{slave_num} > $max_slave_num) + { + $max_slave_num= $test->{slave_num}; + mtr_error("Too many slaves") if $max_slave_num > 3; + } $use_innodb||= $test->{'innodb_test'}; } $opt_skip_ndbcluster= $opt_skip_ndbcluster_slave= 1 @@ -1122,11 +1128,9 @@ sub snapshot_setup () { $master->[0]->{'path_myddir'}, $master->[1]->{'path_myddir'}); - if ($use_slaves) + for (my $idx= 0; $idx < $max_slave_num; $idx++) { - push @data_dir_lst, ($slave->[0]->{'path_myddir'}, - $slave->[1]->{'path_myddir'}, - $slave->[2]->{'path_myddir'}); + push(@data_dir_lst, $slave->[$idx]->{'path_myddir'}); } unless ($opt_skip_im) @@ -2260,11 +2264,10 @@ sub mysql_install_db () { # FIXME check if testcase really is using second master copy_install_db('master', $master->[1]->{'path_myddir'}); - if ( $use_slaves ) + # Install the number of slave databses needed + for (my $idx= 0; $idx < $max_slave_num; $idx++) { - install_db('slave1', $slave->[0]->{'path_myddir'}); - install_db('slave2', $slave->[1]->{'path_myddir'}); - install_db('slave3', $slave->[2]->{'path_myddir'}); + copy_install_db("slave".($idx+1), $slave->[$idx]->{'path_myddir'}); } if ( ! $opt_skip_im ) @@ -2275,7 +2278,7 @@ sub mysql_install_db () { my $cluster_started_ok= 1; # Assume it can be started if (ndbcluster_start_install($clusters->[0]) || - $use_slaves && ndbcluster_start_install($clusters->[1])) + $max_slave_num && ndbcluster_start_install($clusters->[1])) { mtr_warning("Failed to start install of cluster"); $cluster_started_ok= 0; @@ -2495,6 +2498,28 @@ sub im_prepare_data_dir($) { } } + + +# +# Restore snapshot of the installed slave databases +# if the snapshot exists +# +sub restore_slave_databases ($) { + my ($num_slaves)= @_; + + if ( -d $path_snapshot) + { + for (my $idx= 0; $idx < $num_slaves; $idx++) + { + my $data_dir= $slave->[$idx]->{'path_myddir'}; + my $name= basename($data_dir); + rmtree($data_dir); + mtr_copy_dir("$path_snapshot/$name", $data_dir); + } + } +} + + sub run_testcase_check_skip_test($) { my ($tinfo)= @_; @@ -2602,7 +2627,6 @@ sub run_testcase ($) { { run_testcase_stop_servers($tinfo, $master_restart, $slave_restart); } - my $died= mtr_record_dead_children(); if ($died or $master_restart or $slave_restart) { @@ -3629,6 +3653,8 @@ sub run_testcase_start_servers($) { { mtr_tofile($slave->[0]->{'path_myerr'},"CURRENT_TEST: $tname\n"); + restore_slave_databases($tinfo->{'slave_num'}); + do_before_start_slave($tname,$tinfo->{'slave_sh'}); if ( ! $opt_skip_ndbcluster_slave and