Mercurial > dovecot > core-2.2
changeset 19321:2730e603547d
mysql: Added connect/read/write_timeout settings. Default to 30s read/write_timeout.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Tue, 20 Oct 2015 17:07:20 +0300 |
parents | e9f5db1e5770 |
children | 89323ed80676 |
files | src/lib-sql/driver-mysql.c |
diffstat | 1 files changed, 20 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-sql/driver-mysql.c Tue Oct 20 16:57:34 2015 +0300 +++ b/src/lib-sql/driver-mysql.c Tue Oct 20 17:07:20 2015 +0300 @@ -23,6 +23,9 @@ #endif #include <errmsg.h> +#define MYSQL_DEFAULT_READ_TIMEOUT_SECS 30 +#define MYSQL_DEFAULT_WRITE_TIMEOUT_SECS 30 + struct mysql_db { struct sql_db api; @@ -33,6 +36,7 @@ const char *option_file, *option_group; in_port_t port; unsigned int client_flags; + unsigned int connect_timeout, read_timeout, write_timeout; time_t last_success; MYSQL *mysql; @@ -76,7 +80,7 @@ struct mysql_db *db = (struct mysql_db *)_db; const char *unix_socket, *host; unsigned long client_flags = db->client_flags; - unsigned int secs_used, connect_timeout = SQL_CONNECT_TIMEOUT_SECS; + unsigned int secs_used; time_t start_time; bool failed; @@ -97,7 +101,9 @@ db->option_file); } - mysql_options(db->mysql, MYSQL_OPT_CONNECT_TIMEOUT, &connect_timeout); + mysql_options(db->mysql, MYSQL_OPT_CONNECT_TIMEOUT, &db->connect_timeout); + mysql_options(db->mysql, MYSQL_OPT_READ_TIMEOUT, &db->read_timeout); + mysql_options(db->mysql, MYSQL_OPT_WRITE_TIMEOUT, &db->write_timeout); mysql_options(db->mysql, MYSQL_READ_DEFAULT_GROUP, db->option_group != NULL ? db->option_group : "client"); @@ -162,6 +168,9 @@ db->ssl_cipher = "HIGH"; db->ssl_verify_server_cert = 0; /* FIXME: change to 1 for v2.3 */ + db->connect_timeout = SQL_CONNECT_TIMEOUT_SECS; + db->read_timeout = MYSQL_DEFAULT_READ_TIMEOUT_SECS; + db->write_timeout = MYSQL_DEFAULT_WRITE_TIMEOUT_SECS; args = t_strsplit_spaces(connect_string, " "); for (; *args != NULL; args++) { @@ -189,6 +198,15 @@ } else if (strcmp(name, "client_flags") == 0) { if (str_to_uint(value, &db->client_flags) < 0) i_fatal("mysql: Invalid client flags: %s", value); + } else if (strcmp(name, "connect_timeout") == 0) { + if (str_to_uint(value, &db->connect_timeout) < 0) + i_fatal("mysql: Invalid read_timeout: %s", value); + } else if (strcmp(name, "read_timeout") == 0) { + if (str_to_uint(value, &db->read_timeout) < 0) + i_fatal("mysql: Invalid read_timeout: %s", value); + } else if (strcmp(name, "write_timeout") == 0) { + if (str_to_uint(value, &db->write_timeout) < 0) + i_fatal("mysql: Invalid read_timeout: %s", value); } else if (strcmp(name, "ssl_cert") == 0) field = &db->ssl_cert; else if (strcmp(name, "ssl_key") == 0)