mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 03:52:35 +01:00
061adae9a2
On Windows systems, occurrences of ERROR_SHARING_VIOLATION due to conflicting share modes between processes accessing the same file can result in CreateFile failures. mysys' my_open() already incorporates a workaround by implementing wait/retry logic on Windows. But this does not help if files are opened using shell redirection like mysqltest traditionally did it, i.e via --echo exec "some text" > output_file In such cases, it is cmd.exe, that opens the output_file, and it won't do any sharing-violation retries. This commit addresses the issue by introducing a new built-in command, 'write_line', in mysqltest. This new command serves as a brief alternative to 'write_file', with a single line output, that also resolves variables like "exec" would. Internally, this command will use my_open(), and therefore retry-on-error logic. Hopefully this will eliminate the very sporadic "can't open file because it is used by another process" error on CI.
65 lines
2.2 KiB
Text
65 lines
2.2 KiB
Text
#
|
|
--source include/not_windows.inc
|
|
--source include/not_embedded.inc
|
|
|
|
#
|
|
# Bug#14757009 : WHEN THE GENERAL_LOG IS A SOCKET AND THE READER GOES AWAY,
|
|
# MYSQL QUITS WORKING.
|
|
#
|
|
# MDEV-6870 Not possible to use FIFO file as a general_log file
|
|
#
|
|
|
|
--let $gen_log_file= $MYSQLTEST_VARDIR/tmp/general_log.fifo
|
|
--let $slow_query_log_file= $MYSQLTEST_VARDIR/tmp/slow_log.fifo
|
|
--let GREP_FILE=$MYSQLTEST_VARDIR/log/mysqld.1.err
|
|
|
|
--exec mkfifo $gen_log_file
|
|
--exec mkfifo $slow_query_log_file
|
|
|
|
--echo # Case 1: Setting fifo file to general_log_file and slow_query_log_file
|
|
--echo # system variable.
|
|
# Setting fifo file to general log reports an error because the other end is closed
|
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
|
--error ER_WRONG_VALUE_FOR_VAR
|
|
--eval SET GLOBAL general_log_file="$gen_log_file";
|
|
|
|
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
|
--error ER_WRONG_VALUE_FOR_VAR
|
|
--eval SET GLOBAL slow_query_log_file="$slow_query_log_file";
|
|
|
|
--echo # Case 2: Starting server with fifo file as general log file
|
|
--echo # and slow query log file.
|
|
# Restart server with fifo file as general log file.
|
|
--write_line wait $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
|
--shutdown_server
|
|
--source include/wait_until_disconnected.inc
|
|
--enable_reconnect
|
|
# Write file to make mysql-test-run.pl start up the server again
|
|
--write_line "restart: --general-log-file=$gen_log_file --slow-query-log-file=$slow_query_log_file" $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
|
--source include/wait_until_connected_again.inc
|
|
|
|
# Error 6 is reported, because the other end is closed
|
|
call mtr.add_suppression("Could not use .* for logging \\(error 6\\)");
|
|
call mtr.add_suppression("File '.*' not found \\(Errcode: 6 ");
|
|
--perl
|
|
my $file= $ENV{'GREP_FILE'};
|
|
my $pattern= "for logging \\(error 6\\)\\. Turning logging off for the whole duration";
|
|
open(FILE, "$file") or die("Unable to open $file: $!\n");
|
|
my $count = 0;
|
|
while (<FILE>) {
|
|
if ($_ =~ m/$pattern/) {
|
|
$count++;
|
|
break;
|
|
}
|
|
}
|
|
if ($count >= 2){
|
|
print "Setting fifo file as general log file and slow query log failed.\n";
|
|
} else {
|
|
print "test failed.\n";
|
|
}
|
|
close(FILE);
|
|
EOF
|
|
|
|
# Cleanup
|
|
--remove_file $gen_log_file
|
|
--remove_file $slow_query_log_file
|