mariadb/mysql-test/suite/perfschema/t/setup_instruments_defaults.test
Vladislav Vaintroub 061adae9a2 MDEV-16944 Fix file sharing issues on Windows in mysqltest
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.
2024-04-17 16:52:37 +02:00

100 lines
2.9 KiB
Text

# Tests for PERFORMANCE_SCHEMA
--source include/not_embedded.inc
--source include/have_perfschema.inc
# Verify that the configuration options were applied correctly to the
# performance_schema.setup_instruments table. These instruments that are known to persist across
# platforms and the various compile options.
--echo #
--echo # Verify that the configuration file defaults were processed correctly
--echo #
SELECT * FROM performance_schema.setup_instruments
WHERE name IN (
'wait/synch/mutex/sql/LOCK_user_conn',
'wait/synch/mutex/sql/LOCK_uuid_generator',
'wait/synch/mutex/sql/LOCK_plugin',
'stage/sql/creating table')
AND enabled = 'yes' AND timed = 'no'
ORDER BY name;
SELECT * FROM performance_schema.setup_instruments
WHERE name = 'wait/synch/mutex/sql/LOCK_thd_list'
AND enabled = 'no' AND timed = 'no';
SELECT * FROM performance_schema.setup_instruments
WHERE name IN (
'wait/synch/mutex/sql/LOG_INFO::lock',
'wait/synch/mutex/sql/THD::LOCK_thd_list')
AND enabled = 'yes' AND timed = 'yes'
ORDER BY name;
SELECT * FROM performance_schema.setup_instruments
WHERE name = 'wait/synch/mutex/sql/hash_filo::lock'
AND enabled = 'no' AND timed = 'no'
ORDER BY name;
--echo #
--echo # Verify that the memory instruments are never timed
--echo #
SELECT * FROM performance_schema.setup_instruments
WHERE name like 'memory/%'
AND timed = 'YES';
--echo #
--echo # Verify that the memory/performance_schema instruments are never disabled
--echo #
SELECT * FROM performance_schema.setup_instruments
WHERE name like 'memory/performance_schema/%'
AND enabled = 'NO';
--echo #
--echo # Verify that the instrument startup settings are not not visible.
--echo #
SHOW VARIABLES LIKE "%/wait/synch/mutex%";
--echo #
--echo # Verify command line options are processed correctly
--echo #
# The instrument wait/io/table/sql/handler should be enabled and timed. We will
# restart the server with the instrument disabled from the command line.
--echo #
--echo # Verify that wait/io/table/sql/handler is enabled and timed
--echo #
SELECT * FROM performance_schema.setup_instruments
WHERE name like "%wait/io/table/sql/handler%";
# Write file to make mysql-test-run.pl wait for the server to stop
--write_line wait $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
# Restart the server
--echo #
--echo # Stop server
--send_shutdown
--source include/wait_until_disconnected.inc
--echo # Restart server with wait/io/table/sql/handler disabled
--write_line "restart:--loose-performance-schema-instrument=%wait/io/table/sql/%=off" $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
# Turn on reconnect
--echo # Enable reconnect
--enable_reconnect
# Wait for server to be back online again
--echo # Wait until connected again
--source include/wait_until_connected_again.inc
# Turn off reconnect again
--echo # Disable reconnect
--disable_reconnect
--echo #
--echo # Verify that wait/io/table is disabled
--echo #
SELECT * FROM performance_schema.setup_instruments
WHERE name like "%wait/io/table/sql/handler%";