Commit 8eb69922 authored by Bjorn Munch's avatar Bjorn Munch

merge from 5.5-mtr

parents 23d19d3d 4aa59d68
...@@ -5883,7 +5883,7 @@ int read_line(char *buf, int size) ...@@ -5883,7 +5883,7 @@ int read_line(char *buf, int size)
/* Could be a multibyte character */ /* Could be a multibyte character */
/* This code is based on the code in "sql_load.cc" */ /* This code is based on the code in "sql_load.cc" */
#ifdef USE_MB #ifdef USE_MB
int charlen = my_mbcharlen(charset_info, c); int charlen = my_mbcharlen(charset_info, (unsigned char) c);
/* We give up if multibyte character is started but not */ /* We give up if multibyte character is started but not */
/* completed before we pass buf_end */ /* completed before we pass buf_end */
if ((charlen > 1) && (p + charlen) <= buf_end) if ((charlen > 1) && (p + charlen) <= buf_end)
...@@ -5895,16 +5895,16 @@ int read_line(char *buf, int size) ...@@ -5895,16 +5895,16 @@ int read_line(char *buf, int size)
for (i= 1; i < charlen; i++) for (i= 1; i < charlen; i++)
{ {
c= my_getc(cur_file->file);
if (feof(cur_file->file)) if (feof(cur_file->file))
goto found_eof; goto found_eof;
c= my_getc(cur_file->file);
*p++ = c; *p++ = c;
} }
if (! my_ismbchar(charset_info, mb_start, p)) if (! my_ismbchar(charset_info, mb_start, p))
{ {
/* It was not a multiline char, push back the characters */ /* It was not a multiline char, push back the characters */
/* We leave first 'c', i.e. pretend it was a normal char */ /* We leave first 'c', i.e. pretend it was a normal char */
while (p > mb_start) while (p-1 > mb_start)
my_ungetc(*--p); my_ungetc(*--p);
} }
} }
...@@ -9965,6 +9965,7 @@ void free_pointer_array(POINTER_ARRAY *pa) ...@@ -9965,6 +9965,7 @@ void free_pointer_array(POINTER_ARRAY *pa)
void replace_dynstr_append_mem(DYNAMIC_STRING *ds, void replace_dynstr_append_mem(DYNAMIC_STRING *ds,
const char *val, int len) const char *val, int len)
{ {
char lower[512];
#ifdef __WIN__ #ifdef __WIN__
fix_win_paths(val, len); fix_win_paths(val, len);
#endif #endif
...@@ -9972,7 +9973,6 @@ void replace_dynstr_append_mem(DYNAMIC_STRING *ds, ...@@ -9972,7 +9973,6 @@ void replace_dynstr_append_mem(DYNAMIC_STRING *ds,
if (display_result_lower) if (display_result_lower)
{ {
/* Convert to lower case, and do this first */ /* Convert to lower case, and do this first */
char lower[512];
char *c= lower; char *c= lower;
for (const char *v= val; *v; v++) for (const char *v= val; *v; v++)
*c++= my_tolower(charset_info, *v); *c++= my_tolower(charset_info, *v);
......
...@@ -6,7 +6,7 @@ INSERT INTO t1 VALUES (1); ...@@ -6,7 +6,7 @@ INSERT INTO t1 VALUES (1);
source include/show_binlog_events.inc; source include/show_binlog_events.inc;
eval $statement; eval $statement;
source include/show_binlog_events.inc; source include/show_binlog_events.inc;
if (`select '$cleanup' != ''`) { if ($cleanup) {
eval $cleanup; eval $cleanup;
} }
...@@ -22,7 +22,7 @@ INSERT INTO t1 VALUES (3); ...@@ -22,7 +22,7 @@ INSERT INTO t1 VALUES (3);
source include/show_binlog_events.inc; source include/show_binlog_events.inc;
COMMIT; COMMIT;
source include/show_binlog_events.inc; source include/show_binlog_events.inc;
if (`select '$cleanup' != ''`) { if ($cleanup) {
eval $cleanup; eval $cleanup;
} }
...@@ -285,10 +285,10 @@ if (`SELECT $CRC_ARG_type = 7`) { ...@@ -285,10 +285,10 @@ if (`SELECT $CRC_ARG_type = 7`) {
} }
######## execute! ######## ######## execute! ########
if (`SELECT '$CRC_RET_stmt_sidef' != ''`) { if ($CRC_RET_stmt_sidef) {
--echo --echo
--echo Invoking $CRC_RET_desc. --echo Invoking $CRC_RET_desc.
if (`SELECT '$CRC_create' != ''`) { if ($CRC_create) {
--eval $CRC_create --eval $CRC_create
} }
...@@ -365,7 +365,7 @@ if (`SELECT '$CRC_RET_stmt_sidef' != ''`) { ...@@ -365,7 +365,7 @@ if (`SELECT '$CRC_RET_stmt_sidef' != ''`) {
# Invoke created object, discarding the return value. This should not # Invoke created object, discarding the return value. This should not
# give any warning. # give any warning.
if (`SELECT '$CRC_RET_sel_retval' != ''`) { if ($CRC_RET_sel_retval) {
--echo * Invoke statement so that return value is dicarded: expect no warning. --echo * Invoke statement so that return value is dicarded: expect no warning.
--disable_result_log --disable_result_log
--eval $CRC_RET_sel_retval --eval $CRC_RET_sel_retval
......
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
# #
connection slave; connection slave;
if (`SELECT $debug_sync_action = ''`) if (!$debug_sync_action)
{ {
--die Cannot continue. Please set value for debug_sync_action. --die Cannot continue. Please set value for debug_sync_action.
} }
......
...@@ -25,7 +25,7 @@ CALL mtr.add_suppression("Unsafe statement written to the binary log using state ...@@ -25,7 +25,7 @@ CALL mtr.add_suppression("Unsafe statement written to the binary log using state
# MTR is not case-sensitive. # MTR is not case-sensitive.
let $lower_stmt_head= load data; let $lower_stmt_head= load data;
let $UPPER_STMT_HEAD= LOAD DATA; let $UPPER_STMT_HEAD= LOAD DATA;
if (`SELECT '$lock_option' <> ''`) if ($lock_option)
{ {
#if $lock_option is null, an extra blank is added into the statement, #if $lock_option is null, an extra blank is added into the statement,
#this will change the result of rpl_loaddata test case. so $lock_option #this will change the result of rpl_loaddata test case. so $lock_option
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
# Reset DEBUG_SYNC facility for safety. # Reset DEBUG_SYNC facility for safety.
set debug_sync= "RESET"; set debug_sync= "RESET";
if (`SELECT '$restore_table' <> ''`) if ($restore_table)
{ {
--eval create temporary table t_backup select * from $restore_table; --eval create temporary table t_backup select * from $restore_table;
} }
...@@ -82,7 +82,7 @@ connection default; ...@@ -82,7 +82,7 @@ connection default;
--eval delete from $table where i = 0; --eval delete from $table where i = 0;
if (`SELECT '$restore_table' <> ''`) if ($restore_table)
{ {
--eval truncate table $restore_table; --eval truncate table $restore_table;
--eval insert into $restore_table select * from t_backup; --eval insert into $restore_table select * from t_backup;
......
...@@ -23,7 +23,7 @@ ...@@ -23,7 +23,7 @@
# Reset DEBUG_SYNC facility for safety. # Reset DEBUG_SYNC facility for safety.
set debug_sync= "RESET"; set debug_sync= "RESET";
if (`SELECT '$restore_table' <> ''`) if ($restore_table)
{ {
--eval create temporary table t_backup select * from $restore_table; --eval create temporary table t_backup select * from $restore_table;
} }
...@@ -68,7 +68,7 @@ if (!$success) ...@@ -68,7 +68,7 @@ if (!$success)
--eval delete from $table where i = 0; --eval delete from $table where i = 0;
if (`SELECT '$restore_table' <> ''`) if ($restore_table)
{ {
--eval truncate table $restore_table; --eval truncate table $restore_table;
--eval insert into $restore_table select * from t_backup; --eval insert into $restore_table select * from t_backup;
......
...@@ -10,12 +10,12 @@ ...@@ -10,12 +10,12 @@
# # at this point, get_relay_log_pos.inc sets $relay_log_pos. echo position # # at this point, get_relay_log_pos.inc sets $relay_log_pos. echo position
# # in $relay_log_file: $relay_log_pos. # # in $relay_log_file: $relay_log_pos.
if (`SELECT '$relay_log_file' = ''`) if (!$relay_log_file)
{ {
--die 'variable $relay_log_file is null' --die 'variable $relay_log_file is null'
} }
if (`SELECT '$master_log_pos' = ''`) if (!$master_log_pos)
{ {
--die 'variable $master_log_pos is null' --die 'variable $master_log_pos is null'
} }
......
...@@ -44,7 +44,7 @@ connection master; ...@@ -44,7 +44,7 @@ connection master;
# kill the query that is waiting # kill the query that is waiting
eval kill query $connection_id; eval kill query $connection_id;
if (`SELECT '$debug_lock' != ''`) if ($debug_lock)
{ {
# release the lock to allow binlog continue # release the lock to allow binlog continue
eval SELECT RELEASE_LOCK($debug_lock); eval SELECT RELEASE_LOCK($debug_lock);
...@@ -57,7 +57,7 @@ reap; ...@@ -57,7 +57,7 @@ reap;
connection master; connection master;
if (`SELECT '$debug_lock' != ''`) if ($debug_lock)
{ {
# get lock again to make the next query wait # get lock again to make the next query wait
eval SELECT GET_LOCK($debug_lock, 10); eval SELECT GET_LOCK($debug_lock, 10);
......
...@@ -25,7 +25,7 @@ source include/kill_query.inc; ...@@ -25,7 +25,7 @@ source include/kill_query.inc;
connection master; connection master;
disable_query_log; disable_query_log;
disable_result_log; disable_result_log;
if (`SELECT '$debug_lock' != ''`) if ($debug_lock)
{ {
eval SELECT RELEASE_LOCK($debug_lock); eval SELECT RELEASE_LOCK($debug_lock);
} }
...@@ -36,8 +36,8 @@ source include/diff_master_slave.inc; ...@@ -36,8 +36,8 @@ source include/diff_master_slave.inc;
# Acquire the debug lock again if used # Acquire the debug lock again if used
connection master; connection master;
disable_query_log; disable_result_log; if (`SELECT '$debug_lock' != disable_query_log; disable_result_log;
''`) { eval SELECT GET_LOCK($debug_lock, 10); } enable_result_log; if ($debug_lock) { eval SELECT GET_LOCK($debug_lock, 10); }
enable_query_log; enable_result_log; enable_query_log;
connection $connection_name; connection $connection_name;
...@@ -56,7 +56,7 @@ if (`SELECT "$_sql_running" = "Yes" OR "$_io_running" = "Yes"`) { ...@@ -56,7 +56,7 @@ if (`SELECT "$_sql_running" = "Yes" OR "$_io_running" = "Yes"`) {
# Read server variables. # Read server variables.
let $MYSQLD_DATADIR= `SELECT @@datadir`; let $MYSQLD_DATADIR= `SELECT @@datadir`;
let $_fake_filename= query_get_value(SHOW VARIABLES LIKE 'relay_log', Value, 1); let $_fake_filename= query_get_value(SHOW VARIABLES LIKE 'relay_log', Value, 1);
if (`SELECT '$_fake_filename' = ''`) { if (!$_fake_filename) {
--echo Badly written test case: relay_log variable is empty. Please use the --echo Badly written test case: relay_log variable is empty. Please use the
--echo server option --relay-log=FILE. --echo server option --relay-log=FILE.
} }
......
...@@ -18,13 +18,15 @@ if ($is_relay_log) ...@@ -18,13 +18,15 @@ if ($is_relay_log)
--let $_statement=show relaylog events --let $_statement=show relaylog events
} }
if (`SELECT '$binlog_file' <> ''`) if ($binlog_file)
{ {
--let $_statement= $_statement in '$binlog_file' --let $_statement= $_statement in '$binlog_file'
} }
--let $_statement= $_statement from $binlog_start --let $_statement= $_statement from $binlog_start
# Cannot use if($binlog_limit) since the variable may begin with a 0
if (`SELECT '$binlog_limit' <> ''`) if (`SELECT '$binlog_limit' <> ''`)
{ {
--let $_statement= $_statement limit $binlog_limit --let $_statement= $_statement limit $binlog_limit
......
...@@ -48,13 +48,13 @@ let $binlog_name= query_get_value("SHOW MASTER STATUS", File, 1); ...@@ -48,13 +48,13 @@ let $binlog_name= query_get_value("SHOW MASTER STATUS", File, 1);
eval SHOW BINLOG EVENTS IN '$binlog_name'; eval SHOW BINLOG EVENTS IN '$binlog_name';
let $_master_con= $master_connection; let $_master_con= $master_connection;
if (`SELECT '$_master_con' = ''`) if (!$_master_con)
{ {
if (`SELECT '$_con' = 'slave'`) if (`SELECT '$_con' = 'slave'`)
{ {
let $_master_con= master; let $_master_con= master;
} }
if (`SELECT '$_master_con' = ''`) if (!$_master_con)
{ {
--echo Unable to determine master connection. No debug info printed for master. --echo Unable to determine master connection. No debug info printed for master.
--echo Please fix the test case by setting $master_connection before sourcing --echo Please fix the test case by setting $master_connection before sourcing
...@@ -62,7 +62,7 @@ if (`SELECT '$_master_con' = ''`) ...@@ -62,7 +62,7 @@ if (`SELECT '$_master_con' = ''`)
} }
} }
if (`SELECT '$_master_con' != ''`) if ($_master_con)
{ {
let $master_binlog_name_io= query_get_value("SHOW SLAVE STATUS", Master_Log_File, 1); let $master_binlog_name_io= query_get_value("SHOW SLAVE STATUS", Master_Log_File, 1);
......
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
# $master_connection # $master_connection
# See wait_for_slave_param.inc for description. # See wait_for_slave_param.inc for description.
if (`SELECT '$slave_io_errno' = ''`) { if (!$slave_io_errno) {
--die !!!ERROR IN TEST: you must set \$slave_io_errno before sourcing wait_for_slave_io_error.inc --die !!!ERROR IN TEST: you must set \$slave_io_errno before sourcing wait_for_slave_io_error.inc
} }
......
...@@ -53,7 +53,7 @@ if (!$_slave_timeout_counter) ...@@ -53,7 +53,7 @@ if (!$_slave_timeout_counter)
let $slave_tcnt= $_slave_timeout_counter; let $slave_tcnt= $_slave_timeout_counter;
let $_slave_param_comparison= $slave_param_comparison; let $_slave_param_comparison= $slave_param_comparison;
if (`SELECT '$_slave_param_comparison' = ''`) if (!$_slave_param_comparison)
{ {
let $_slave_param_comparison= =; let $_slave_param_comparison= =;
} }
...@@ -73,7 +73,7 @@ while (`SELECT NOT('$_show_slave_status_value' $_slave_param_comparison '$slave_ ...@@ -73,7 +73,7 @@ while (`SELECT NOT('$_show_slave_status_value' $_slave_param_comparison '$slave_
if (!$_slave_timeout_counter) if (!$_slave_timeout_counter)
{ {
--echo **** ERROR: timeout after $slave_tcnt deci-seconds while waiting for slave parameter $slave_param $_slave_param_comparison $slave_param_value **** --echo **** ERROR: timeout after $slave_tcnt deci-seconds while waiting for slave parameter $slave_param $_slave_param_comparison $slave_param_value ****
if (`SELECT '$slave_error_message' != ''`) if ($slave_error_message)
{ {
--echo Message: $slave_error_message --echo Message: $slave_error_message
} }
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
# $master_connection # $master_connection
# See wait_for_slave_param.inc for description. # See wait_for_slave_param.inc for description.
if (`SELECT '$slave_sql_errno' = ''`) { if (!$slave_sql_errno) {
--die !!!ERROR IN TEST: you must set \$slave_sql_errno before sourcing wait_for_slave_sql_error.inc --die !!!ERROR IN TEST: you must set \$slave_sql_errno before sourcing wait_for_slave_sql_error.inc
} }
......
...@@ -45,7 +45,7 @@ if (!$_status_timeout_counter) ...@@ -45,7 +45,7 @@ if (!$_status_timeout_counter)
} }
let $_status_var_comparsion= $status_var_comparsion; let $_status_var_comparsion= $status_var_comparsion;
if (`SELECT '$_status_var_comparsion' = ''`) if (!$_status_var_comparsion)
{ {
let $_status_var_comparsion= =; let $_status_var_comparsion= =;
} }
......
...@@ -33,6 +33,13 @@ sub mtr_exe_maybe_exists(@); ...@@ -33,6 +33,13 @@ sub mtr_exe_maybe_exists(@);
sub mtr_milli_sleep($); sub mtr_milli_sleep($);
sub start_timer($); sub start_timer($);
sub has_expired($); sub has_expired($);
sub init_timers();
sub mark_time_used($);
sub add_total_times($);
sub print_times_used($$);
sub print_total_times($);
our $opt_report_times;
############################################################################## ##############################################################################
# #
...@@ -205,4 +212,81 @@ sub start_timer ($) { return time + $_[0]; } ...@@ -205,4 +212,81 @@ sub start_timer ($) { return time + $_[0]; }
sub has_expired ($) { return $_[0] && time gt $_[0]; } sub has_expired ($) { return $_[0] && time gt $_[0]; }
# Below code is for time usage reporting
use Time::HiRes qw(gettimeofday);
my %time_used= (
'collect' => 0,
'restart' => 0,
'check' => 0,
'ch-warn' => 0,
'test' => 0,
'init' => 0,
);
my %time_text= (
'collect' => "Collecting test cases",
'restart' => "Server stop/start",
'check' => "Check-testcase",
'ch-warn' => "Check for warnings",
'test' => "Test execution",
'init' => "Initialization etc.",
);
# Counts number of reports from workers
my $time_totals= 0;
my $last_timer_set;
sub init_timers() {
$last_timer_set= gettimeofday();
}
sub mark_time_used($) {
my ($name)= @_;
return unless $opt_report_times;
die "Unknown timer $name" unless exists $time_used{$name};
my $curr_time= gettimeofday();
$time_used{$name}+= int (($curr_time - $last_timer_set) * 1000 + .5);
$last_timer_set= $curr_time;
}
sub add_total_times($) {
my ($dummy, $num, @line)= split (" ", $_[0]);
$time_totals++;
foreach my $elem (@line) {
my ($name, $spent)= split (":", $elem);
$time_used{$name}+= $spent;
}
}
sub print_times_used($$) {
my ($server, $num)= @_;
return unless $opt_report_times;
my $output= "SPENT $num";
foreach my $name (keys %time_used) {
my $spent= $time_used{$name};
$output.= " $name:$spent";
}
print $server $output . "\n";
}
sub print_total_times($) {
# Don't print if we haven't received all worker data
return if $time_totals != $_[0];
foreach my $name (keys %time_used)
{
my $spent= $time_used{$name}/1000;
my $text= $time_text{$name};
print ("Spent $spent seconds on $text\n");
}
}
1; 1;
...@@ -116,18 +116,20 @@ sub sleep_until_file_created ($$$) { ...@@ -116,18 +116,20 @@ sub sleep_until_file_created ($$$) {
return 1; return 1;
} }
my $seconds= ($loop * $sleeptime) / 1000;
# Check if it died after the fork() was successful # Check if it died after the fork() was successful
if ( defined $proc and ! $proc->wait_one(0) ) if ( defined $proc and ! $proc->wait_one(0) )
{ {
mtr_warning("Process $proc died"); mtr_warning("Process $proc died after mysql-test-run waited $seconds " .
"seconds for $pidfile to be created.");
return 0; return 0;
} }
mtr_debug("Sleep $sleeptime milliseconds waiting for $pidfile"); mtr_debug("Sleep $sleeptime milliseconds waiting for $pidfile");
# Print extra message every 60 seconds # Print extra message every 60 seconds
my $seconds= ($loop * $sleeptime) / 1000; if ( $seconds > 1 && int($seconds * 10) % 600 == 0 && $seconds < $timeout )
if ( $seconds > 1 and int($seconds * 10) % 600 == 0 )
{ {
my $left= $timeout - $seconds; my $left= $timeout - $seconds;
mtr_warning("Waited $seconds seconds for $pidfile to be created, " . mtr_warning("Waited $seconds seconds for $pidfile to be created, " .
...@@ -138,6 +140,8 @@ sub sleep_until_file_created ($$$) { ...@@ -138,6 +140,8 @@ sub sleep_until_file_created ($$$) {
} }
mtr_warning("Timeout after mysql-test-run waited $timeout seconds " .
"for the process $proc to create a pid file.");
return 0; return 0;
} }
......
...@@ -201,6 +201,7 @@ sub using_extern { return (keys %opts_extern > 0);}; ...@@ -201,6 +201,7 @@ sub using_extern { return (keys %opts_extern > 0);};
our $opt_fast= 0; our $opt_fast= 0;
our $opt_force; our $opt_force;
our $opt_mem= $ENV{'MTR_MEM'}; our $opt_mem= $ENV{'MTR_MEM'};
our $opt_clean_vardir= $ENV{'MTR_CLEAN_VARDIR'};
our $opt_gcov; our $opt_gcov;
our $opt_gcov_exe= "gcov"; our $opt_gcov_exe= "gcov";
...@@ -241,6 +242,7 @@ my $opt_skip_core; ...@@ -241,6 +242,7 @@ my $opt_skip_core;
our $opt_check_testcases= 1; our $opt_check_testcases= 1;
my $opt_mark_progress; my $opt_mark_progress;
my $opt_max_connections; my $opt_max_connections;
our $opt_report_times= 0;
my $opt_sleep; my $opt_sleep;
...@@ -354,8 +356,11 @@ sub main { ...@@ -354,8 +356,11 @@ sub main {
} }
} }
init_timers();
mtr_report("Collecting tests..."); mtr_report("Collecting tests...");
my $tests= collect_test_cases($opt_reorder, $opt_suites, \@opt_cases, \@opt_skip_test_list); my $tests= collect_test_cases($opt_reorder, $opt_suites, \@opt_cases, \@opt_skip_test_list);
mark_time_used('collect');
if ( $opt_report_features ) { if ( $opt_report_features ) {
# Put "report features" as the first test to run # Put "report features" as the first test to run
...@@ -424,6 +429,7 @@ sub main { ...@@ -424,6 +429,7 @@ sub main {
$opt_tmpdir= "$opt_tmpdir/$child_num"; $opt_tmpdir= "$opt_tmpdir/$child_num";
} }
init_timers();
run_worker($server_port, $child_num); run_worker($server_port, $child_num);
exit(1); exit(1);
} }
...@@ -436,6 +442,8 @@ sub main { ...@@ -436,6 +442,8 @@ sub main {
mtr_print_thick_line(); mtr_print_thick_line();
mtr_print_header(); mtr_print_header();
mark_time_used('init');
my $completed= run_test_server($server, $tests, $opt_parallel); my $completed= run_test_server($server, $tests, $opt_parallel);
exit(0) if $opt_start_exit; exit(0) if $opt_start_exit;
...@@ -481,8 +489,12 @@ sub main { ...@@ -481,8 +489,12 @@ sub main {
$opt_gcov_msg, $opt_gcov_err); $opt_gcov_msg, $opt_gcov_err);
} }
print_total_times($opt_parallel) if $opt_report_times;
mtr_report_stats("Completed", $completed); mtr_report_stats("Completed", $completed);
remove_vardir_subs() if $opt_clean_vardir;
exit(0); exit(0);
} }
...@@ -613,13 +625,15 @@ sub run_test_server ($$$) { ...@@ -613,13 +625,15 @@ sub run_test_server ($$$) {
if ($test_has_failed and $retries <= $opt_retry){ if ($test_has_failed and $retries <= $opt_retry){
# Test should be run one more time unless it has failed # Test should be run one more time unless it has failed
# too many times already # too many times already
my $tname= $result->{name};
my $failures= $result->{failures}; my $failures= $result->{failures};
if ($opt_retry > 1 and $failures >= $opt_retry_failure){ if ($opt_retry > 1 and $failures >= $opt_retry_failure){
mtr_report("\nTest has failed $failures times,", mtr_report("\nTest $tname has failed $failures times,",
"no more retries!\n"); "no more retries!\n");
} }
else { else {
mtr_report("\nRetrying test, attempt($retries/$opt_retry)...\n"); mtr_report("\nRetrying test $tname, ".
"attempt($retries/$opt_retry)...\n");
delete($result->{result}); delete($result->{result});
$result->{retries}= $retries+1; $result->{retries}= $retries+1;
$result->write_test($sock, 'TESTCASE'); $result->write_test($sock, 'TESTCASE');
...@@ -655,6 +669,9 @@ sub run_test_server ($$$) { ...@@ -655,6 +669,9 @@ sub run_test_server ($$$) {
elsif ($line eq 'START'){ elsif ($line eq 'START'){
; # Send first test ; # Send first test
} }
elsif ($line =~ /^SPENT/) {
add_total_times($line);
}
else { else {
mtr_error("Unknown response: '$line' from client"); mtr_error("Unknown response: '$line' from client");
} }
...@@ -786,7 +803,9 @@ sub run_worker ($) { ...@@ -786,7 +803,9 @@ sub run_worker ($) {
# Ask server for first test # Ask server for first test
print $server "START\n"; print $server "START\n";
while(my $line= <$server>){ mark_time_used('init');
while (my $line= <$server>){
chomp($line); chomp($line);
if ($line eq 'TESTCASE'){ if ($line eq 'TESTCASE'){
my $test= My::Test::read_test($server); my $test= My::Test::read_test($server);
...@@ -804,16 +823,20 @@ sub run_worker ($) { ...@@ -804,16 +823,20 @@ sub run_worker ($) {
# Send it back, now with results set # Send it back, now with results set
#$test->print_test(); #$test->print_test();
$test->write_test($server, 'TESTRESULT'); $test->write_test($server, 'TESTRESULT');
mark_time_used('restart');
} }
elsif ($line eq 'BYE'){ elsif ($line eq 'BYE'){
mtr_report("Server said BYE"); mtr_report("Server said BYE");
stop_all_servers($opt_shutdown_timeout); stop_all_servers($opt_shutdown_timeout);
mark_time_used('restart');
if ($opt_valgrind_mysqld) { if ($opt_valgrind_mysqld) {
valgrind_exit_reports(); valgrind_exit_reports();
} }
if ( $opt_gprof ) { if ( $opt_gprof ) {
gprof_collect (find_mysqld($basedir), keys %gprof_dirs); gprof_collect (find_mysqld($basedir), keys %gprof_dirs);
} }
mark_time_used('init');
print_times_used($server, $thread_num);
exit(0); exit(0);
} }
else { else {
...@@ -954,6 +977,7 @@ sub command_line_setup { ...@@ -954,6 +977,7 @@ sub command_line_setup {
'tmpdir=s' => \$opt_tmpdir, 'tmpdir=s' => \$opt_tmpdir,
'vardir=s' => \$opt_vardir, 'vardir=s' => \$opt_vardir,
'mem' => \$opt_mem, 'mem' => \$opt_mem,
'clean-vardir' => \$opt_clean_vardir,
'client-bindir=s' => \$path_client_bindir, 'client-bindir=s' => \$path_client_bindir,
'client-libdir=s' => \$path_client_libdir, 'client-libdir=s' => \$path_client_libdir,
...@@ -986,6 +1010,7 @@ sub command_line_setup { ...@@ -986,6 +1010,7 @@ sub command_line_setup {
'timediff' => \&report_option, 'timediff' => \&report_option,
'max-connections=i' => \$opt_max_connections, 'max-connections=i' => \$opt_max_connections,
'default-myisam!' => \&collect_option, 'default-myisam!' => \&collect_option,
'report-times' => \$opt_report_times,
'help|h' => \$opt_usage, 'help|h' => \$opt_usage,
'list-options' => \$opt_list_options, 'list-options' => \$opt_list_options,
...@@ -2256,6 +2281,12 @@ sub environment_setup { ...@@ -2256,6 +2281,12 @@ sub environment_setup {
} }
sub remove_vardir_subs() {
foreach my $sdir ( glob("$opt_vardir/*") ) {
mtr_verbose("Removing subdir $sdir");
rmtree($sdir);
}
}
# #
# Remove var and any directories in var/ created by previous # Remove var and any directories in var/ created by previous
...@@ -2300,11 +2331,7 @@ sub remove_stale_vardir () { ...@@ -2300,11 +2331,7 @@ sub remove_stale_vardir () {
mtr_error("The destination for symlink $opt_vardir does not exist") mtr_error("The destination for symlink $opt_vardir does not exist")
if ! -d readlink($opt_vardir); if ! -d readlink($opt_vardir);
foreach my $bin ( glob("$opt_vardir/*") ) remove_vardir_subs();
{
mtr_verbose("Removing bin $bin");
rmtree($bin);
}
} }
} }
else else
...@@ -3222,6 +3249,7 @@ sub check_testcase($$) ...@@ -3222,6 +3249,7 @@ sub check_testcase($$)
if ( keys(%started) == 0){ if ( keys(%started) == 0){
# All checks completed # All checks completed
mark_time_used('check');
return 0; return 0;
} }
# Wait for next process to exit # Wait for next process to exit
...@@ -3237,7 +3265,8 @@ sub check_testcase($$) ...@@ -3237,7 +3265,8 @@ sub check_testcase($$)
"\nMTR's internal check of the test case '$tname' failed. "\nMTR's internal check of the test case '$tname' failed.
This means that the test case does not preserve the state that existed This means that the test case does not preserve the state that existed
before the test case was executed. Most likely the test case did not before the test case was executed. Most likely the test case did not
do a proper clean-up. do a proper clean-up. It could also be caused by the previous test run
by this thread, if the server wasn't restarted.
This is the diff of the states of the servers before and after the This is the diff of the states of the servers before and after the
test case was executed:\n"; test case was executed:\n";
$tinfo->{check}.= $report; $tinfo->{check}.= $report;
...@@ -3279,6 +3308,11 @@ test case was executed:\n"; ...@@ -3279,6 +3308,11 @@ test case was executed:\n";
# Kill any check processes still running # Kill any check processes still running
map($_->kill(), values(%started)); map($_->kill(), values(%started));
mtr_warning("Check-testcase failed, this could also be caused by the" .
" previous test run by this worker thread")
if $result > 1 && $mode eq "before";
mark_time_used('check');
return $result; return $result;
} }
...@@ -3588,6 +3622,7 @@ sub run_testcase ($) { ...@@ -3588,6 +3622,7 @@ sub run_testcase ($) {
return 1; return 1;
} }
} }
mark_time_used('restart');
# -------------------------------------------------------------------- # --------------------------------------------------------------------
# If --start or --start-dirty given, stop here to let user manually # If --start or --start-dirty given, stop here to let user manually
...@@ -3640,6 +3675,8 @@ sub run_testcase ($) { ...@@ -3640,6 +3675,8 @@ sub run_testcase ($) {
do_before_run_mysqltest($tinfo); do_before_run_mysqltest($tinfo);
mark_time_used('init');
if ( $opt_check_testcases and check_testcase($tinfo, "before") ){ if ( $opt_check_testcases and check_testcase($tinfo, "before") ){
# Failed to record state of server or server crashed # Failed to record state of server or server crashed
report_failure_and_restart($tinfo); report_failure_and_restart($tinfo);
...@@ -3686,6 +3723,7 @@ sub run_testcase ($) { ...@@ -3686,6 +3723,7 @@ sub run_testcase ($) {
} }
mtr_verbose("Got $proc"); mtr_verbose("Got $proc");
mark_time_used('test');
# ---------------------------------------------------- # ----------------------------------------------------
# Was it the test program that exited # Was it the test program that exited
# ---------------------------------------------------- # ----------------------------------------------------
...@@ -3912,7 +3950,9 @@ sub get_log_from_proc ($$) { ...@@ -3912,7 +3950,9 @@ sub get_log_from_proc ($$) {
foreach my $mysqld (mysqlds()) { foreach my $mysqld (mysqlds()) {
if ($mysqld->{proc} eq $proc) { if ($mysqld->{proc} eq $proc) {
my @srv_lines= extract_server_log($mysqld->value('#log-error'), $name); my @srv_lines= extract_server_log($mysqld->value('#log-error'), $name);
$srv_log= "\nServer log from this test:\n" . join ("", @srv_lines); $srv_log= "\nServer log from this test:\n" .
"----------SERVER LOG START-----------\n". join ("", @srv_lines) .
"----------SERVER LOG END-------------\n";
last; last;
} }
} }
...@@ -4089,6 +4129,7 @@ sub check_warnings ($) { ...@@ -4089,6 +4129,7 @@ sub check_warnings ($) {
if ( keys(%started) == 0){ if ( keys(%started) == 0){
# All checks completed # All checks completed
mark_time_used('ch-warn');
return $result; return $result;
} }
# Wait for next process to exit # Wait for next process to exit
...@@ -4121,6 +4162,7 @@ sub check_warnings ($) { ...@@ -4121,6 +4162,7 @@ sub check_warnings ($) {
# Kill any check processes still running # Kill any check processes still running
map($_->kill(), values(%started)); map($_->kill(), values(%started));
mark_time_used('ch-warn');
return $result; return $result;
} }
...@@ -5084,6 +5126,8 @@ sub start_mysqltest ($) { ...@@ -5084,6 +5126,8 @@ sub start_mysqltest ($) {
my $exe= $exe_mysqltest; my $exe= $exe_mysqltest;
my $args; my $args;
mark_time_used('init');
mtr_init_args(\$args); mtr_init_args(\$args);
mtr_add_arg($args, "--defaults-file=%s", $path_config_file); mtr_add_arg($args, "--defaults-file=%s", $path_config_file);
...@@ -5565,6 +5609,8 @@ Options to control directories to use ...@@ -5565,6 +5609,8 @@ Options to control directories to use
for tmpfs (/dev/shm) for tmpfs (/dev/shm)
The option can also be set using environment The option can also be set using environment
variable MTR_MEM=[DIR] variable MTR_MEM=[DIR]
clean-vardir Clean vardir if tests were successful and if
running in "memory". Otherwise this option is ignored
client-bindir=PATH Path to the directory where client binaries are located client-bindir=PATH Path to the directory where client binaries are located
client-libdir=PATH Path to the directory where client libraries are located client-libdir=PATH Path to the directory where client libraries are located
...@@ -5724,6 +5770,8 @@ Misc options ...@@ -5724,6 +5770,8 @@ Misc options
default-myisam Set default storage engine to MyISAM for non-innodb default-myisam Set default storage engine to MyISAM for non-innodb
tests. This is needed after switching default storage tests. This is needed after switching default storage
engine to InnoDB. engine to InnoDB.
report-times Report how much time has been spent on different
phases of test execution.
HERE HERE
exit(1); exit(1);
......
...@@ -321,7 +321,7 @@ while (`SELECT $unsafe_type < 9`) { ...@@ -321,7 +321,7 @@ while (`SELECT $unsafe_type < 9`) {
--source extra/rpl_tests/create_recursive_construct.inc --source extra/rpl_tests/create_recursive_construct.inc
# Drop created object. # Drop created object.
if (`SELECT '$drop_3' != ''`) { if ($drop_3) {
--eval $drop_3 --eval $drop_3
} }
--inc $call_type_3 --inc $call_type_3
...@@ -330,7 +330,7 @@ while (`SELECT $unsafe_type < 9`) { ...@@ -330,7 +330,7 @@ while (`SELECT $unsafe_type < 9`) {
} # if (!is_toplevel_2) } # if (!is_toplevel_2)
# Drop created object. # Drop created object.
if (`SELECT '$drop_2' != ''`) { if ($drop_2) {
--eval $drop_2 --eval $drop_2
} }
--inc $call_type_2 --inc $call_type_2
...@@ -338,7 +338,7 @@ while (`SELECT $unsafe_type < 9`) { ...@@ -338,7 +338,7 @@ while (`SELECT $unsafe_type < 9`) {
} # if (!is_toplevel_1) } # if (!is_toplevel_1)
# Drop created object. # Drop created object.
if (`SELECT '$drop_1' != ''`) { if ($drop_1) {
--eval $drop_1 --eval $drop_1
} }
--inc $call_type_1 --inc $call_type_1
......
...@@ -119,7 +119,7 @@ echo [on master]; ...@@ -119,7 +119,7 @@ echo [on master];
# This will block the execution of a statement at the DBUG_SYNC_POINT # This will block the execution of a statement at the DBUG_SYNC_POINT
# with given lock name # with given lock name
if (`SELECT '$debug_lock' != ''`) if ($debug_lock)
{ {
disable_query_log; disable_query_log;
disable_result_log; disable_result_log;
......
...@@ -331,7 +331,7 @@ eval select $mysql_errno as "after_!errno_masked_error" ; ...@@ -331,7 +331,7 @@ eval select $mysql_errno as "after_!errno_masked_error" ;
--exec illegal_command --exec illegal_command
--cat_file does_not_exist --cat_file does_not_exist
--perl --perl
exit(1); exit(2);
EOF EOF
# ---------------------------------------------------------------------------- # ----------------------------------------------------------------------------
......
...@@ -53,7 +53,7 @@ while (!`select @aborted_clients`) ...@@ -53,7 +53,7 @@ while (!`select @aborted_clients`)
dec $retries; dec $retries;
if (!$retries) if (!$retries)
{ {
Failed to detect that client has been aborted; die Failed to detect that client has been aborted;
} }
} }
--enable_query_log --enable_query_log
...@@ -108,7 +108,7 @@ while (!`select @aborted_clients`) ...@@ -108,7 +108,7 @@ while (!`select @aborted_clients`)
dec $retries; dec $retries;
if (!$retries) if (!$retries)
{ {
Failed to detect that client has been aborted; die Failed to detect that client has been aborted;
} }
} }
--enable_query_log --enable_query_log
......
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