From d8b5c50e6b49803ed9ec595fb1669650d0586125 Mon Sep 17 00:00:00 2001 From: "msvensson@pilot.mysql.com" <> Date: Fri, 25 Apr 2008 16:09:25 +0200 Subject: [PATCH 1/6] Add "match end of string" marker so that only "cluster_config.xxx" are found --- mysql-test/lib/My/ConfigFactory.pm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mysql-test/lib/My/ConfigFactory.pm b/mysql-test/lib/My/ConfigFactory.pm index 3558bd0c4db..69bb969d7b8 100644 --- a/mysql-test/lib/My/ConfigFactory.pm +++ b/mysql-test/lib/My/ConfigFactory.pm @@ -416,7 +416,7 @@ sub post_fix_mysql_cluster_section { # Add a [mysl_cluster.] section for each # defined [cluster_config.] section - foreach my $group ( $config->like('cluster_config\.\w*') ) + foreach my $group ( $config->like('cluster_config\.\w*$') ) { my @urls; # Generate ndb_connectstring for this cluster @@ -497,7 +497,7 @@ sub run_generate_sections_from_cluster_config { my @options= ('ndb_mgmd', 'ndbd', 'mysqld', 'ndbapi'); - foreach my $group ( $config->like('cluster_config\.\w*') ) { + foreach my $group ( $config->like('cluster_config\.\w*$') ) { # Keep track of current index per process type my %idxes; @@ -580,7 +580,7 @@ sub new_config { $self->run_section_rules($config, - 'cluster_config\.\w*', + 'cluster_config\.\w*$', @cluster_config_rules); $self->run_generate_sections_from_cluster_config($config); From 9ac996e16ecde97590f449bc472b4feaf2d6a454 Mon Sep 17 00:00:00 2001 From: "skozlov/ksm@mysql.com/virtop.(none)" <> Date: Fri, 25 Apr 2008 20:54:42 +0400 Subject: [PATCH 2/6] WL#3754, circular replication tests --- .../include/circular_rpl_for_4_hosts_init.inc | 2 +- .../rpl/r/rpl_circular_for_4_hosts.result | 2 +- .../rpl/t/rpl_circular_for_4_hosts-master.opt | 1 - .../rpl/t/rpl_circular_for_4_hosts-slave.opt | 1 - .../suite/rpl/t/rpl_circular_for_4_hosts.cnf | 27 ++++++++++++++ .../rpl_ndb/t/rpl_ndb_circular_2ch-master.opt | 1 - .../rpl_ndb/t/rpl_ndb_circular_2ch-slave.opt | 1 - .../suite/rpl_ndb/t/rpl_ndb_circular_2ch.cnf | 35 +++++++++++++++++++ .../suite/rpl_ndb/t/rpl_ndb_circular_2ch.test | 5 ++- 9 files changed, 66 insertions(+), 9 deletions(-) delete mode 100644 mysql-test/suite/rpl/t/rpl_circular_for_4_hosts-master.opt delete mode 100644 mysql-test/suite/rpl/t/rpl_circular_for_4_hosts-slave.opt create mode 100644 mysql-test/suite/rpl/t/rpl_circular_for_4_hosts.cnf delete mode 100644 mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch-master.opt delete mode 100644 mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch-slave.opt create mode 100644 mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch.cnf diff --git a/mysql-test/include/circular_rpl_for_4_hosts_init.inc b/mysql-test/include/circular_rpl_for_4_hosts_init.inc index 8be6ef10b3e..ac6654777db 100644 --- a/mysql-test/include/circular_rpl_for_4_hosts_init.inc +++ b/mysql-test/include/circular_rpl_for_4_hosts_init.inc @@ -18,7 +18,7 @@ --source include/master-slave.inc # -# Set up circular ring by schema A->B->C-D->A +# Set up circular ring by schema A->B->C->D->A # --connection slave diff --git a/mysql-test/suite/rpl/r/rpl_circular_for_4_hosts.result b/mysql-test/suite/rpl/r/rpl_circular_for_4_hosts.result index 5b775a066c4..4f0f20d88d9 100644 --- a/mysql-test/suite/rpl/r/rpl_circular_for_4_hosts.result +++ b/mysql-test/suite/rpl/r/rpl_circular_for_4_hosts.result @@ -1,4 +1,4 @@ -*** Set up circular ring by schema A->B->C-D->A *** +*** Set up circular ring by schema A->B->C->D->A *** stop slave; drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; reset master; diff --git a/mysql-test/suite/rpl/t/rpl_circular_for_4_hosts-master.opt b/mysql-test/suite/rpl/t/rpl_circular_for_4_hosts-master.opt deleted file mode 100644 index d540d4a6880..00000000000 --- a/mysql-test/suite/rpl/t/rpl_circular_for_4_hosts-master.opt +++ /dev/null @@ -1 +0,0 @@ ---slave-num=3 --log-slave-updates --innodb diff --git a/mysql-test/suite/rpl/t/rpl_circular_for_4_hosts-slave.opt b/mysql-test/suite/rpl/t/rpl_circular_for_4_hosts-slave.opt deleted file mode 100644 index f5df45c8ecd..00000000000 --- a/mysql-test/suite/rpl/t/rpl_circular_for_4_hosts-slave.opt +++ /dev/null @@ -1 +0,0 @@ ---log-slave-updates --innodb diff --git a/mysql-test/suite/rpl/t/rpl_circular_for_4_hosts.cnf b/mysql-test/suite/rpl/t/rpl_circular_for_4_hosts.cnf new file mode 100644 index 00000000000..141aaa7788d --- /dev/null +++ b/mysql-test/suite/rpl/t/rpl_circular_for_4_hosts.cnf @@ -0,0 +1,27 @@ +!include ../my.cnf + +[mysqld.1] +log-slave-updates +innodb + +[mysqld.2] +log-slave-updates +innodb + +[mysqld.3] +log-slave-updates +innodb + +[mysqld.4] +log-slave-updates +innodb + +[ENV] +SLAVE_MYPORT1= @mysqld.3.port +SLAVE_MYSOCK1= @mysqld.3.socket + +SLAVE_MYPORT2= @mysqld.4.port +SLAVE_MYSOCK2= @mysqld.4.socket + + + diff --git a/mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch-master.opt b/mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch-master.opt deleted file mode 100644 index 3462bbc05d7..00000000000 --- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch-master.opt +++ /dev/null @@ -1 +0,0 @@ ---slave-num=2 --server-id=1 --log-bin -log-slave-updates diff --git a/mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch-slave.opt b/mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch-slave.opt deleted file mode 100644 index 6507907b1ed..00000000000 --- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch-slave.opt +++ /dev/null @@ -1 +0,0 @@ ---server-id=2 --log-bin --log-slave-updates --skip-slave-start diff --git a/mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch.cnf b/mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch.cnf new file mode 100644 index 00000000000..27da0af1847 --- /dev/null +++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch.cnf @@ -0,0 +1,35 @@ +!include ../my.cnf + +[mysqld.1.1] +server-id= 1 +log-bin +log-slave-updates + +[mysqld.2.1] +server-id= 1 +log-bin +log-slave-updates + +[mysqld.1.slave] +server-id= 2 +log-bin +log-slave-updates +skip-slave-start + +[mysqld.2.slave] +server-id= 2 +master-host= 127.0.0.1 +master-port= @mysqld.2.1.port +master-password= @mysqld.2.1.#password +master-user= @mysqld.2.1.#user +master-connect-retry= 1 +init-rpl-role= slave +log-bin +log-slave-updates +skip-slave-start +ndb_connectstring= @mysql_cluster.slave.ndb_connectstring + +[ENV] + +SLAVE_MYPORT1= @mysqld.2.slave.port +SLAVE_MYSOCK1= @mysqld.2.slave.socket diff --git a/mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch.test b/mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch.test index beaa2739b23..fad94539b1c 100644 --- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch.test +++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch.test @@ -170,10 +170,9 @@ SELECT COUNT(*), SUM(a), b FROM t1 WHERE c = 3 GROUP BY b ORDER BY b; # Clean up --connection master -DELETE FROM t1; +DROP TABLE t1; --connection slave -let $wait_condition= SELECT COUNT(*)=0 FROM t1; ---source include/wait_condition.inc +DROP TABLE t1; --echo # End of test 5.1 From 59c15c6730e90816a740a7518142879cd9305abc Mon Sep 17 00:00:00 2001 From: "skozlov/ksm@mysql.com/virtop.(none)" <> Date: Fri, 25 Apr 2008 22:54:20 +0400 Subject: [PATCH 3/6] WL#3754 Fix for mtr, added support personal configuration for test cases --- mysql-test/lib/mtr_cases.pm | 10 ++++++++++ mysql-test/suite/rpl_ndb/r/rpl_ndb_circular_2ch.result | 3 ++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/mysql-test/lib/mtr_cases.pm b/mysql-test/lib/mtr_cases.pm index f46c0165e27..3ac286811a2 100644 --- a/mysql-test/lib/mtr_cases.pm +++ b/mysql-test/lib/mtr_cases.pm @@ -748,6 +748,16 @@ sub collect_one_test_case { # Add slave opts, list of extra option only for slave # ---------------------------------------------------------------------- process_opts_file($tinfo, "$testdir/$tname-slave.opt", 'slave_opt'); + + + #----------------------------------------------------------------------- + # Check for test specific config file + #----------------------------------------------------------------------- + my $test_cnf_file= "$testdir/$tname.cnf"; + if ( -f $test_cnf_file) { + # Specifies the configuration file to use for this test + $tinfo->{'template_path'}= $test_cnf_file; + } # ---------------------------------------------------------------------- # master sh diff --git a/mysql-test/suite/rpl_ndb/r/rpl_ndb_circular_2ch.result b/mysql-test/suite/rpl_ndb/r/rpl_ndb_circular_2ch.result index 5ad36e6f251..53130343aa0 100644 --- a/mysql-test/suite/rpl_ndb/r/rpl_ndb_circular_2ch.result +++ b/mysql-test/suite/rpl_ndb/r/rpl_ndb_circular_2ch.result @@ -97,5 +97,6 @@ COUNT(*) SUM(a) b 100 64100 master1 100 64000 slave -DELETE FROM t1; +DROP TABLE t1; +DROP TABLE t1; From fd5313887248ef2d5f68d951ae5ae81f528d2d8d Mon Sep 17 00:00:00 2001 From: "skozlov/ksm@mysql.com/virtop.(none)" <> Date: Sat, 26 Apr 2008 02:17:34 +0400 Subject: [PATCH 4/6] WL#3754, rpl_ndb_circular_2ch test disabled --- mysql-test/suite/rpl_ndb/r/rpl_ndb_circular_2ch.result | 2 +- mysql-test/suite/rpl_ndb/t/disabled.def | 2 +- mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch.test | 4 +++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/mysql-test/suite/rpl_ndb/r/rpl_ndb_circular_2ch.result b/mysql-test/suite/rpl_ndb/r/rpl_ndb_circular_2ch.result index 53130343aa0..bb662542a56 100644 --- a/mysql-test/suite/rpl_ndb/r/rpl_ndb_circular_2ch.result +++ b/mysql-test/suite/rpl_ndb/r/rpl_ndb_circular_2ch.result @@ -98,5 +98,5 @@ COUNT(*) SUM(a) b 100 64000 slave DROP TABLE t1; -DROP TABLE t1; +DROP TABLE IF EXISTS t1; diff --git a/mysql-test/suite/rpl_ndb/t/disabled.def b/mysql-test/suite/rpl_ndb/t/disabled.def index ebc99feeac6..8177095f5a8 100644 --- a/mysql-test/suite/rpl_ndb/t/disabled.def +++ b/mysql-test/suite/rpl_ndb/t/disabled.def @@ -12,5 +12,5 @@ rpl_ndb_circular : Bug#33849 COMMIT event missing in cluster circular replication. rpl_ndb_circular_simplex : Bug#33849 COMMIT event missing in cluster circular replication. - +rpl_ndb_circular_2ch : Bug#33849 COMMIT event missing in cluster circular replication. # the below testcase have been reworked to avoid the bug, test contains comment, keep bug open diff --git a/mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch.test b/mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch.test index fad94539b1c..abd2144b80c 100644 --- a/mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch.test +++ b/mysql-test/suite/rpl_ndb/t/rpl_ndb_circular_2ch.test @@ -172,7 +172,9 @@ SELECT COUNT(*), SUM(a), b FROM t1 WHERE c = 3 GROUP BY b ORDER BY b; --connection master DROP TABLE t1; --connection slave -DROP TABLE t1; +--disable_warings +DROP TABLE IF EXISTS t1; +--enable_warnings --echo # End of test 5.1 From 4a8347cbc4a4b5d6cf774776291a9f16eef5fae2 Mon Sep 17 00:00:00 2001 From: "msvensson@pilot.mysql.com" <> Date: Sat, 26 Apr 2008 10:09:42 +0200 Subject: [PATCH 5/6] Remove temporary disablings --- mysql-test/suite/rpl/t/disabled.def | 1 - mysql-test/suite/rpl_ndb/t/disabled.def | 1 - 2 files changed, 2 deletions(-) diff --git a/mysql-test/suite/rpl/t/disabled.def b/mysql-test/suite/rpl/t/disabled.def index 538719aaf65..599a2b197ae 100644 --- a/mysql-test/suite/rpl/t/disabled.def +++ b/mysql-test/suite/rpl/t/disabled.def @@ -15,5 +15,4 @@ rpl_innodb_bug28430 : Bug #32247 2007-11-27 mats Test reports wrong value o rpl_view : Bug#32654: rpl_view.test fails randomly rpl_ndb_multi : Bug#30751: rpl_ndb_multi missing row in output rpl_log_pos : Bug#8693 Test 'rpl_log_pos' fails sometimes -rpl_circular_for_4_hosts : Needs updated config diff --git a/mysql-test/suite/rpl_ndb/t/disabled.def b/mysql-test/suite/rpl_ndb/t/disabled.def index 4bcc9f95d05..8177095f5a8 100644 --- a/mysql-test/suite/rpl_ndb/t/disabled.def +++ b/mysql-test/suite/rpl_ndb/t/disabled.def @@ -14,4 +14,3 @@ rpl_ndb_circular : Bug#33849 COMMIT event missing in cluster circular re rpl_ndb_circular_simplex : Bug#33849 COMMIT event missing in cluster circular replication. rpl_ndb_circular_2ch : Bug#33849 COMMIT event missing in cluster circular replication. # the below testcase have been reworked to avoid the bug, test contains comment, keep bug open -rpl_ndb_circular_2ch : Needs updated config From 3f48a30625b4f3bf7e2a21b78dc2c0f0ef1c1fb8 Mon Sep 17 00:00:00 2001 From: "msvensson@pilot.mysql.com" <> Date: Sun, 27 Apr 2008 15:32:12 +0200 Subject: [PATCH 6/6] Save datadir in case of test failure, but limit the number of times datadir can be saved in case of constantly failing servers Remove datadirs each time all servers have been stopped thus limiting the size of vardir. The datadirs of failed tests have been saved and that should be enough to diagnose any failures --- mysql-test/mysql-test-run.pl | 176 +++++++++++++++++++++++------------ 1 file changed, 119 insertions(+), 57 deletions(-) diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl index f4f45c5a61a..28e9501dec7 100755 --- a/mysql-test/mysql-test-run.pl +++ b/mysql-test/mysql-test-run.pl @@ -193,9 +193,12 @@ our %mysqld_variables; my $source_dist= 0; -our $opt_max_save_core= 5; +my $opt_max_save_core= $ENV{MTR_MAX_SAVE_CORE} || 5; my $num_saved_cores= 0; # Number of core files saved in vardir/log/ so far. +my $opt_max_save_datadir= $ENV{MTR_MAX_SAVE_DATADIR} || 20; +my $num_saved_datadir= 0; # Number of datadirs saved in vardir/log/ so far. + select(STDOUT); $| = 1; # Automatically flush STDOUT @@ -351,6 +354,7 @@ sub command_line_setup { 'client-debugger=s' => \$opt_client_debugger, 'strace-client:s' => \$opt_strace_client, 'max-save-core=i' => \$opt_max_save_core, + 'max-save-datadir=i' => \$opt_max_save_datadir, # Coverage, profiling etc 'gcov' => \$opt_gcov, @@ -2325,6 +2329,10 @@ sub run_testcase ($) { if ( started(all_servers()) == 0 ) { + + # Remove old datadirs + clean_datadir(); + # Restore old ENV while (my ($option, $value)= each( %old_env )) { if (defined $value){ @@ -2448,15 +2456,12 @@ sub run_testcase ($) { mtr_report_test_passed($tinfo, $opt_timer); } - if ( $opt_check_testcases ) + if ( $opt_check_testcases and check_testcase($tinfo, "after")) { - if (check_testcase($tinfo, "after")) - { - # Stop all servers that are known to be running - stop_all_servers(); - after_test_failure($tinfo->{'name'}); - mtr_report("Resuming tests...\n"); - } + # Stop all servers that are known to be running + stop_all_servers(); + clean_datadir(); + mtr_report("Resuming tests...\n"); } } elsif ( $res == 62 ) @@ -2523,7 +2528,7 @@ sub run_testcase ($) { { # Server failed, probably crashed $tinfo->{comment}= - "Server failed during test run"; + "Server $proc failed during test run"; report_failure_and_restart($tinfo); return 1; @@ -2667,57 +2672,24 @@ sub check_expected_crash_and_restart { } -# -# Save any interesting files in the data_dir -# before the data dir is removed. -# -sub save_files_after_test_failure($$) { - my $test_name= shift; - my $data_dir= shift; - my $save_name= "$opt_vardir/log/$test_name"; +sub clean_datadir { - # Look for core files - foreach my $core_file ( glob("$data_dir/core*") ) + mtr_verbose("Cleaning datadirs..."); + + foreach my $cluster ( clusters() ) { - last if $opt_max_save_core > 0 && $num_saved_cores >= $opt_max_save_core; - my $core_name= basename($core_file); - mtr_report(" - saving '$core_name'"); - mkpath($save_name) if ! -d $save_name; - rename("$core_file", "$save_name/$core_name"); - ++$num_saved_cores; + my $cluster_dir= "$opt_vardir/".$cluster->{name}; + mtr_verbose(" - removing '$cluster_dir'"); + rmtree($cluster_dir); + } -} - - -sub after_test_failure ($) { - my $test_name= shift; - - mtr_report("Cleaning datadirs..."); foreach my $mysqld ( mysqlds() ) { - my $data_dir= $mysqld->value('datadir'); - my $name= basename($data_dir); - save_files_after_test_failure($test_name, $data_dir); - mtr_debug("Removing '$data_dir'"); - rmtree($data_dir); - } - - # Remove the ndb_*_fs dirs for all ndbd nodes - # forcing a clean start of ndb next time - foreach my $cluster ( clusters() ) - { - foreach my $ndbd ( ndbds($cluster) ) - { - my $data_dir= $ndbd->value('DataDir'); - foreach my $fs_dir ( glob("$data_dir/ndb_*_fs") ) { - rmtree($fs_dir); - mtr_debug("Removing '$fs_dir'"); - } - - my $backup_dir= $ndbd->value('BackupDataDir'); - rmtree("$backup_dir/BACKUP"); - mtr_debug("Removing '$backup_dir'"); + my $mysqld_dir= dirname($mysqld->value('datadir')); + if (-d $mysqld_dir ) { + mtr_verbose(" - removing '$mysqld_dir'"); + rmtree($mysqld_dir); } } @@ -2731,6 +2703,91 @@ sub after_test_failure ($) { } +# +# Limit number of core files saved +# +sub limit_cores_after_failure ($) { + my ($datadir)= @_; + + # Look for core files + foreach my $core_file ( glob("$datadir/core*") ) + { + my $core_name= basename($core_file); + if ($opt_max_save_core > 0 && $num_saved_cores >= $opt_max_save_core) { + # Delete file to avoid saving it when the datadir is later saved + mtr_report(" - deleting '$core_name'", + "($num_saved_cores/$opt_max_save_core)"); + unlink("$core_file"); + } + else { + mtr_report(" - found '$core_name'", + "($num_saved_cores/$opt_max_save_core)"); + } + ++$num_saved_cores; + } +} + +# +# Save datadir before it's removed +# +sub save_datadir_after_failure($$) { + my ($dir, $savedir)= @_; + + if ($opt_max_save_datadir > 0 && + $num_saved_datadir >= $opt_max_save_datadir) + { + mtr_report(" - skipping '$dir'"); + } + else { + mtr_report(" - saving '$dir'"); + my $dir_name= basename($dir); + rename("$dir", "$savedir/$dir_name"); + } +} + + +sub after_failure ($) { + my ($tinfo)= @_; + + mtr_report("Saving datadirs..."); + + my $save_dir= "$opt_vardir/log/"; + $save_dir.= $tinfo->{name}; + # Add combination name if any + $save_dir.= "_$tinfo->{combination}" + if defined $tinfo->{combination}; + + mkpath($save_dir) if ! -d $save_dir; + + # Save the used my.cnf file + copy($path_config_file, $save_dir); + + if ( clusters() ) { + foreach my $cluster ( clusters() ) { + + foreach my $server ( ndbds($cluster), ndb_mgmds($cluster) ) { + my $data_dir= $server->value('DataDir'); + limit_cores_after_failure($data_dir); + } + + my $cluster_dir= "$opt_vardir/".$cluster->{name}; + save_datadir_after_failure($cluster_dir, $save_dir); + } + } + else { + foreach my $mysqld ( mysqlds() ) { + my $data_dir= $mysqld->value('datadir'); + limit_cores_after_failure($data_dir); + save_datadir_after_failure(dirname($data_dir), $save_dir); + } + } + + $num_saved_datadir++; + + clean_datadir(); +} + + sub report_failure_and_restart ($) { my $tinfo= shift; @@ -2741,7 +2798,7 @@ sub report_failure_and_restart ($) { # Stop all servers that are known to be running stop_all_servers(); - after_test_failure($tinfo->{'name'}); + after_failure($tinfo); mtr_report("Resuming tests...\n"); return; } @@ -3849,7 +3906,12 @@ Options for debugging the product Example: $0 --strace-client=ktrace max-save-core Limit the number of core files saved (to avoid filling up disks for heavily crashing server). Defaults to - $opt_max_save_core, set to 0 for no limit. + $opt_max_save_core, set to 0 for no limit. Set + it's default with MTR_MAX_SAVE_CORE + max-save-datadir Limit the number of datadir saved (to avoid filling + up disks for heavily crashing server). Defaults to + $opt_max_save_datadir, set to 0 for no limit. Set + it's default with MTR_MAX_SAVE_DATDIR Options for valgrind