]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
director: Reset last-seen-sync-sequence after remote director restarts.
authorTimo Sirainen <tss@iki.fi>
Wed, 21 Aug 2013 20:30:07 +0000 (23:30 +0300)
committerTimo Sirainen <tss@iki.fi>
Wed, 21 Aug 2013 20:30:07 +0000 (23:30 +0300)
src/director/director-connection.c
src/director/director-host.c
src/director/director-host.h

index 40e0ba721fbf224497691faa719f256da34a3922..dc1bb10a4c9d7a24cee0d6a5efc7ca3c4f0ab10e 100644 (file)
@@ -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);
index 5957615042af8bde0c8771397ad9b44d94152944..dfaac637b1e61ea1bcf5976e6af27605dc016cb9 100644 (file)
@@ -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)
index e1af171d2952f5a9426acce48eb8c544eb6a780c..cd740bed84f041fe142490132b1253fd480830d9 100644 (file)
@@ -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);