mariadb/mysql-test/suite/perfschema/t/statement_program_lost_inst.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

72 lines
2.8 KiB
Text

#-------------------------------------------------------------
# Tests for PERFORMANCE_SCHEMA stored programs instrumentation
#-------------------------------------------------------------
#
# Test case to show the behaviour of stored program instrumentation
# when values of the system variables performance_schema_max_program_instances &
# performance_schema_max_statement_stack are less than the statistics collected.
# The status of the lost instrumentation is shown through the status variables
# performance_schema_program_lost & performance_schema_nested_statement_lost
#
# Restarting the server at the begining of the test.
# This is to avoid the instrumentation of extra SPs called by MTR
# These additional stored programs which will be added might cause
# result content mismatch failure.
--source include/not_embedded.inc
--source include/have_perfschema.inc
let $restart_file= $MYSQLTEST_VARDIR/tmp/mysqld.1.expect;
--write_line wait $restart_file
--shutdown_server
--source include/wait_until_disconnected.inc
--write_line "restart:--performance_schema_max_program_instances=7 --performance_schema_max_statement_stack=2 --thread_stack=655360" $restart_file
--enable_reconnect
--source include/wait_until_connected_again.inc
--source ../include/start_server_common.inc
# Values of variables server variables
show global variables like "performance_schema_max_program_instances";
show global variables like "performance_schema_max_statement_stack";
--echo #####################
--echo # Setup
--echo #####################
--source suite/perfschema/include/program_nested_setup.inc
# Truncate summary table
TRUNCATE performance_schema.events_statements_summary_by_program;
SELECT OBJECT_TYPE, OBJECT_NAME, OBJECT_SCHEMA FROM
performance_schema.events_statements_summary_by_program
WHERE OBJECT_SCHEMA='nested_sp' ORDER BY OBJECT_NAME;
# Flush status now
Flush status;
show global status like "%performance_schema_program_lost%";
show global status like "%performance_schema_nested_statement_lost%";
--echo #####################
--echo # Executing Queries
--echo #####################
--source suite/perfschema/include/program_nested_execution.inc
--echo ###########################################
--echo # Quering PS statement summary table #
--echo ###########################################
SELECT OBJECT_TYPE, OBJECT_NAME, OBJECT_SCHEMA
FROM performance_schema.events_statements_summary_by_program
WHERE OBJECT_SCHEMA='nested_sp' ORDER BY OBJECT_NAME;
# Now check the lost status
show global status like "%performance_schema_program_lost%";
show global status like "%performance_schema_nested_statement_lost%";
--echo #####################
--echo # Cleanup
--echo #####################
--source suite/perfschema/include/program_nested_cleanup.inc