# # 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/check_ipv6.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.ipv6.example.com'; grant select on test.* to 'quota'@'santa.claus.ipv6.example.com'; grant usage on *.* to 'quota'@'santa.claus.ipv6.example.com' with max_connections_per_hour 3; connect (con1,"::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_ipv6,getnameinfo_fake_ipv6,getaddrinfo_fake_good_ipv6"; connect (con2a,"::1",quota,,test,$MASTER_MYPORT,); select "Con2a is alive"; select current_user(); disconnect con2a; --connection default --source ../include/hostcache_dump.inc connect (con2b,"::1",quota,,test,$MASTER_MYPORT,); select "Con2b is alive"; select current_user(); disconnect con2b; --connection default --source ../include/hostcache_dump.inc connect (con2c,"::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,"::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,"::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.ipv6.example.com' with max_connections_per_hour 0; grant usage on *.* to 'quota'@'santa.claus.ipv6.example.com' with max_user_connections 3; flush user_resources; connect (con3a,"::1",quota,,test,$MASTER_MYPORT,); select "Con7 is alive"; select current_user(); --connection default --source ../include/hostcache_dump.inc connect (con3b,"::1",quota,,test,$MASTER_MYPORT,); select "Con3b is alive"; select current_user(); --connection default --source ../include/hostcache_dump.inc connect (con3c,"::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,"::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,"::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.ipv6.example.com' with max_user_connections 0; flush user_resources; set global max_user_connections = 3; connect (con4a,"::1",quota,,test,$MASTER_MYPORT,); select "Con4a is alive"; select current_user(); --connection default --source ../include/hostcache_dump.inc connect (con4b,"::1",quota,,test,$MASTER_MYPORT,); select "Con4b is alive"; select current_user(); --connection default --source ../include/hostcache_dump.inc connect (con4c,"::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,"::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,"::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 = 10; flush user_resources; connect (tmp_con1,"::1",quota,,test,$MASTER_MYPORT,); connect (tmp_con2,"::1",quota,,test,$MASTER_MYPORT,); connect (tmp_con3,"::1",quota,,test,$MASTER_MYPORT,); connect (tmp_con4,"::1",quota,,test,$MASTER_MYPORT,); connect (tmp_con5,"::1",quota,,test,$MASTER_MYPORT,); connect (tmp_con6,"::1",quota,,test,$MASTER_MYPORT,); connect (tmp_con7,"::1",quota,,test,$MASTER_MYPORT,); connect (con5a,"::1",quota,,test,$MASTER_MYPORT,); select "Con4a is alive"; select current_user(); --connection default --source ../include/hostcache_dump.inc connect (con5b,"::1",quota,,test,$MASTER_MYPORT,); select "Con5b is alive"; select current_user(); --connection default --source ../include/hostcache_dump.inc # About ER_CON_COUNT_ERROR, # See comments in hostcache_ipv4_max_con.test --disable_query_log --error ER_CON_COUNT_ERROR, 9999 connect (con5c,"::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,"::1",quota,,test,$MASTER_MYPORT,); --enable_query_log --connection default --source ../include/hostcache_dump.inc disconnect con5a; disconnect con5b; --disconnect tmp_con1 --disconnect tmp_con2 --disconnect tmp_con3 --disconnect tmp_con4 --disconnect tmp_con5 --disconnect tmp_con6 --disconnect tmp_con7 # 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.ipv6.example.com'; drop user 'quota'@'santa.claus.ipv6.example.com'; set global debug_dbug= default;