dovecot-2.1: director: Don't try to send the new SYNC parameter ...

dovecot at dovecot.org dovecot at dovecot.org
Mon Apr 9 07:52:36 EEST 2012


details:   http://hg.dovecot.org/dovecot-2.1/rev/084064444f89
changeset: 14395:084064444f89
user:      Timo Sirainen <tss at iki.fi>
date:      Mon Apr 09 07:52:25 2012 +0300
description:
director: Don't try to send the new SYNC parameter to old director versions.
This should allow adding new directors to an old director ring without
anything breaking. Once all directors have upgraded they start using the new
features.

diffstat:

 src/director/director-connection.c |  8 ++++++++
 src/director/director-connection.h |  2 ++
 src/director/director.c            |  3 ++-
 3 files changed, 12 insertions(+), 1 deletions(-)

diffs (57 lines):

diff -r f267a2b3f424 -r 084064444f89 src/director/director-connection.c
--- a/src/director/director-connection.c	Wed Apr 04 11:08:32 2012 +0300
+++ b/src/director/director-connection.c	Mon Apr 09 07:52:25 2012 +0300
@@ -82,6 +82,7 @@
 	struct director *dir;
 	char *name;
 	time_t created;
+	unsigned int minor_version;
 
 	/* for incoming connections the director host isn't known until
 	   ME-line is received */
@@ -890,6 +891,7 @@
 				DIRECTOR_VERSION_MAJOR);
 			return -1;
 		}
+		conn->minor_version = atoi(args[2]);
 		conn->version_received = TRUE;
 		return 1;
 	}
@@ -1528,6 +1530,12 @@
 	return conn->in;
 }
 
+unsigned int
+director_connection_get_minor_version(struct director_connection *conn)
+{
+	return conn->minor_version;
+}
+
 void director_connection_cork(struct director_connection *conn)
 {
 	o_stream_cork(conn->output);
diff -r f267a2b3f424 -r 084064444f89 src/director/director-connection.h
--- a/src/director/director-connection.h	Wed Apr 04 11:08:32 2012 +0300
+++ b/src/director/director-connection.h	Mon Apr 09 07:52:25 2012 +0300
@@ -23,6 +23,8 @@
 director_connection_get_host(struct director_connection *conn);
 bool director_connection_is_handshaked(struct director_connection *conn);
 bool director_connection_is_incoming(struct director_connection *conn);
+unsigned int
+director_connection_get_minor_version(struct director_connection *conn);
 
 void director_connection_cork(struct director_connection *conn);
 void director_connection_uncork(struct director_connection *conn);
diff -r f267a2b3f424 -r 084064444f89 src/director/director.c
--- a/src/director/director.c	Wed Apr 04 11:08:32 2012 +0300
+++ b/src/director/director.c	Mon Apr 09 07:52:25 2012 +0300
@@ -263,7 +263,8 @@
 	str = t_str_new(128);
 	str_printfa(str, "SYNC\t%s\t%u\t%u",
 		    net_ip2addr(&host->ip), host->port, seq);
-	if (minor_version > 0) {
+	if (minor_version > 0 &&
+	    director_connection_get_minor_version(dir->right) > 0) {
 		/* only minor_version>0 supports this parameter */
 		str_printfa(str, "\t%u", minor_version);
 	}


More information about the dovecot-cvs mailing list