Commit 95797b96 authored by Sergei Golubchik's avatar Sergei Golubchik

MDEV-8096 vio timeouts are multiplied by 1000 for ssl

in when using vio->read_timeout (and write_timeout) to set
timeouts of a new vio, as in:

  vio_timeout(vio, 0, old_vio.read_timeout)
  vio_timeout(vio, 0, old_vio.write_timeout)

remember that timeouts are stored in ms, but vio_timeout()'s
argument is in seconds.
parent d3a3adb8
...@@ -5912,6 +5912,8 @@ void do_connect(struct st_command *command) ...@@ -5912,6 +5912,8 @@ void do_connect(struct st_command *command)
my_bool con_ssl= 0, con_compress= 0; my_bool con_ssl= 0, con_compress= 0;
my_bool con_pipe= 0; my_bool con_pipe= 0;
my_bool con_shm __attribute__ ((unused))= 0; my_bool con_shm __attribute__ ((unused))= 0;
int read_timeout= 0;
int write_timeout= 0;
struct st_connection* con_slot; struct st_connection* con_slot;
static DYNAMIC_STRING ds_connection_name; static DYNAMIC_STRING ds_connection_name;
...@@ -6008,6 +6010,16 @@ void do_connect(struct st_command *command) ...@@ -6008,6 +6010,16 @@ void do_connect(struct st_command *command)
con_pipe= 1; con_pipe= 1;
else if (length == 3 && !strncmp(con_options, "SHM", 3)) else if (length == 3 && !strncmp(con_options, "SHM", 3))
con_shm= 1; con_shm= 1;
else if (strncasecmp(con_options, "read_timeout=",
sizeof("read_timeout=")-1) == 0)
{
read_timeout= atoi(con_options + sizeof("read_timeout=")-1);
}
else if (strncasecmp(con_options, "write_timeout=",
sizeof("write_timeout=")-1) == 0)
{
write_timeout= atoi(con_options + sizeof("write_timeout=")-1);
}
else else
die("Illegal option to connect: %.*s", die("Illegal option to connect: %.*s",
(int) (end - con_options), con_options); (int) (end - con_options), con_options);
...@@ -6080,6 +6092,18 @@ void do_connect(struct st_command *command) ...@@ -6080,6 +6092,18 @@ void do_connect(struct st_command *command)
if (opt_protocol) if (opt_protocol)
mysql_options(con_slot->mysql, MYSQL_OPT_PROTOCOL, (char*) &opt_protocol); mysql_options(con_slot->mysql, MYSQL_OPT_PROTOCOL, (char*) &opt_protocol);
if (read_timeout)
{
mysql_options(con_slot->mysql, MYSQL_OPT_READ_TIMEOUT,
(char*)&read_timeout);
}
if (write_timeout)
{
mysql_options(con_slot->mysql, MYSQL_OPT_WRITE_TIMEOUT,
(char*)&write_timeout);
}
#ifdef HAVE_SMEM #ifdef HAVE_SMEM
if (con_shm) if (con_shm)
{ {
......
# connect with read timeout so SLEEP() should timeout
# Check ssl turned on
SHOW STATUS LIKE 'Ssl_cipher';
Variable_name Value
Ssl_cipher DHE-RSA-AES256-SHA
SELECT SLEEP(600);
ERROR HY000: Lost connection to MySQL server during query
--source include/have_ssl_communication.inc
# Save the initial number of concurrent sessions
--source include/count_sessions.inc
--echo # connect with read timeout so SLEEP() should timeout
connect (ssl_con,localhost,root,,,,,SSL read_timeout=5);
--echo # Check ssl turned on
--replace_result DHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES256-SHA
SHOW STATUS LIKE 'Ssl_cipher';
# --error CR_SERVER_LOST
--error 2013
SELECT SLEEP(600);
connection default;
disconnect ssl_con;
# Wait till all disconnects are completed
--source include/wait_until_count_sessions.inc
...@@ -227,12 +227,15 @@ my_bool vio_reset(Vio* vio, enum enum_vio_type type, ...@@ -227,12 +227,15 @@ my_bool vio_reset(Vio* vio, enum enum_vio_type type,
Propagate the timeout values. Necessary to also propagate Propagate the timeout values. Necessary to also propagate
the underlying proprieties associated with the timeout, the underlying proprieties associated with the timeout,
such as the socket blocking mode. such as the socket blocking mode.
note: old_vio.read_timeout/old_vio.write_timeout is stored in ms
but vio_timeout() takes seconds as argument, hence the / 1000
*/ */
if (old_vio.read_timeout >= 0) if (old_vio.read_timeout >= 0)
ret|= vio_timeout(vio, 0, old_vio.read_timeout); ret|= vio_timeout(vio, 0, old_vio.read_timeout / 1000);
if (old_vio.write_timeout >= 0) if (old_vio.write_timeout >= 0)
ret|= vio_timeout(vio, 1, old_vio.write_timeout); ret|= vio_timeout(vio, 1, old_vio.write_timeout / 1000);
DBUG_RETURN(MY_TEST(ret)); DBUG_RETURN(MY_TEST(ret));
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment