Commit 639c9dbc authored by unknown's avatar unknown

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
parent d8df724a
......@@ -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 )
{
......
......@@ -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
......
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