📄 mysql-test-run.pl
字号:
return; } mtr_report("Using ndbcluster, mysqld supports it"); $opt_with_ndbcluster= 1; if ( $opt_ndbconnectstring ) { $glob_use_running_ndbcluster= 1; } else { $opt_ndbconnectstring= "host=localhost:$opt_ndbcluster_port"; } if ( $opt_skip_ndbcluster_slave ) { $opt_with_ndbcluster_slave= 0; } else { $opt_with_ndbcluster_slave= 1; if ( $opt_ndbconnectstring_slave ) { $glob_use_running_ndbcluster_slave= 1; } else { $opt_ndbconnectstring_slave= "host=localhost:$opt_ndbcluster_port_slave"; } } return;}# FIXME why is there a different start below?!sub ndbcluster_install () { if ( ! $opt_with_ndbcluster or $glob_use_running_ndbcluster ) { return 0; } mtr_report("Installing ndbcluster master"); my $ndbcluster_opts= $opt_bench ? "" : "--small"; if ( mtr_run("$glob_mysql_test_dir/ndb/ndbcluster", ["--port=$opt_ndbcluster_port", "--data-dir=$opt_vardir", "--verbose=2", $ndbcluster_opts, "--initial", "--relative-config-data-dir", "--core"], "", "", "", "") ) { mtr_error("Error ndbcluster_install"); return 1; } $using_ndbcluster_master= 1; ndbcluster_stop(); $master->[0]->{'ndbcluster'}= 1; return 0;}sub ndbcluster_start ($) { my $use_ndbcluster= shift; if ( ! $use_ndbcluster ) { $using_ndbcluster_master= 0; return 0; } if ( $glob_use_running_ndbcluster ) { $using_ndbcluster_master= 1; return 0; } if ( $using_ndbcluster_master ) { return 0; } # FIXME, we want to _append_ output to file $file_ndb_testrun_log instead of /dev/null #mtr_report("Starting ndbcluster master"); if ( mtr_run("$glob_mysql_test_dir/ndb/ndbcluster", ["--port=$opt_ndbcluster_port", "--data-dir=$opt_vardir", "--verbose=2", "--core"], "", "/dev/null", "", "") ) { mtr_error("Error ndbcluster_start"); $using_ndbcluster_master= 0; return 1; } $using_ndbcluster_master= 1; return 0;}sub rm_ndbcluster_tables ($) { my $dir= shift; foreach my $bin ( glob("$dir/cluster_replication/apply_status*"), glob("$dir/cluster_replication/schema*") ) { unlink($bin); }}sub ndbcluster_stop () { 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 #mtr_report("Stopping ndbcluster master"); mtr_run("$glob_mysql_test_dir/ndb/ndbcluster", ["--port=$opt_ndbcluster_port", "--data-dir=$opt_vardir", "--verbose=2", "--stop"], "", "/dev/null", "", ""); rm_ndbcluster_tables ($master->[0]->{'path_myddir'}); rm_ndbcluster_tables ($master->[1]->{'path_myddir'}); $using_ndbcluster_master= 0; return;}sub ndbcluster_install_slave () { if ( ! $opt_with_ndbcluster_slave or $glob_use_running_ndbcluster_slave ) { return 0; } mtr_report("Installing ndbcluster slave"); if ( mtr_run("$glob_mysql_test_dir/ndb/ndbcluster", ["--port=$opt_ndbcluster_port_slave", "--data-dir=$opt_vardir", "--verbose=2", "--small", "--ndbd-nodes=1", "--initial", "--relative-config-data-dir", "--core"], "", "", "", "") ) { mtr_error("Error ndbcluster_install_slave"); return 1; } $using_ndbcluster_slave= 1; ndbcluster_stop_slave(); $slave->[0]->{'ndbcluster'}= 1; return 0;}sub ndbcluster_start_slave ($) { my $use_ndbcluster= shift; if ( ! $use_ndbcluster ) { $using_ndbcluster_slave= 0; return 0; } if ( $glob_use_running_ndbcluster_slave ) { $using_ndbcluster_slave= 1; return 0; } # FIXME, we want to _append_ output to file $file_ndb_testrun_log instead of /dev/null #mtr_report("Starting ndbcluster slave"); if ( mtr_run("$glob_mysql_test_dir/ndb/ndbcluster", ["--port=$opt_ndbcluster_port_slave", "--data-dir=$opt_vardir", "--verbose=2", "--ndbd-nodes=1", "--core"], "", "/dev/null", "", "") ) { mtr_error("Error ndbcluster_start_slave"); $using_ndbcluster_slave= 0; return 1; } $using_ndbcluster_slave= 1; return 0;}sub ndbcluster_stop_slave () { if ( ! $using_ndbcluster_slave or $glob_use_running_ndbcluster_slave ) { $using_ndbcluster_slave= 0; return; } # FIXME, we want to _append_ output to file $file_ndb_testrun_log instead of /dev/null #mtr_report("Stopping ndbcluster slave"); mtr_run("$glob_mysql_test_dir/ndb/ndbcluster", ["--port=$opt_ndbcluster_port_slave", "--data-dir=$opt_vardir", "--verbose=2", "--stop"], "", "/dev/null", "", ""); rm_ndbcluster_tables ($slave->[0]->{'path_myddir'}); $using_ndbcluster_slave= 0; return;}################################################################################ Run the benchmark suite###############################################################################sub run_benchmarks ($) { my $benchmark= shift; my $args; if ( ! $glob_use_embedded_server and ! $opt_local_master ) { $master->[0]->{'pid'}= mysqld_start('master',0,[],[], $using_ndbcluster_master); if ( ! $master->[0]->{'pid'} ) { mtr_error("Can't start the mysqld server"); } } mtr_init_args(\$args); mtr_add_arg($args, "--socket=%s", $master->[0]->{'path_mysock'}); mtr_add_arg($args, "--user=%s", $opt_user); if ( $opt_small_bench ) { mtr_add_arg($args, "--small-test"); mtr_add_arg($args, "--small-tables"); } if ( $opt_with_ndbcluster ) { mtr_add_arg($args, "--create-options=TYPE=ndb"); } my $benchdir= "$glob_basedir/sql-bench"; chdir($benchdir); # FIXME check error # FIXME write shorter.... if ( ! $benchmark ) { mtr_add_arg($args, "--log"); mtr_run("$glob_mysql_bench_dir/run-all-tests", $args, "", "", "", ""); # FIXME check result code?! } elsif ( -x $benchmark ) { mtr_run("$glob_mysql_bench_dir/$benchmark", $args, "", "", "", ""); # FIXME check result code?! } else { mtr_error("Benchmark $benchmark not found"); } chdir($glob_mysql_test_dir); # Go back if ( ! $glob_use_embedded_server ) { stop_masters(); }}################################################################################ Run the test suite################################################################################ FIXME how to specify several suites to run? Comma separated list?sub run_tests () { run_suite($opt_suite);}sub run_suite () { my $suite= shift; mtr_print_thick_line(); mtr_report("Finding Tests in the '$suite' 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(); foreach my $tinfo ( @$tests ) { mtr_timer_start($glob_timers,"testcase", 60 * $opt_testcase_timeout); run_testcase($tinfo); mtr_timer_stop($glob_timers,"testcase"); } mtr_print_line(); if ( ! $opt_gdb and ! $glob_use_running_server and ! $opt_ddd and ! $glob_use_embedded_server ) { stop_masters_slaves(); } if ( $opt_gcov ) { gcov_collect(); # collect coverage information } if ( $opt_gprof ) { gprof_collect(); # collect coverage information } mtr_report_stats($tests); mtr_timer_stop($glob_timers,"suite");}################################################################################ Initiate the test databases###############################################################################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_im ) { im_prepare_env($instance_manager); } if ( ndbcluster_install() ) { # failed to install, disable usage but flag that its no ok $opt_with_ndbcluster= 0; $flag_ndb_status_ok= 0; } if ( ndbcluster_install_slave() ) { # failed to install, disable usage but flag that its no ok $opt_with_ndbcluster_slave= 0; $flag_ndb_slave_status_ok= 0; } return 0;}sub install_db ($$) { my $type= shift; my $data_dir= shift; my $init_db_sql= "lib/init_db.sql"; my $init_db_sql_tmp= "/tmp/init_db.sql$$"; my $args; mtr_report("Installing \u$type Databases"); open(IN, $init_db_sql) or mtr_error("Can't open $init_db_sql: $!"); open(OUT, ">", $init_db_sql_tmp) or mtr_error("Can't write to $init_db_sql_tmp: $!"); while (<IN>) { chomp; s/\@HOSTNAME\@/$glob_hostname/; if ( /^\s*$/ ) { print OUT "\n"; } elsif (/;$/) { print OUT "$_\n"; } else { print OUT "$_ "; } } close OUT; close IN; mtr_init_args(\$args); mtr_add_arg($args, "--no-defaults"); mtr_add_arg($args, "--bootstrap"); mtr_add_arg($args, "--console"); mtr_add_arg($args, "--skip-grant-tables"); mtr_add_arg($args, "--basedir=%s", $path_my_basedir); mtr_add_arg($args, "--datadir=%s", $data_dir); mtr_add_arg($args, "--skip-innodb"); mtr_add_arg($args, "--skip-ndbcluster"); mtr_add_arg($args, "--skip-bdb"); if ( ! $opt_netware ) { mtr_add_arg($args, "--language=%s", $path_language); mtr_add_arg($args, "--character-sets-dir=%s", $path_charsetsdir); } if ( mtr_run($exe_mysqld, $args, $init_db_sql_tmp, $path_manager_log, $path_manager_log, "") != 0 ) { unlink($init_db_sql_tmp); mtr_error("Error executing mysqld --bootstrap\n" . "Could not install $type test DBs"); } unlink($init_db_sql_tmp);}sub im_prepare_env($) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -