Commit 31df5d1d authored by msvensson@shellback.(none)'s avatar msvensson@shellback.(none)

Merge bk-internal:/home/bk/mysql-5.1-new-maint

into  shellback.(none):/home/msvensson/mysql/mysql-5.1-new-maint
parents d575196c 71450a86
...@@ -94,6 +94,8 @@ sub spawn_impl ($$$$$$$$) { ...@@ -94,6 +94,8 @@ sub spawn_impl ($$$$$$$$) {
my $pid_file= shift; # FIXME my $pid_file= shift; # FIXME
my $spawn_opts= shift; my $spawn_opts= shift;
mtr_error("Can't spawn with empty \"path\"") unless defined $path;
if ( $::opt_script_debug ) if ( $::opt_script_debug )
{ {
print STDERR "\n"; print STDERR "\n";
......
...@@ -216,7 +216,7 @@ our $opt_embedded_server; ...@@ -216,7 +216,7 @@ our $opt_embedded_server;
our $opt_extern; our $opt_extern;
our $opt_fast; our $opt_fast;
our $opt_force; our $opt_force;
our $opt_reorder; our $opt_reorder= 1;
our $opt_enable_disabled; our $opt_enable_disabled;
our $opt_gcov; our $opt_gcov;
...@@ -360,6 +360,7 @@ sub install_db ($$); ...@@ -360,6 +360,7 @@ sub install_db ($$);
sub run_testcase ($); sub run_testcase ($);
sub run_testcase_stop_servers ($$$); sub run_testcase_stop_servers ($$$);
sub run_testcase_start_servers ($); sub run_testcase_start_servers ($);
sub run_testcase_check_skip_test($);
sub report_failure_and_restart ($); sub report_failure_and_restart ($);
sub do_before_start_master ($$); sub do_before_start_master ($$);
sub do_before_start_slave ($$); sub do_before_start_slave ($$);
...@@ -1954,6 +1955,23 @@ sub mysqld_wait_started($){ ...@@ -1954,6 +1955,23 @@ sub mysqld_wait_started($){
} }
sub ndb_mgmd_wait_started($) {
my ($cluster)= @_;
my $retries= 100;
while (ndbcluster_wait_started($cluster, "--no-contact") and
$retries)
{
# Millisceond sleep emulated with select
select(undef, undef, undef, (0.1));
$retries--;
}
return $retries == 0;
}
sub ndb_mgmd_start ($) { sub ndb_mgmd_start ($) {
my $cluster= shift; my $cluster= shift;
...@@ -1974,13 +1992,12 @@ sub ndb_mgmd_start ($) { ...@@ -1974,13 +1992,12 @@ sub ndb_mgmd_start ($) {
"", "",
{ append_log_file => 1 }); { append_log_file => 1 });
# FIXME Should not be needed # FIXME Should not be needed
# Unfortunately the cluster nodes will fail to start # Unfortunately the cluster nodes will fail to start
# if ndb_mgmd has not started properly # if ndb_mgmd has not started properly
while (ndbcluster_wait_started($cluster, "--no-contact")) if (ndb_mgmd_wait_started($cluster))
{ {
select(undef, undef, undef, 0.1); mtr_error("Failed to wait for start of ndb_mgmd");
} }
# Remember pid of ndb_mgmd # Remember pid of ndb_mgmd
...@@ -2045,7 +2062,7 @@ sub ndbcluster_start ($$) { ...@@ -2045,7 +2062,7 @@ sub ndbcluster_start ($$) {
mtr_error("Cluster '$cluster->{'name'}' already started"); mtr_error("Cluster '$cluster->{'name'}' already started");
} }
my $pid= ndb_mgmd_start($cluster); ndb_mgmd_start($cluster);
for ( my $idx= 0; $idx < $cluster->{'nodes'}; $idx++ ) for ( my $idx= 0; $idx < $cluster->{'nodes'}; $idx++ )
{ {
...@@ -2156,6 +2173,11 @@ sub run_suite () { ...@@ -2156,6 +2173,11 @@ sub run_suite () {
foreach my $tinfo ( @$tests ) foreach my $tinfo ( @$tests )
{ {
if (run_testcase_check_skip_test($tinfo))
{
next;
}
mtr_timer_start($glob_timers,"testcase", 60 * $opt_testcase_timeout); mtr_timer_start($glob_timers,"testcase", 60 * $opt_testcase_timeout);
run_testcase($tinfo); run_testcase($tinfo);
mtr_timer_stop($glob_timers,"testcase"); mtr_timer_stop($glob_timers,"testcase");
...@@ -2440,32 +2462,9 @@ sub im_prepare_data_dir($) { ...@@ -2440,32 +2462,9 @@ sub im_prepare_data_dir($) {
} }
} }
sub run_testcase_check_skip_test($)
############################################################################## {
# my ($tinfo)= @_;
# Run a single test case
#
##############################################################################
# When we get here, we have already filtered out test cases that doesn't
# apply to the current setup, for example if we use a running server, test
# cases that restart the server are dropped. So this function should mostly
# be about doing things, not a lot of logic.
# We don't start and kill the servers for each testcase. But some
# testcases needs a restart, because they specify options to start
# mysqld with. After that testcase, we need to restart again, to set
# back the normal options.
sub run_testcase ($) {
my $tinfo= shift;
my $tname= $tinfo->{'name'};
mtr_tonewfile($path_current_test_log,"$tname\n"); # Always tell where we are
# output current test to ndbcluster log file to enable diagnostics
mtr_tofile($file_ndb_testrun_log,"CURRENT TEST $tname\n");
# ---------------------------------------------------------------------- # ----------------------------------------------------------------------
# If marked to skip, just print out and return. # If marked to skip, just print out and return.
...@@ -2478,7 +2477,7 @@ sub run_testcase ($) { ...@@ -2478,7 +2477,7 @@ sub run_testcase ($) {
{ {
mtr_report_test_name($tinfo); mtr_report_test_name($tinfo);
mtr_report_test_skipped($tinfo); mtr_report_test_skipped($tinfo);
return; return 1;
} }
# If test needs cluster, check that master installed ok # If test needs cluster, check that master installed ok
...@@ -2486,7 +2485,7 @@ sub run_testcase ($) { ...@@ -2486,7 +2485,7 @@ sub run_testcase ($) {
{ {
mtr_report_test_name($tinfo); mtr_report_test_name($tinfo);
mtr_report_test_failed($tinfo); mtr_report_test_failed($tinfo);
return; return 1;
} }
# If test needs slave cluster, check that it installed ok # If test needs slave cluster, check that it installed ok
...@@ -2495,37 +2494,83 @@ sub run_testcase ($) { ...@@ -2495,37 +2494,83 @@ sub run_testcase ($) {
{ {
mtr_report_test_name($tinfo); mtr_report_test_name($tinfo);
mtr_report_test_failed($tinfo); mtr_report_test_failed($tinfo);
return; return 1;
} }
my $master_restart= run_testcase_need_master_restart($tinfo); return 0;
my $slave_restart= run_testcase_need_slave_restart($tinfo); }
if ($master_restart or $slave_restart)
sub do_before_run_mysqltest($)
{
my $tinfo= shift;
my $tname= $tinfo->{'name'};
# Remove old reject file
if ( $opt_suite eq "main" )
{ {
run_testcase_stop_servers($tinfo, $master_restart, $slave_restart); unlink("r/$tname.reject");
}
else
{
unlink("suite/$opt_suite/r/$tname.reject");
} }
# ----------------------------------------------------------------------
# Prepare to start masters. Even if we use embedded, we want to run # MASV cleanup...
# the preparation. mtr_tonewfile($path_current_test_log,"$tname\n"); # Always tell where we are
# ----------------------------------------------------------------------
# output current test to ndbcluster log file to enable diagnostics
mtr_tofile($file_ndb_testrun_log,"CURRENT TEST $tname\n");
mtr_tofile($master->[0]->{'path_myerr'},"CURRENT_TEST: $tname\n"); mtr_tofile($master->[0]->{'path_myerr'},"CURRENT_TEST: $tname\n");
if ( $master->[1]->{'pid'} ) if ( $master->[1]->{'pid'} )
{ {
mtr_tofile($master->[1]->{'path_myerr'},"CURRENT_TEST: $tname\n"); mtr_tofile($master->[1]->{'path_myerr'},"CURRENT_TEST: $tname\n");
} }
}
# ---------------------------------------------------------------------- sub do_after_run_mysqltest($)
# If any mysqld servers running died, we have to know {
# ---------------------------------------------------------------------- my $tinfo= shift;
my $tname= $tinfo->{'name'};
my $died= mtr_record_dead_children(); #MASV cleanup
# Save info from this testcase run to mysqltest.log
my $testcase_log= mtr_fromfile($path_timefile) if -f $path_timefile;
mtr_tofile($path_mysqltest_log,"CURRENT TEST $tname\n");
mtr_tofile($path_mysqltest_log, $testcase_log);
}
# ----------------------------------------------------------------------
# Start masters needed by the testcase ##############################################################################
# ---------------------------------------------------------------------- #
# Run a single test case
#
##############################################################################
# When we get here, we have already filtered out test cases that doesn't
# apply to the current setup, for example if we use a running server, test
# cases that restart the server are dropped. So this function should mostly
# be about doing things, not a lot of logic.
# We don't start and kill the servers for each testcase. But some
# testcases needs a restart, because they specify options to start
# mysqld with. After that testcase, we need to restart again, to set
# back the normal options.
sub run_testcase ($) {
my $tinfo= shift;
my $master_restart= run_testcase_need_master_restart($tinfo);
my $slave_restart= run_testcase_need_slave_restart($tinfo);
if ($master_restart or $slave_restart)
{
run_testcase_stop_servers($tinfo, $master_restart, $slave_restart);
}
my $died= mtr_record_dead_children();
if ($died or $master_restart or $slave_restart) if ($died or $master_restart or $slave_restart)
{ {
run_testcase_start_servers($tinfo); run_testcase_start_servers($tinfo);
...@@ -2535,28 +2580,14 @@ sub run_testcase ($) { ...@@ -2535,28 +2580,14 @@ sub run_testcase ($) {
# If --start-and-exit or --start-dirty given, stop here to let user manually # If --start-and-exit or --start-dirty given, stop here to let user manually
# run tests # run tests
# ---------------------------------------------------------------------- # ----------------------------------------------------------------------
if ( $opt_start_and_exit or $opt_start_dirty ) if ( $opt_start_and_exit or $opt_start_dirty )
{ {
mtr_report("\nServers started, exiting"); mtr_report("\nServers started, exiting");
exit(0); exit(0);
} }
# ----------------------------------------------------------------------
# Run the test case
# ----------------------------------------------------------------------
{
# remove the old reject file
if ( $opt_suite eq "main" )
{
unlink("r/$tname.reject");
}
else
{ {
unlink("suite/$opt_suite/r/$tname.reject"); do_before_run_mysqltest($tinfo);
}
unlink($path_timefile);
my $res= run_mysqltest($tinfo); my $res= run_mysqltest($tinfo);
mtr_report_test_name($tinfo); mtr_report_test_name($tinfo);
...@@ -2592,10 +2623,8 @@ sub run_testcase ($) { ...@@ -2592,10 +2623,8 @@ sub run_testcase ($) {
report_failure_and_restart($tinfo); report_failure_and_restart($tinfo);
} }
# Save info from this testcase run to mysqltest.log
my $testcase_log= mtr_fromfile($path_timefile) if -f $path_timefile; do_after_run_mysqltest($tinfo);
mtr_tofile($path_mysqltest_log,"CURRENT TEST $tname\n");
mtr_tofile($path_mysqltest_log, $testcase_log);
} }
# ---------------------------------------------------------------------- # ----------------------------------------------------------------------
......
...@@ -3535,7 +3535,7 @@ int handler::ha_external_lock(THD *thd, int lock_type) ...@@ -3535,7 +3535,7 @@ int handler::ha_external_lock(THD *thd, int lock_type)
int handler::ha_reset() int handler::ha_reset()
{ {
DBUG_ENTER("ha_reset"); DBUG_ENTER("ha_reset");
/* Check that we have called all proper delallocation functions */ /* Check that we have called all proper deallocation functions */
DBUG_ASSERT((byte*) table->def_read_set.bitmap + DBUG_ASSERT((byte*) table->def_read_set.bitmap +
table->s->column_bitmap_size == table->s->column_bitmap_size ==
(byte*) table->def_write_set.bitmap); (byte*) table->def_write_set.bitmap);
......
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