From: Timo Sirainen Date: Thu, 26 Oct 2017 11:18:50 +0000 (+0300) Subject: director: Track show long the last ring sync took. X-Git-Tag: 2.3.0.rc1~618 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3dc72a40e457658caa3c033fb6b3418d16e9fd21;p=thirdparty%2Fdovecot%2Fcore.git director: Track show long the last ring sync took. --- diff --git a/src/director/director-connection.c b/src/director/director-connection.c index 8903e0a3a9..128f297987 100644 --- a/src/director/director-connection.c +++ b/src/director/director-connection.c @@ -1466,6 +1466,10 @@ director_connection_sync_host(struct director_connection *conn, dir_debug("Ring is synced (%s sent seq=%u, hosts_hash=%u)", conn->name, seq, mail_hosts_hash(dir->mail_hosts)); + int sync_msecs = + timeval_diff_msecs(&ioloop_timeval, &dir->last_sync_start_time); + if (sync_msecs >= 0) + dir->last_sync_msecs = sync_msecs; director_set_ring_synced(dir); } } else { diff --git a/src/director/director.c b/src/director/director.c index 1441cace4c..972a85860b 100644 --- a/src/director/director.c +++ b/src/director/director.c @@ -362,8 +362,10 @@ void director_sync_send(struct director *dir, struct director_host *host, { string_t *str; - if (host == dir->self_host) + if (host == dir->self_host) { dir->last_sync_sent_ring_change_counter = dir->ring_change_counter; + dir->last_sync_start_time = ioloop_timeval; + } str = t_str_new(128); str_printfa(str, "SYNC\t%s\t%u\t%u", diff --git a/src/director/director.h b/src/director/director.h index bfd37e6125..fff719ad48 100644 --- a/src/director/director.h +++ b/src/director/director.h @@ -137,9 +137,15 @@ struct director { unsigned int sync_seq; unsigned int ring_change_counter; unsigned int last_sync_sent_ring_change_counter; + /* Timestamp when the last SYNC was initiated by us */ + struct timeval last_sync_start_time; /* the lowest minor version supported by the ring */ unsigned int ring_min_version; + /* Timestamp when ring became synced or unsynced the last time */ time_t ring_last_sync_time; + /* How many milliseconds it took for the last SYNC to travel through + the ring. */ + unsigned int last_sync_msecs; time_t ring_first_alone;