From: Timo Sirainen Date: Wed, 21 Aug 2013 20:30:07 +0000 (+0300) Subject: director: Reset last-seen-sync-sequence after remote director restarts. X-Git-Tag: 2.2.6~125 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=ce28adabf2c47d3af9ef197787cdb5139424c69c;p=thirdparty%2Fdovecot%2Fcore.git director: Reset last-seen-sync-sequence after remote director restarts. --- diff --git a/src/director/director-connection.c b/src/director/director-connection.c index 40e0ba721f..dc1bb10a4c 100644 --- a/src/director/director-connection.c +++ b/src/director/director-connection.c @@ -405,7 +405,7 @@ static bool director_cmd_me(struct director_connection *conn, conn->host->removed = FALSE; director_host_ref(conn->host); /* make sure we don't keep old sequence values across restarts */ - conn->host->last_seq = 0; + director_host_restarted(conn->host); next_comm_attempt = conn->host->last_protocol_failure + DIRECTOR_PROTOCOL_FAILURE_RETRY_SECS; @@ -646,7 +646,7 @@ static bool director_cmd_director(struct director_connection *conn, host->last_network_failure = 0; if (host->last_seq != 0) { /* it also may have been restarted, reset last_seq */ - host->last_seq = 0; + director_host_restarted(host); forward = TRUE; } } else { @@ -1591,7 +1591,7 @@ director_connection_init_out(struct director *dir, int fd, i_assert(!host->removed); /* make sure we don't keep old sequence values across restarts */ - host->last_seq = 0; + director_host_restarted(host); conn = director_connection_init_common(dir, fd); conn->name = i_strdup_printf("%s/out", host->name); diff --git a/src/director/director-host.c b/src/director/director-host.c index 5957615042..dfaac637b1 100644 --- a/src/director/director-host.c +++ b/src/director/director-host.c @@ -80,6 +80,14 @@ void director_host_unref(struct director_host *host) i_free(host); } +void director_host_restarted(struct director_host *host) +{ + host->last_seq = 0; + host->last_sync_seq = 0; + host->last_sync_seq_counter = 0; + host->last_sync_timestamp = 0; +} + struct director_host * director_host_get(struct director *dir, const struct ip_addr *ip, unsigned int port) diff --git a/src/director/director-host.h b/src/director/director-host.h index e1af171d29..cd740bed84 100644 --- a/src/director/director-host.h +++ b/src/director/director-host.h @@ -39,6 +39,8 @@ void director_host_free(struct director_host **host); void director_host_ref(struct director_host *host); void director_host_unref(struct director_host *host); +void director_host_restarted(struct director_host *host); + struct director_host * director_host_get(struct director *dir, const struct ip_addr *ip, unsigned int port);