mariadb/mysql-test/main/host_cache_size_functionality.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

180 lines
7.3 KiB
Text

###############################################################################
# #
# Variable Name: Host_Cache_Size #
# Scope: Global #
# Access Type: Dynamic #
# Data Type: numeric #
# #
# #
# Creation Date: 2012-08-31 #
# Author : Tanjot Singh Uppal #
# #
# #
# Description:Test Cases of Dynamic System Variable Host_Cache_Size #
# that checks the behavior of this variable in the following ways #
# * Value Check #
# * Scope Check #
# * Functionality Check #
# * Accessability Check #
# #
# This test does not perform the crash recovery on this variable #
# For crash recovery test on default change please run the ibtest #
###############################################################################
-- source include/have_innodb.inc
-- source include/not_embedded.inc
-- source include/have_innodb_16k.inc
--disable_warnings
echo '#________________________VAR_06_Host_Cache_Size__________________#'
echo '##'
--echo '#---------------------WL6372_VAR_6_01----------------------#'
####################################################################
# Checking default value #
####################################################################
select @@global.Host_Cache_Size > 0;
--echo 1 Expected
--echo '#---------------------WL6372_VAR_6_02----------------------#'
#################################################################################
# Checking the Default value post starting the server with other value #
#################################################################################
--echo # Restart server with Host_Cache_Size 1
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:--host_cache_size=1 " $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
-- enable_reconnect
-- source include/wait_until_connected_again.inc
--disable_warnings
SELECT @@GLOBAL.Host_Cache_Size;
--echo 1 Expected
#set @Default_host_cache_size=(select if(if(@@global.max_connections<500,128+@@global.max_connections,128+@@global.max_connections+floor((@@global.max_connections-500)/20))>2000,2000,if(@@global.max_connections<500,128+@@global.max_connections,128+@@global.max_connections+floor((@@global.max_connections-500)/20))));
set @Default_host_cache_size=128;
SET @@GLOBAL.Host_Cache_Size=DEFAULT;
select @@global.Host_Cache_Size=@Default_host_cache_size;
--echo 1 Expected
--echo '#---------------------WL6372_VAR_6_03----------------------#'
####################################################################
# Checking Value can be set - Dynamic #
####################################################################
--error ER_GLOBAL_VARIABLE
SET @@local.Host_Cache_Size=1;
--echo Expected error 'Global variable'
--error ER_GLOBAL_VARIABLE
SET @@session.Host_Cache_Size=1;
--echo Expected error 'Global variable'
SET @@GLOBAL.Host_Cache_Size=1;
SET @@GLOBAL.Host_Cache_Size=DEFAULT;
SELECT COUNT(@@GLOBAL.Host_Cache_Size);
--echo 1 Expected
select @@global.Host_Cache_Size=@Default_host_cache_size;
--echo 1 Expected
--echo '#---------------------WL6372_VAR_6_04----------------------#'
#################################################################
# Check if the value in GLOBAL Table matches value in variable #
#################################################################
SELECT @@GLOBAL.Host_Cache_Size = VARIABLE_VALUE
FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES
WHERE VARIABLE_NAME='Host_Cache_Size';
--echo 1 Expected
SELECT COUNT(@@GLOBAL.Host_Cache_Size);
--echo 1 Expected
SELECT COUNT(VARIABLE_VALUE)
FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES
WHERE VARIABLE_NAME='Host_Cache_Size';
--echo 1 Expected
--echo '#---------------------WL6372_VAR_6_05----------------------#'
################################################################################
# Checking Variable Scope #
################################################################################
SELECT @@Host_Cache_Size = @@GLOBAL.Host_Cache_Size;
--echo 1 Expected
--Error ER_INCORRECT_GLOBAL_LOCAL_VAR
SELECT COUNT(@@local.Host_Cache_Size);
--echo Expected error 'Variable is a GLOBAL variable'
--Error ER_INCORRECT_GLOBAL_LOCAL_VAR
SELECT COUNT(@@SESSION.Host_Cache_Size);
--echo Expected error 'Variable is a GLOBAL variable'
SELECT COUNT(@@GLOBAL.Host_Cache_Size);
--echo 1 Expected
--Error ER_BAD_FIELD_ERROR
SELECT Host_Cache_Size = @@SESSION.Host_Cache_Size;
--echo Expected error 'Unknown column Host_Cache_Size in field list'
#The below check has been commented out as the IP fetch is different in a P2P connection than BroadBand connection
#--echo '#---------------------WL6372_VAR_6_06----------------------#'
###############################################################################
# Checking the Host cahce functionality #
###############################################################################
#SET @@GLOBAL.Host_Cache_Size=2;
#--disable_warnings
#--perl
#my $ip=`ifconfig | egrep "inet addr|inet" | sed -e 's/^.*inet addr://' -e 's/^.*inet//'| sed 's/ .*\$//'|egrep -i "broadcast|bcast"|head -1|awk '{print $1}'`;
#open (LOGFH, ">" . $ENV{'MYSQL_TMP_DIR'} . "/bind_ip");
#print LOGFH "let \$bind_ip = $ip;\n";
#close LOGFH;
#EOF
#--source $MYSQL_TMP_DIR/bind_ip
#--remove_file $MYSQL_TMP_DIR/bind_ip
#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:--bind-address=$bind_ip " $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
#-- enable_reconnect
#-- source include/wait_until_connected_again.inc
#connection default;
#--disable_warnings
#create user binduser;
#grant all on *.* to binduser;
#select count(IP) from performance_schema.host_cache;
#--echo 0 Expected
#connect (con1,$bind_ip,binduser,,);
#select count(IP) from performance_schema.host_cache;
#--echo 1 Expected
#disconnect con1;
#connection default;
#--disable_warnings
# The below check is hashed until the BUG14689561# is fixed
#
#flush hosts;
#connect (con2,$bind_ip,binduser,,);
#select count(IP) from performance_schema.host_cache;
#--echo 1 Expected
#disconnect con2;
SET @@GLOBAL.Host_Cache_Size=DEFAULT;