Start cluster only for testcases that really needs it and stop it when

not needed by the tescases. This will save test time for those testcases
that does not need cluster, but need a restart, as they dont have to wait
the extra time it would take for cluster to restart. It will also save
time for other testcases, as cluster does not 
need to be contacted for each table to be dropped or created.
Backport from 5.1
parent 01ddf969
......@@ -252,6 +252,26 @@ sub collect_one_test_case($$$$$$$) {
$tinfo->{'slave_restart'}= 1;
}
# Cluster is needed by test case if testname contains ndb
if ( ( $::opt_with_ndbcluster or $::glob_use_running_ndbcluster ) and
defined mtr_match_substring($tname,"ndb") )
{
if ( $::opt_skip_ndbcluster )
{
$tinfo->{'ndb_test'}= 0;
$tinfo->{'skip'}= 1;
return;
}
else
{
$tinfo->{'ndb_test'}= 1;
}
}
else
{
$tinfo->{'ndb_test'}= 0;
}
# FIXME what about embedded_server + ndbcluster, skip ?!
my $master_opt_file= "$testdir/$tname-master.opt";
......
......@@ -50,6 +50,23 @@ sub mtr_match_extension ($$) {
}
# Match a substring anywere in a string
sub mtr_match_substring ($$) {
my $string= shift;
my $substring= shift;
if ( $string =~ /(.*)\Q$substring\E(.*)$/ ) # strncmp
{
return $1;
}
else
{
return undef; # NULL
}
}
sub mtr_match_any_exact ($$) {
my $string= shift;
my $mlist= shift;
......
......@@ -28,7 +28,7 @@ sub run_stress_test ()
if ( ! $::glob_use_embedded_server and ! $::opt_local_master )
{
$::master->[0]->{'pid'}= mysqld_start('master',0,[],[]);
$::master->[0]->{'pid'}= mysqld_start('master',0,[],[],0);
if ( ! $::master->[0]->{'pid'} )
{
mtr_error("Can't start the mysqld server");
......
......@@ -143,6 +143,8 @@ our $glob_use_running_ndbcluster= 0;
our $glob_use_embedded_server= 0;
our @glob_test_mode;
our $using_ndbcluster_master= 0;
our $glob_basedir;
# The total result
......@@ -322,7 +324,7 @@ sub kill_and_cleanup ();
sub check_ssl_support ();
sub check_ndbcluster_support ();
sub ndbcluster_install ();
sub ndbcluster_start ();
sub ndbcluster_start ($);
sub ndbcluster_stop ();
sub run_benchmarks ($);
sub run_tests ();
......@@ -332,8 +334,8 @@ sub run_testcase ($);
sub report_failure_and_restart ($);
sub do_before_start_master ($$);
sub do_before_start_slave ($$);
sub mysqld_start ($$$$);
sub mysqld_arguments ($$$$$);
sub mysqld_start ($$$$$);
sub mysqld_arguments ($$$$$$);
sub stop_masters_slaves ();
sub stop_masters ();
sub stop_slaves ();
......@@ -390,11 +392,11 @@ sub main () {
if ( $opt_start_dirty )
{
if ( ndbcluster_start() )
if ( ndbcluster_start($opt_with_ndbcluster) )
{
mtr_error("Can't start ndbcluster");
}
if ( mysqld_start('master',0,[],[]) )
if ( mysqld_start('master',0,[],[],$using_ndbcluster_master) )
{
mtr_report("Servers started, exiting");
}
......@@ -1180,6 +1182,7 @@ sub kill_running_server () {
mkpath("$opt_vardir/log"); # Needed for mysqladmin log
mtr_kill_leftovers();
$using_ndbcluster_master= 1;
ndbcluster_stop();
$master->[0]->{'ndbcluster'}= 1;
}
......@@ -1327,16 +1330,29 @@ sub ndbcluster_install () {
return 1;
}
$using_ndbcluster_master= 1;
ndbcluster_stop();
$master->[0]->{'ndbcluster'}= 1;
return 0;
}
sub ndbcluster_start () {
sub ndbcluster_start ($) {
my $use_ndbcluster= shift;
if ( ! $opt_with_ndbcluster or $glob_use_running_ndbcluster )
if ( ! $use_ndbcluster )
{
$using_ndbcluster_master= 0;
return 0;
}
if ( $glob_use_running_ndbcluster )
{
$using_ndbcluster_master= 1;
return 0;
}
if ( $using_ndbcluster_master )
{
# Master already started
return 0;
}
# FIXME, we want to _append_ output to file $file_ndb_testrun_log instead of /dev/null
......@@ -1349,13 +1365,14 @@ sub ndbcluster_start () {
return 1;
}
$using_ndbcluster_master= 1;
return 0;
}
sub ndbcluster_stop () {
if ( ! $opt_with_ndbcluster or $glob_use_running_ndbcluster )
if ( ! $using_ndbcluster_master or $glob_use_running_ndbcluster )
{
$using_ndbcluster_master= 0;
return;
}
# FIXME, we want to _append_ output to file $file_ndb_testrun_log instead of /dev/null
......@@ -1365,6 +1382,7 @@ sub ndbcluster_stop () {
"--stop"],
"", "/dev/null", "", "");
$using_ndbcluster_master= 0;
return;
}
......@@ -1382,7 +1400,8 @@ sub run_benchmarks ($) {
if ( ! $glob_use_embedded_server and ! $opt_local_master )
{
$master->[0]->{'pid'}= mysqld_start('master',0,[],[]);
$master->[0]->{'pid'}= mysqld_start('master',0,[],[],
$using_ndbcluster_master);
if ( ! $master->[0]->{'pid'} )
{
mtr_error("Can't start the mysqld server");
......@@ -1730,7 +1749,9 @@ sub run_testcase ($) {
if ( ! $glob_use_running_server and ! $glob_use_embedded_server )
{
if ( $tinfo->{'master_restart'} or
$master->[0]->{'running_master_is_special'} )
$master->[0]->{'running_master_is_special'} or
# Stop if cluster is started but test cases does not need cluster
( $tinfo->{'ndb_test'} != $using_ndbcluster_master ) )
{
stop_masters();
$master->[0]->{'running_master_is_special'}= 0; # Forget why we stopped
......@@ -1781,7 +1802,11 @@ sub run_testcase ($) {
{
if ( $master->[0]->{'ndbcluster'} )
{
$master->[0]->{'ndbcluster'}= ndbcluster_start();
# Cluster is not started
# Call ndbcluster_start to check if test case needs cluster
# Start it if not already started
$master->[0]->{'ndbcluster'}= ndbcluster_start($tinfo->{'ndb_test'});
if ( $master->[0]->{'ndbcluster'} )
{
report_failure_and_restart($tinfo);
......@@ -1793,17 +1818,20 @@ sub run_testcase ($) {
# FIXME not correct location for do_before_start_master()
do_before_start_master($tname,$tinfo->{'master_sh'});
$master->[0]->{'pid'}=
mysqld_start('master',0,$tinfo->{'master_opt'},[]);
mysqld_start('master',0,$tinfo->{'master_opt'},[],
$using_ndbcluster_master);
if ( ! $master->[0]->{'pid'} )
{
report_failure_and_restart($tinfo);
return;
}
}
if ( $opt_with_ndbcluster and ! $master->[1]->{'pid'} )
if ( $using_ndbcluster_master and ! $master->[1]->{'pid'} )
{
# Test needs cluster, start an extra mysqld connected to cluster
$master->[1]->{'pid'}=
mysqld_start('master',1,$tinfo->{'master_opt'},[]);
mysqld_start('master',1,$tinfo->{'master_opt'},[],
$using_ndbcluster_master);
if ( ! $master->[1]->{'pid'} )
{
report_failure_and_restart($tinfo);
......@@ -1844,7 +1872,8 @@ sub run_testcase ($) {
{
$slave->[$idx]->{'pid'}=
mysqld_start('slave',$idx,
$tinfo->{'slave_opt'}, $tinfo->{'slave_mi'});
$tinfo->{'slave_opt'}, $tinfo->{'slave_mi'},
0);
if ( ! $slave->[$idx]->{'pid'} )
{
report_failure_and_restart($tinfo);
......@@ -2041,12 +2070,13 @@ sub do_before_start_slave ($$) {
}
}
sub mysqld_arguments ($$$$$) {
sub mysqld_arguments ($$$$$$) {
my $args= shift;
my $type= shift; # master/slave/bootstrap
my $idx= shift;
my $extra_opt= shift;
my $slave_master_info= shift;
my $using_ndbcluster= shift;
my $sidx= ""; # Index as string, 0 is empty string
if ( $idx > 0 )
......@@ -2104,10 +2134,16 @@ sub mysqld_arguments ($$$$$) {
mtr_add_arg($args, "%s--skip-innodb", $prefix);
}
if ( $opt_skip_ndbcluster )
if ( $opt_skip_ndbcluster || !$using_ndbcluster)
{
mtr_add_arg($args, "%s--skip-ndbcluster", $prefix);
}
else
{
mtr_add_arg($args, "%s--ndbcluster", $prefix);
mtr_add_arg($args, "%s--ndb-connectstring=%s", $prefix,
$opt_ndbconnectstring);
}
}
if ( $type eq 'slave' )
......@@ -2180,13 +2216,6 @@ sub mysqld_arguments ($$$$$) {
}
}
if ( $opt_with_ndbcluster )
{
mtr_add_arg($args, "%s--ndbcluster", $prefix);
mtr_add_arg($args, "%s--ndb-connectstring=%s", $prefix,
$opt_ndbconnectstring);
}
# FIXME always set nowdays??? SMALL_SERVER
mtr_add_arg($args, "%s--key_buffer_size=1M", $prefix);
mtr_add_arg($args, "%s--sort_buffer=256K", $prefix);
......@@ -2274,11 +2303,13 @@ sub mysqld_arguments ($$$$$) {
#
##############################################################################
sub mysqld_start ($$$$) {
sub mysqld_start ($$$$$) {
my $type= shift; # master/slave/bootstrap
my $idx= shift;
my $extra_opt= shift;
my $slave_master_info= shift;
my $using_ndbcluster= shift;
my $args; # Arg vector
my $exe;
......@@ -2304,7 +2335,8 @@ sub mysqld_start ($$$$) {
valgrind_arguments($args, \$exe);
}
mysqld_arguments($args,$type,$idx,$extra_opt,$slave_master_info);
mysqld_arguments($args,$type,$idx,$extra_opt,$slave_master_info,
$using_ndbcluster);
if ( $type eq 'master' )
{
......@@ -2706,7 +2738,7 @@ sub run_mysqltest ($) {
if ( $glob_use_embedded_server )
{
mysqld_arguments($args,'master',0,$tinfo->{'master_opt'},[]);
mysqld_arguments($args,'master',0,$tinfo->{'master_opt'},[],0);
}
# ----------------------------------------------------------------------
......
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