Skip to content
Permalink
Browse files
MDEV-25802 mtr: race condition if the test quickly restarts twice
expect file is always removed before starting a server.
So if it exists here, it means the server started successfully,
mysqltest continued executing the test, created a new expect file,
and shut down the server. All while we were waiting for the server
to start.

In other words, if the expect file exists, the server did actually start.
Even if it isn't running now.

This fixes occasional failures of innodb.log_corruption (in 10.6)
  • Loading branch information
vuvova committed Jul 6, 2021
1 parent 6a466db commit 1223cfe
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 7 deletions.
@@ -40,7 +40,7 @@ BEGIN
eval 'sub USE_NETPING { $use_netping }';
}

sub sleep_until_file_created ($$$$);
sub sleep_until_file_created ($$$$$);
sub mtr_ping_port ($);

sub mtr_ping_port ($) {
@@ -102,8 +102,9 @@ ($)

# FIXME check that the pidfile contains the expected pid!

sub sleep_until_file_created ($$$$) {
sub sleep_until_file_created ($$$$$) {
my $pidfile= shift;
my $expectfile = shift;
my $timeout= shift;
my $proc= shift;
my $warn_seconds = shift;
@@ -122,6 +123,7 @@ ($$$$)
# Check if it died after the fork() was successful
if ( defined $proc and ! $proc->wait_one(0) )
{
return 1 if -r $expectfile;
mtr_warning("Process $proc died after mysql-test-run waited $seconds " .
"seconds for $pidfile to be created.");
return 0;
@@ -2845,11 +2845,11 @@ ($)

sub mysql_server_wait {
my ($mysqld, $tinfo) = @_;
my $expect_file= "$opt_vardir/tmp/".$mysqld->name().".expect";

if (!sleep_until_file_created($mysqld->value('pid-file'),
$opt_start_timeout,
$mysqld->{'proc'},
$warn_seconds))
if (!sleep_until_file_created($mysqld->value('pid-file'), $expect_file,
$opt_start_timeout, $mysqld->{'proc'},
$warn_seconds))
{
$tinfo->{comment}= "Failed to start ".$mysqld->name() . "\n";
return 1;
@@ -5123,7 +5123,8 @@ ($$)

$mysqld->{'started_opts'}= $extra_opts;

return sleep_until_file_created($mysqld->value('pid-file'),
my $expect_file= "$opt_vardir/tmp/".$mysqld->name().".expect";
return sleep_until_file_created($mysqld->value('pid-file'), $expect_file,
$opt_start_timeout, $mysqld->{'proc'}, $warn_seconds);
}

0 comments on commit 1223cfe

Please sign in to comment.