mirror of
https://github.com/MariaDB/server.git
synced 2025-01-27 01:04:19 +01:00
54999b2863
Merged the majority of the PFS test cases. There are still 19 failing test cases that need more attention.
247 lines
6.5 KiB
Text
247 lines
6.5 KiB
Text
|
|
#
|
|
# Tests for the performance_schema host_cache.
|
|
#
|
|
# Simulate failures from per user quotas:
|
|
# - reported in COUNT_MAX_USER_CONNECTION_ERRORS
|
|
# - reported in COUNT_MAX_USER_CONNECTION_PER_HOUR_ERRORS
|
|
# Simulate failures from server quotas:
|
|
# - reported in COUNT_MAX_CONNECTION_ERRORS
|
|
|
|
--source include/not_embedded.inc
|
|
--source include/have_debug.inc
|
|
--source include/have_perfschema.inc
|
|
|
|
# Enforce a clean state
|
|
--source ../include/wait_for_pfs_thread_count.inc
|
|
--source ../include/hostcache_set_state.inc
|
|
|
|
select @@global.max_connections into @saved_max_connections;
|
|
select @@global.max_user_connections into @saved_max_user_connections;
|
|
|
|
create user 'quota'@'santa.claus.ipv4.example.com';
|
|
grant select on test.* to 'quota'@'santa.claus.ipv4.example.com';
|
|
grant usage on *.* to 'quota'@'santa.claus.ipv4.example.com'
|
|
with max_connections_per_hour 3;
|
|
|
|
connect (con1,"127.0.0.1",root,,test,$MASTER_MYPORT,);
|
|
select "Con1 is alive";
|
|
select current_user();
|
|
disconnect con1;
|
|
|
|
--connection default
|
|
set global debug_dbug= "+d,vio_peer_addr_fake_ipv4,getnameinfo_fake_ipv4,getaddrinfo_fake_good_ipv4";
|
|
|
|
connect (con2a,"127.0.0.1",quota,,test,$MASTER_MYPORT,);
|
|
select "Con2a is alive";
|
|
select current_user();
|
|
disconnect con2a;
|
|
|
|
--connection default
|
|
--source ../include/hostcache_dump.inc
|
|
|
|
connect (con2b,"127.0.0.1",quota,,test,$MASTER_MYPORT,);
|
|
select "Con2b is alive";
|
|
select current_user();
|
|
disconnect con2b;
|
|
|
|
--connection default
|
|
--source ../include/hostcache_dump.inc
|
|
|
|
connect (con2c,"127.0.0.1",quota,,test,$MASTER_MYPORT,);
|
|
select "Con2c is alive";
|
|
select current_user();
|
|
disconnect con2c;
|
|
|
|
--connection default
|
|
--source ../include/hostcache_dump.inc
|
|
|
|
--disable_query_log
|
|
--error ER_USER_LIMIT_REACHED
|
|
connect (con2d,"127.0.0.1",quota,,test,$MASTER_MYPORT,);
|
|
--enable_query_log
|
|
|
|
--connection default
|
|
--source ../include/hostcache_dump.inc
|
|
|
|
--disable_query_log
|
|
--error ER_USER_LIMIT_REACHED
|
|
connect (con2e,"127.0.0.1",quota,,test,$MASTER_MYPORT,);
|
|
--enable_query_log
|
|
|
|
--connection default
|
|
--source ../include/hostcache_dump.inc
|
|
|
|
# Wait for all disconnects
|
|
--source ../include/wait_for_pfs_thread_count.inc
|
|
|
|
grant usage on *.* to 'quota'@'santa.claus.ipv4.example.com'
|
|
with max_connections_per_hour 0;
|
|
grant usage on *.* to 'quota'@'santa.claus.ipv4.example.com'
|
|
with max_user_connections 3;
|
|
flush user_resources;
|
|
|
|
connect (con3a,"127.0.0.1",quota,,test,$MASTER_MYPORT,);
|
|
select "Con7 is alive";
|
|
select current_user();
|
|
|
|
--connection default
|
|
--source ../include/hostcache_dump.inc
|
|
|
|
connect (con3b,"127.0.0.1",quota,,test,$MASTER_MYPORT,);
|
|
select "Con3b is alive";
|
|
select current_user();
|
|
|
|
--connection default
|
|
--source ../include/hostcache_dump.inc
|
|
|
|
connect (con3c,"127.0.0.1",quota,,test,$MASTER_MYPORT,);
|
|
select "Con3c is alive";
|
|
select current_user();
|
|
|
|
--connection default
|
|
--source ../include/hostcache_dump.inc
|
|
|
|
--disable_query_log
|
|
--error ER_USER_LIMIT_REACHED
|
|
connect (con3d,"127.0.0.1",quota,,test,$MASTER_MYPORT,);
|
|
--enable_query_log
|
|
|
|
--connection default
|
|
--source ../include/hostcache_dump.inc
|
|
|
|
--disable_query_log
|
|
--error ER_USER_LIMIT_REACHED
|
|
connect (con3e,"127.0.0.1",quota,,test,$MASTER_MYPORT,);
|
|
--enable_query_log
|
|
|
|
--connection default
|
|
--source ../include/hostcache_dump.inc
|
|
|
|
disconnect con3a;
|
|
disconnect con3b;
|
|
disconnect con3c;
|
|
|
|
# Wait for all disconnects
|
|
--source ../include/wait_for_pfs_thread_count.inc
|
|
|
|
grant usage on *.* to 'quota'@'santa.claus.ipv4.example.com'
|
|
with max_user_connections 0;
|
|
flush user_resources;
|
|
|
|
set global max_user_connections = 3;
|
|
|
|
connect (con4a,"127.0.0.1",quota,,test,$MASTER_MYPORT,);
|
|
select "Con4a is alive";
|
|
select current_user();
|
|
|
|
--connection default
|
|
--source ../include/hostcache_dump.inc
|
|
|
|
connect (con4b,"127.0.0.1",quota,,test,$MASTER_MYPORT,);
|
|
select "Con4b is alive";
|
|
select current_user();
|
|
|
|
--connection default
|
|
--source ../include/hostcache_dump.inc
|
|
|
|
connect (con4c,"127.0.0.1",quota,,test,$MASTER_MYPORT,);
|
|
select "Con4c is alive";
|
|
select current_user();
|
|
|
|
--connection default
|
|
--source ../include/hostcache_dump.inc
|
|
|
|
--disable_query_log
|
|
--error ER_TOO_MANY_USER_CONNECTIONS
|
|
connect (con4d,"127.0.0.1",quota,,test,$MASTER_MYPORT,);
|
|
--enable_query_log
|
|
|
|
--connection default
|
|
--source ../include/hostcache_dump.inc
|
|
|
|
--disable_query_log
|
|
--error ER_TOO_MANY_USER_CONNECTIONS
|
|
connect (con4e,"127.0.0.1",quota,,test,$MASTER_MYPORT,);
|
|
--enable_query_log
|
|
|
|
--connection default
|
|
--source ../include/hostcache_dump.inc
|
|
|
|
disconnect con4a;
|
|
disconnect con4b;
|
|
disconnect con4c;
|
|
|
|
# Wait for all disconnects
|
|
--source ../include/wait_for_pfs_thread_count.inc
|
|
|
|
set global max_user_connections = 0;
|
|
set global max_connections = 3;
|
|
flush user_resources;
|
|
|
|
connect (con5a,"127.0.0.1",quota,,test,$MASTER_MYPORT,);
|
|
select "Con4a is alive";
|
|
select current_user();
|
|
|
|
--connection default
|
|
--source ../include/hostcache_dump.inc
|
|
|
|
connect (con5b,"127.0.0.1",quota,,test,$MASTER_MYPORT,);
|
|
select "Con5b is alive";
|
|
select current_user();
|
|
|
|
--connection default
|
|
--source ../include/hostcache_dump.inc
|
|
|
|
# About error ER_CON_COUNT_ERROR:
|
|
# - this error is associated with SQLSTATE 08004,
|
|
# and returned from 2 places in the server code.
|
|
# - which path returns the error is not predictable,
|
|
# as it depends on the server load and thread scheduling
|
|
# - one path returns a SQLSTATE of 08004
|
|
# - another path returns no SQLSTATE at all,
|
|
# and then the client sets a default value of HY000 for SQLSTATE
|
|
#
|
|
# Testing for error ER_CON_COUNT_ERROR alone causes this to
|
|
# be printed in the result file:
|
|
# - ERROR 08004: Too many connections
|
|
# which in turn causes spurious test failures.
|
|
#
|
|
# To work around this, this scripts expect to see either
|
|
# the error number ER_CON_COUNT_ERROR (it always does)
|
|
# or the error number 9999 (it never does, this error does not exist).
|
|
# The exact error number and SQLSTATE is not printed in the result file,
|
|
# makig this test robust for both cases:
|
|
# - ERROR 08004: Too many connections
|
|
# - ERROR HY000: Too many connections
|
|
|
|
--disable_query_log
|
|
--error ER_CON_COUNT_ERROR, 9999
|
|
connect (con5c,"127.0.0.1",quota,,test,$MASTER_MYPORT,);
|
|
--enable_query_log
|
|
|
|
--connection default
|
|
--source ../include/hostcache_dump.inc
|
|
|
|
--disable_query_log
|
|
--error ER_CON_COUNT_ERROR, 9999
|
|
connect (con5d,"127.0.0.1",quota,,test,$MASTER_MYPORT,);
|
|
--enable_query_log
|
|
|
|
--connection default
|
|
--source ../include/hostcache_dump.inc
|
|
|
|
disconnect con5a;
|
|
disconnect con5b;
|
|
|
|
# Wait for all disconnects
|
|
--source ../include/wait_for_pfs_thread_count.inc
|
|
|
|
set global max_connections = @saved_max_connections;
|
|
set global max_user_connections = @saved_max_user_connections;
|
|
|
|
# revoke all privileges on test.* from 'quota'@'santa.claus.ipv4.example.com';
|
|
drop user 'quota'@'santa.claus.ipv4.example.com';
|
|
|
|
set global debug_dbug= default;
|
|
|