mariadb/mysql-test/include/connect2.inc
unknown c1e69a77a6 Avoid races in connect.test.
The problem was in a test case for Bug33507:
  - when the number of active connections reaches the limit,
    the server accepts only root connections. That's achieved by
    accepting a connection, negotiating with the client and
    checking user credentials. If it is not SUPER, the connection
    is dropped.
  - when the server accepts connection, it increases the counter;
  - when the server drops connection, it decreases the counter;
  - the race was in between of decreasing the counter and accepting
    new connection:
    - max_user_connections = 2;
    - 2 oridinary user connections accepted;
    - extra user connection is establishing;
    - server checked user credentials, and sent 'Too many connections'
      error;
    - the client receives the error and establishes extra SUPER user
      connection;
    - the server however didn't decrease the counter (the extra
      user connection still is "alive" in the server) -- so, the new
      SUPER-user connection, will be dropped, because it exceeds
      (max_user_connections + 1).

The fix is to implement "safe connect", which makes several attempts
to connect and use it in the test script.


mysql-test/r/connect.result:
  Update test file.
mysql-test/t/connect.test:
  Avoid races in connect.test.
mysql-test/include/connect2.inc:
  Auxiliary routine to establish a connection reliably.
2008-03-17 14:26:00 +03:00

56 lines
977 B
PHP

# include/connect2.inc
#
# SUMMARY
#
# Make several attempts to connect.
#
# USAGE
#
# EXAMPLE
#
# connect.test
#
--disable_query_log
let $wait_counter= 300;
if ($wait_timeout)
{
let $wait_counter= `SELECT $wait_timeout * 10`;
}
# Reset $wait_timeout so that its value won't be used on subsequent
# calls, and default will be used instead.
let $wait_timeout= 0;
--echo # -- Establishing connection '$con_name' (user: $con_user_name)...
while ($wait_counter)
{
--disable_abort_on_error
--disable_result_log
--connect ($con_name,localhost,$con_user_name)
--enable_result_log
--enable_abort_on_error
let $error = $mysql_errno;
if (!$error)
{
let $wait_counter= 0;
}
if ($error)
{
real_sleep 0.1;
dec $wait_counter;
}
}
if ($error)
{
--echo # -- Error: can not establish connection '$con_name'.
}
if (!$error)
{
--echo # -- Connection '$con_name' has been established.
}
--enable_query_log