Mercurial > dovecot > core-2.2
changeset 20575:bceac5d8ae3b
director: Added more debug information to "Ping timed out" error
author | Timo Sirainen <timo.sirainen@dovecot.fi> |
---|---|
date | Tue, 02 Aug 2016 22:31:50 +0300 |
parents | 79fa3bdcfc95 |
children | 6e584af6f758 |
files | src/director/director-connection.c |
diffstat | 1 files changed, 19 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/director/director-connection.c Thu Aug 04 12:57:58 2016 +0300 +++ b/src/director/director-connection.c Tue Aug 02 22:31:50 2016 +0300 @@ -36,6 +36,7 @@ #include "ostream.h" #include "str.h" #include "strescape.h" +#include "time-util.h" #include "master-service.h" #include "mail-host.h" #include "director.h" @@ -99,6 +100,8 @@ time_t created; unsigned int minor_version; + struct timeval last_input, last_output; + /* for incoming connections the director host isn't known until ME-line is received */ struct director_host *host; @@ -1692,6 +1695,7 @@ i_stream_skip(conn->input, i_stream_get_data_size(conn->input)); return; } + conn->last_input = ioloop_timeval; director_sync_freeze(dir); prev_offset = conn->input->v_offset; @@ -1826,6 +1830,7 @@ { int ret; + conn->last_output = ioloop_timeval; if (conn->user_iter != NULL) { /* still handshaking USER list */ o_stream_cork(conn->output); @@ -2068,7 +2073,20 @@ static void director_connection_ping_idle_timeout(struct director_connection *conn) { - i_error("director(%s): Ping timed out, disconnecting", conn->name); + int input_diff = timeval_diff_msecs(&ioloop_timeval, &conn->last_input); + int output_diff = timeval_diff_msecs(&ioloop_timeval, &conn->last_output); + string_t *str = t_str_new(128); + + str_printfa(str, "Ping timed out, disconnecting " + "(last input %u.%03u s ago, last output %u.%03u s ago", + input_diff/1000, input_diff%1000, + output_diff/1000, output_diff%1000); + if (conn->handshake_received) + str_append(str, ", handshaked"); + if (conn->synced) + str_append(str, ", synced"); + str_append_c(str, ')'); + i_error("director(%s): %s", conn->name, str_c(str)); director_connection_disconnected(&conn, "Ping timeout"); }