Mercurial > dovecot > core-2.2
changeset 22564:17b1e65e6d70
director: Log info line for every incoming/outgoing connection
This can help with debugging problems.
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Thu, 14 Sep 2017 17:35:02 +0300 |
parents | ef58e0487991 |
children | ad4d877d655b |
files | src/director/director-connection.c src/director/director.c src/director/director.h src/director/main.c |
diffstat | 4 files changed, 36 insertions(+), 26 deletions(-) [+] |
line wrap: on
line diff
--- a/src/director/director-connection.c Thu Sep 14 17:33:19 2017 +0300 +++ b/src/director/director-connection.c Thu Sep 14 17:35:02 2017 +0300 @@ -515,7 +515,7 @@ its failed state, so we can connect to it */ conn->host->last_network_failure = 0; if (!director_has_outgoing_connections(dir)) - director_connect(dir); + director_connect(dir, "Connecting to left"); } else if (dir->left->host == conn->host) { /* b) */ i_assert(dir->left != conn); @@ -1595,6 +1595,7 @@ struct director_host *host; struct ip_addr ip; in_port_t port; + const char *right_state; if (str_array_length(args) != 2 || !director_args_parse_ip_port(conn, args, &ip, &port)) { @@ -1620,16 +1621,16 @@ host->removed = FALSE; if (dir->right == NULL) { - dir_debug("Received CONNECT request to %s, " - "initializing right", host->name); + right_state = "initializing right"; } else { - dir_debug("Received CONNECT request to %s, " - "replacing current right %s", - host->name, dir->right->name); + right_state = t_strdup_printf("replacing current right %s", + dir->right->name); } /* connect here */ - (void)director_connect_host(dir, host); + (void)director_connect_host(dir, host, t_strdup_printf( + "Received CONNECT request from %s - %s", + conn->name, right_state)); return TRUE; } @@ -2022,6 +2023,7 @@ conn->to_ping = timeout_add(DIRECTOR_CONNECTION_ME_TIMEOUT_MSECS, director_connection_init_timeout, conn); + i_info("Incoming connection from director %s", conn->name); director_connection_send_handshake(conn); return conn; } @@ -2179,7 +2181,7 @@ director_connection_deinit(_conn, reason); if (dir->right == NULL) - director_connect(dir); + director_connect(dir, "Reconnecting after disconnection"); } static void director_connection_reconnect(struct director_connection **_conn, @@ -2190,7 +2192,7 @@ director_connection_deinit(_conn, reason); if (dir->right == NULL) - director_connect(dir); + director_connect(dir, "Reconnecting after error"); } void director_connection_send(struct director_connection *conn,
--- a/src/director/director.c Thu Sep 14 17:33:19 2017 +0300 +++ b/src/director/director.c Thu Sep 14 17:35:02 2017 +0300 @@ -129,7 +129,8 @@ } static void -director_log_connect(struct director *dir, struct director_host *host) +director_log_connect(struct director *dir, struct director_host *host, + const char *reason) { string_t *str = t_str_new(128); @@ -141,12 +142,13 @@ str_printfa(str, ", last protocol failure %ds ago", (int)(ioloop_time - host->last_protocol_failure)); } - dir_debug("Connecting to %s:%u (as %s%s)", - net_ip2addr(&host->ip), host->port, - net_ip2addr(&dir->self_ip), str_c(str)); + i_info("Connecting to %s:%u (as %s%s): %s", + net_ip2addr(&host->ip), host->port, + net_ip2addr(&dir->self_ip), str_c(str), reason); } -int director_connect_host(struct director *dir, struct director_host *host) +int director_connect_host(struct director *dir, struct director_host *host, + const char *reason) { in_port_t port; int fd; @@ -154,8 +156,7 @@ if (director_has_outgoing_connection(dir, host)) return 0; - if (director_debug) - director_log_connect(dir, host); + director_log_connect(dir, host, reason); port = dir->test_port != 0 ? dir->test_port : host->port; fd = net_connect_ip(&host->ip, port, &dir->self_ip); if (fd == -1) { @@ -193,6 +194,11 @@ return NULL; } +static void director_quick_reconnect_retry(struct director *dir) +{ + director_connect(dir, "Alone in director ring - trying to connect to others"); +} + static bool director_wait_for_others(struct director *dir) { struct director_host *const *hostp; @@ -213,11 +219,11 @@ if (dir->to_reconnect != NULL) timeout_remove(&dir->to_reconnect); dir->to_reconnect = timeout_add(DIRECTOR_QUICK_RECONNECT_TIMEOUT_MSECS, - director_connect, dir); + director_quick_reconnect_retry, dir); return TRUE; } -void director_connect(struct director *dir) +void director_connect(struct director *dir, const char *reason) { struct director_host *const *hosts; unsigned int i, count, self_idx; @@ -245,7 +251,7 @@ continue; } - if (director_connect_host(dir, hosts[idx]) == 0) { + if (director_connect_host(dir, hosts[idx], reason) == 0) { /* success */ return; } @@ -301,9 +307,10 @@ if (preferred_host == NULL) { /* all directors have been removed, try again later */ - } else if (cur_host != preferred_host) - (void)director_connect_host(dir, preferred_host); - else { + } else if (cur_host != preferred_host) { + (void)director_connect_host(dir, preferred_host, + "Reconnect attempt to preferred director"); + } else { /* the connection hasn't finished sync yet. keep this timeout for now. */ } @@ -555,7 +562,7 @@ } } if (dir->right == NULL) - director_connect(dir); + director_connect(dir, "Reconnecting after director was removed"); cmd = t_strdup_printf("DIRECTOR-REMOVE\t%s\t%u\n", net_ip2addr(&removed_host->ip),
--- a/src/director/director.h Thu Sep 14 17:33:19 2017 +0300 +++ b/src/director/director.h Thu Sep 14 17:35:02 2017 +0300 @@ -169,7 +169,7 @@ void director_find_self(struct director *dir); /* Start connecting to other directors */ -void director_connect(struct director *dir); +void director_connect(struct director *dir, const char *reason); void director_set_ring_handshaked(struct director *dir); void director_set_ring_synced(struct director *dir); @@ -238,7 +238,8 @@ struct director_host *src, unsigned int min_version, const char *cmd); -int director_connect_host(struct director *dir, struct director_host *host); +int director_connect_host(struct director *dir, struct director_host *host, + const char *reason); unsigned int director_get_username_hash(struct director *dir, const char *username);
--- a/src/director/main.c Thu Sep 14 17:33:19 2017 +0300 +++ b/src/director/main.c Thu Sep 14 17:35:02 2017 +0300 @@ -343,7 +343,7 @@ main_preinit(); director->test_port = test_port; director_debug = debug; - director_connect(director); + director_connect(director, "Initial connection"); if (director->test_port != 0) { /* we're testing, possibly writing to same log file.