Mercurial > dovecot > core-2.2
changeset 21885:f77c4615bc7c
lib-imap-client: Make retry count and interval configurable
author | Aki Tuomi <aki.tuomi@dovecot.fi> |
---|---|
date | Fri, 31 Mar 2017 09:44:28 +0300 |
parents | 9c063576224a |
children | f05cf964db76 |
files | src/lib-imap-client/imapc-client.c src/lib-imap-client/imapc-client.h src/lib-imap-client/imapc-connection.c src/lib-storage/index/imapc/imapc-settings.c src/lib-storage/index/imapc/imapc-settings.h src/lib-storage/index/imapc/imapc-storage.c |
diffstat | 6 files changed, 23 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-imap-client/imapc-client.c Fri Mar 31 09:59:02 2017 +0300 +++ b/src/lib-imap-client/imapc-client.c Fri Mar 31 09:44:28 2017 +0300 @@ -45,6 +45,9 @@ const char *error; pool_t pool; + i_assert(set->connect_retry_count == 0 || + set->connect_retry_interval_secs > 0); + pool = pool_alloconly_create("imapc client", 1024); client = p_new(pool, struct imapc_client, 1); client->pool = pool; @@ -67,6 +70,8 @@ client->set.connect_timeout_msecs = set->connect_timeout_msecs != 0 ? set->connect_timeout_msecs : IMAPC_DEFAULT_CONNECT_TIMEOUT_MSECS; + client->set.connect_retry_count = set->connect_retry_count; + client->set.connect_retry_interval_secs = set->connect_retry_interval_secs; client->set.cmd_timeout_msecs = set->cmd_timeout_msecs != 0 ? set->cmd_timeout_msecs : IMAPC_DEFAULT_COMMAND_TIMEOUT_MSECS; client->set.max_line_length = set->max_line_length != 0 ?
--- a/src/lib-imap-client/imapc-client.h Fri Mar 31 09:59:02 2017 +0300 +++ b/src/lib-imap-client/imapc-client.h Fri Mar 31 09:44:28 2017 +0300 @@ -92,6 +92,11 @@ /* Timeout for logging in. 0 = default. */ unsigned int connect_timeout_msecs; + /* Number of retries, -1 = infinity */ + unsigned int connect_retry_count; + /* Interval between retries, must be > 0 if retries > 0 */ + unsigned int connect_retry_interval_secs; + /* Timeout for IMAP commands. Reset every time more data is being sent or received. 0 = default. */ unsigned int cmd_timeout_msecs;
--- a/src/lib-imap-client/imapc-connection.c Fri Mar 31 09:59:02 2017 +0300 +++ b/src/lib-imap-client/imapc-connection.c Fri Mar 31 09:44:28 2017 +0300 @@ -24,7 +24,6 @@ #define IMAPC_COMMAND_STATE_AUTHENTICATE_CONTINUE 10000 #define IMAPC_MAX_INLINE_LITERAL_SIZE (1024*32) -#define IMAPC_RECONNECT_MIN_RETRY_SECS 10 /* If LOGOUT reply takes longer than this, disconnect. */ #define IMAPC_LOGOUT_TIMEOUT_MSECS 5000 @@ -475,6 +474,11 @@ { if (conn->client->logging_out) return FALSE; + if (conn->client->set.connect_retry_count == 0 || + (conn->client->set.connect_retry_count < UINT_MAX && + conn->reconnect_count >= conn->client->set.connect_retry_count)) + return FALSE; + if (conn->selected_box != NULL) return imapc_client_mailbox_can_reconnect(conn->selected_box); else {
--- a/src/lib-storage/index/imapc/imapc-settings.c Fri Mar 31 09:59:02 2017 +0300 +++ b/src/lib-storage/index/imapc/imapc-settings.c Fri Mar 31 09:44:28 2017 +0300 @@ -30,6 +30,8 @@ DEF(SET_STR, imapc_list_prefix), DEF(SET_TIME, imapc_cmd_timeout), DEF(SET_TIME, imapc_max_idle_time), + DEF(SET_UINT, imapc_connection_retry_count), + DEF(SET_TIME, imapc_connection_retry_interval_secs), DEF(SET_SIZE, imapc_max_line_length), DEF(SET_STR, pop3_deleted_flag), @@ -54,6 +56,8 @@ .imapc_list_prefix = "", .imapc_cmd_timeout = 5*60, .imapc_max_idle_time = 60*29, + .imapc_connection_retry_count = 1, + .imapc_connection_retry_interval_secs = 10, .imapc_max_line_length = 0, .pop3_deleted_flag = ""
--- a/src/lib-storage/index/imapc/imapc-settings.h Fri Mar 31 09:59:02 2017 +0300 +++ b/src/lib-storage/index/imapc/imapc-settings.h Fri Mar 31 09:44:28 2017 +0300 @@ -41,6 +41,8 @@ const char *imapc_list_prefix; unsigned int imapc_cmd_timeout; unsigned int imapc_max_idle_time; + unsigned int imapc_connection_retry_count; + unsigned int imapc_connection_retry_interval_secs; uoff_t imapc_max_line_length; const char *pop3_deleted_flag;
--- a/src/lib-storage/index/imapc/imapc-storage.c Fri Mar 31 09:59:02 2017 +0300 +++ b/src/lib-storage/index/imapc/imapc-storage.c Fri Mar 31 09:44:28 2017 +0300 @@ -304,6 +304,8 @@ set.sasl_mechanisms = imapc_set->imapc_sasl_mechanisms; set.use_proxyauth = (imapc_set->parsed_features & IMAPC_FEATURE_PROXYAUTH) != 0; set.cmd_timeout_msecs = imapc_set->imapc_cmd_timeout * 1000; + set.connect_retry_count = imapc_set->imapc_connection_retry_count; + set.connect_retry_interval_secs = imapc_set->imapc_connection_retry_interval_secs; set.max_idle_time = imapc_set->imapc_max_idle_time; set.max_line_length = imapc_set->imapc_max_line_length; set.dns_client_socket_path = *ns->user->set->base_dir == '\0' ? "" :