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 {
{
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",
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;