From 639c9dbc855af79b51d847c24330e6def6556d35 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 21 Apr 2006 09:48:49 -0700 Subject: [PATCH] Bug #19083 ./mysql-test-run.pl starts NDB when it is not needed Now NDB is only initialized and started when the tests that are being run will make use of it. The same thing is also done for the slave databases and the instance manager. After review from Magnus: Only take a snapshot of the data directories that are in use. mysql-test/mysql-test-run.pl: Only initialize (and start) NDB, the instance manager, and the slaves when we have tests that require them. Also, only snapshot the data directories that we are going to use. mysql-test/ndb/ndbcluster.sh: Fix text message that has always annoyed me --- mysql-test/mysql-test-run.pl | 107 ++++++++++++++++++++++------------- mysql-test/ndb/ndbcluster.sh | 4 +- 2 files changed, 71 insertions(+), 40 deletions(-) diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index a045441e046..63bc9115891 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -333,6 +333,7 @@ our @data_dir_lst; sub main (); sub initial_setup (); sub command_line_setup (); +sub snapshot_setup (); sub executable_setup (); sub environment_setup (); sub kill_running_server (); @@ -343,7 +344,7 @@ sub ndbcluster_install (); sub ndbcluster_start ($); sub ndbcluster_stop (); sub run_benchmarks ($); -sub run_tests (); +sub initialize_servers (); sub mysql_install_db (); sub install_db ($$); sub run_testcase ($); @@ -374,7 +375,7 @@ sub main () { command_line_setup(); executable_setup(); - check_ndbcluster_support(); + check_ndbcluster_support(); # We check whether to actually use it later check_ssl_support(); environment_setup(); @@ -389,24 +390,7 @@ sub main () { { gprof_prepare(); } - - if ( ! $glob_use_running_server ) - { - if ( $opt_start_dirty ) - { - kill_running_server(); - } - else - { - kill_and_cleanup(); - mysql_install_db(); - if ( $opt_force ) - { - save_installed_db(); - } - } - } - + if ( $opt_start_dirty ) { if ( ndbcluster_start($opt_with_ndbcluster) ) @@ -424,15 +408,35 @@ sub main () { } elsif ( $opt_bench ) { + initialize_servers(); run_benchmarks(shift); # Shift what? Extra arguments?! } elsif ( $opt_stress ) { + initialize_servers(); run_stress_test() } else { - run_tests(); + # Figure out which tests we are going to run + my $tests= collect_test_cases($opt_suite); + + # Turn off NDB and other similar options if no tests use it + my ($need_ndbcluster,$need_im,$need_slave); + foreach my $test (@$tests) + { + $need_ndbcluster||= $test->{ndb_test}; + $need_im||= $test->{component_id} eq 'im'; + $need_slave||= $test->{slave_num}; + } + $opt_with_ndbcluster= 0 unless $need_ndbcluster; + $opt_skip_im= 1 unless $need_im; + $opt_skip_rpl= 1 unless $need_slave; + + snapshot_setup(); + initialize_servers(); + + run_suite($opt_suite, $tests); } mtr_exit(0); @@ -983,20 +987,29 @@ sub command_line_setup () { $path_mysqltest_log= "$opt_vardir/log/mysqltest.log"; $path_snapshot= "$opt_tmpdir/snapshot_$opt_master_myport/"; +} + +sub snapshot_setup () { # Make a list of all data_dirs @data_dir_lst = ( $master->[0]->{'path_myddir'}, - $master->[1]->{'path_myddir'}, - $slave->[0]->{'path_myddir'}, - $slave->[1]->{'path_myddir'}, - $slave->[2]->{'path_myddir'}); + $master->[1]->{'path_myddir'}); - foreach my $instance (@{$instance_manager->{'instances'}}) + unless ($opt_skip_rpl) { - push(@data_dir_lst, $instance->{'path_datadir'}); + push @data_dir_lst, ($slave->[0]->{'path_myddir'}, + $slave->[1]->{'path_myddir'}, + $slave->[2]->{'path_myddir'}); } + unless ($opt_skip_im) + { + foreach my $instance (@{$instance_manager->{'instances'}}) + { + push(@data_dir_lst, $instance->{'path_datadir'}); + } + } } @@ -1388,7 +1401,7 @@ sub check_ndbcluster_support () { if ($opt_with_ndbcluster) { - mtr_report("Using ndbcluster"); + mtr_report("Using ndbcluster if necessary"); return; } @@ -1404,7 +1417,7 @@ sub check_ndbcluster_support () { $opt_with_ndbcluster= 0; return; } - mtr_report("Using ndbcluster, mysqld supports it"); + mtr_report("Using ndbcluster if necessary, mysqld supports it"); $opt_with_ndbcluster= 1; return; } @@ -1561,12 +1574,9 @@ sub run_benchmarks ($) { # FIXME how to specify several suites to run? Comma separated list? -sub run_tests () { - run_suite($opt_suite); -} sub run_suite () { - my $suite= shift; + my ($suite, $tests)= @_; mtr_print_thick_line(); @@ -1574,8 +1584,6 @@ sub run_suite () { mtr_timer_start($glob_timers,"suite", 60 * $opt_suite_timeout); - my $tests= collect_test_cases($suite); - mtr_report("Starting Tests in the '$suite' suite"); mtr_print_header(); @@ -1617,14 +1625,37 @@ sub run_suite () { # ############################################################################## +sub initialize_servers () { + if ( ! $glob_use_running_server ) + { + if ( $opt_start_dirty ) + { + kill_running_server(); + } + else + { + kill_and_cleanup(); + mysql_install_db(); + if ( $opt_force ) + { + save_installed_db(); + } + } + } +} + sub mysql_install_db () { # FIXME not exactly true I think, needs improvements install_db('master', $master->[0]->{'path_myddir'}); install_db('master', $master->[1]->{'path_myddir'}); - install_db('slave', $slave->[0]->{'path_myddir'}); - install_db('slave', $slave->[1]->{'path_myddir'}); - install_db('slave', $slave->[2]->{'path_myddir'}); + + if ( ! $opt_skip_rpl ) + { + install_db('slave', $slave->[0]->{'path_myddir'}); + install_db('slave', $slave->[1]->{'path_myddir'}); + install_db('slave', $slave->[2]->{'path_myddir'}); + } if ( ! $opt_skip_im ) { diff --git a/mysql-test/ndb/ndbcluster.sh b/mysql-test/ndb/ndbcluster.sh index c09c013552e..c17b3d316f4 100644 --- a/mysql-test/ndb/ndbcluster.sh +++ b/mysql-test/ndb/ndbcluster.sh @@ -232,8 +232,8 @@ cat `find "$fs_ndb" -name 'ndb_*.pid'` > "$fs_ndb/$pidfile" # test if Ndb Cluster starts properly -echo "Waiting for started..." -if ( $exec_waiter ) | grep "NDBT_ProgramExit: 0 - OK"; then :; else +echo "Waiting for NDB data nodes to start..." +if ( $exec_waiter ) | grep -q "NDBT_ProgramExit: 0 - OK"; then :; else echo "Ndbcluster startup failed" stop_default_ndbcluster exit 1