Commit 773fbd95 authored by Magnus Svensson's avatar Magnus Svensson

Bug #37312 Make tests binlog_row_innodb_stat and binlog_stm_innodb_stat more robust

parent ba93a357
...@@ -433,41 +433,51 @@ sub optimize_cases { ...@@ -433,41 +433,51 @@ sub optimize_cases {
# Skip processing if already marked as skipped # Skip processing if already marked as skipped
next if $tinfo->{skip}; next if $tinfo->{skip};
# Replication test needs an adjustment of binlog format
if (mtr_match_prefix($tinfo->{'name'}, "rpl"))
{
# ======================================================= # =======================================================
# Get binlog-format used by this test from master_opt # If a special binlog format was selected with
# --mysqld=--binlog-format=x, skip all test that does not
# support it
# ======================================================= # =======================================================
my $test_binlog_format; #print "used_binlog_format: $::used_binlog_format\n";
foreach my $opt ( @{$tinfo->{master_opt}} ) { if (defined $::used_binlog_format )
$test_binlog_format= $test_binlog_format || {
mtr_match_prefix($opt, "--binlog-format=");
}
# print $tinfo->{name}." uses ".$test_binlog_format."\n";
# ======================================================= # =======================================================
# If a special binlog format was selected with # Fixed --binlog-format=x specified on command line
# --mysqld=--binlog-format=x, skip all test with different
# binlog-format
# ======================================================= # =======================================================
if (defined $::used_binlog_format and if ( defined $tinfo->{'binlog_formats'} )
$test_binlog_format and {
$::used_binlog_format ne $test_binlog_format) #print "binlog_formats: ". join(", ", @{$tinfo->{binlog_formats}})."\n";
# The test supports different binlog formats
# check if the selected one is ok
my $supported=
grep { $_ eq $::used_binlog_format } @{$tinfo->{'binlog_formats'}};
if ( !$supported )
{ {
$tinfo->{'skip'}= 1; $tinfo->{'skip'}= 1;
$tinfo->{'comment'}= "Requires --binlog-format='$test_binlog_format'"; $tinfo->{'comment'}=
next; "Doesn't support --binlog-format='$::used_binlog_format'";
} }
}
}
else
{
# ======================================================= # =======================================================
# Check that testcase supports the designated binlog-format # Use dynamic switching of binlog format
# ======================================================= # =======================================================
if ($test_binlog_format and defined $tinfo->{'sup_binlog_formats'} )
# Get binlog-format used by this test from master_opt
my $test_binlog_format;
foreach my $opt ( @{$tinfo->{master_opt}} ) {
$test_binlog_format=
mtr_match_prefix($opt, "--binlog-format=") || $test_binlog_format;
}
if (defined $test_binlog_format and
defined $tinfo->{binlog_formats} )
{ {
my $supported= my $supported=
grep { $_ eq $test_binlog_format } @{$tinfo->{'sup_binlog_formats'}}; grep { $_ eq $test_binlog_format } @{$tinfo->{'binlog_formats'}};
if ( !$supported ) if ( !$supported )
{ {
$tinfo->{'skip'}= 1; $tinfo->{'skip'}= 1;
...@@ -476,20 +486,8 @@ sub optimize_cases { ...@@ -476,20 +486,8 @@ sub optimize_cases {
next; next;
} }
} }
# =======================================================
# Use dynamic switching of binlog-format if mtr started
# w/o --mysqld=--binlog-format=xxx and combinations.
# =======================================================
if (!defined $tinfo->{'combination'} and
!defined $::used_binlog_format)
{
$test_binlog_format= $tinfo->{'sup_binlog_formats'}->[0];
} }
# Save binlog format for dynamic switching
$tinfo->{binlog_format}= $test_binlog_format;
}
} }
} }
...@@ -879,18 +877,19 @@ sub collect_one_test_case($$$$$$$$$) { ...@@ -879,18 +877,19 @@ sub collect_one_test_case($$$$$$$$$) {
# the specified value in "tinfo" # the specified value in "tinfo"
our @tags= our @tags=
( (
["include/have_innodb.inc", "innodb_test", 1],
["include/have_binlog_format_row.inc", "sup_binlog_formats", ["row"]], ["include/have_binlog_format_row.inc", "binlog_formats", ["row"]],
["include/have_log_bin.inc", "need_binlog", 1], ["include/have_binlog_format_statement.inc", "binlog_formats", ["statement"]],
["include/have_binlog_format_statement.inc", ["include/have_binlog_format_mixed.inc", "binlog_formats", ["mixed"]],
"sup_binlog_formats", ["statement"]],
["include/have_binlog_format_mixed.inc", "sup_binlog_formats", ["mixed"]],
["include/have_binlog_format_mixed_or_row.inc", ["include/have_binlog_format_mixed_or_row.inc",
"sup_binlog_formats", ["mixed","row"]], "binlog_formats", ["mixed", "row"]],
["include/have_binlog_format_mixed_or_statement.inc", ["include/have_binlog_format_mixed_or_statement.inc",
"sup_binlog_formats", ["mixed","statement"]], "binlog_formats", ["mixed", "statement"]],
["include/have_binlog_format_row_or_statement.inc", ["include/have_binlog_format_row_or_statement.inc",
"sup_binlog_formats", ["row","statement"]], "binlog_formats", ["row", "statement"]],
["include/have_innodb.inc", "innodb_test", 1],
["include/have_log_bin.inc", "need_binlog", 1],
["include/big_test.inc", "big_test", 1], ["include/big_test.inc", "big_test", 1],
["include/have_debug.inc", "need_debug", 1], ["include/have_debug.inc", "need_debug", 1],
["include/have_ndb.inc", "ndb_test", 1], ["include/have_ndb.inc", "ndb_test", 1],
......
...@@ -4356,21 +4356,12 @@ sub run_testcase_need_master_restart($) ...@@ -4356,21 +4356,12 @@ sub run_testcase_need_master_restart($)
# as the current test requires # as the current test requires
elsif (! mtr_same_opts($master->[0]->{'start_opts'}, elsif (! mtr_same_opts($master->[0]->{'start_opts'},
$tinfo->{'master_opt'}) ) $tinfo->{'master_opt'}) )
{
# Chech that diff is binlog format only
my $diff_opts= mtr_diff_opts($master->[0]->{'start_opts'},$tinfo->{'master_opt'});
if (scalar(@$diff_opts) eq 2)
{
$do_restart= 1 unless ($diff_opts->[0] =~/^--binlog-format=/ and $diff_opts->[1] =~/^--binlog-format=/);
}
else
{ {
$do_restart= 1; $do_restart= 1;
mtr_verbose("Restart master: running with different options '" . mtr_verbose("Restart master: running with different options '" .
join(" ", @{$tinfo->{'master_opt'}}) . "' != '" . join(" ", @{$tinfo->{'master_opt'}}) . "' != '" .
join(" ", @{$master->[0]->{'start_opts'}}) . "'" ); join(" ", @{$master->[0]->{'start_opts'}}) . "'" );
} }
}
elsif( ! $master->[0]->{'pid'} ) elsif( ! $master->[0]->{'pid'} )
{ {
if ( $opt_extern ) if ( $opt_extern )
......
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