changeset 16789:5d43c926eb97

director: Make sure director restart notifications go to everyone in the ring.
author Timo Sirainen <tss@iki.fi>
date Fri, 20 Sep 2013 10:35:34 +0300
parents b78c705bbb8d
children c30453a58b4c
files src/director/director-connection.c
diffstat 1 files changed, 8 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/src/director/director-connection.c	Fri Sep 20 10:12:24 2013 +0300
+++ b/src/director/director-connection.c	Fri Sep 20 10:35:34 2013 +0300
@@ -625,7 +625,6 @@
 	struct director_host *host;
 	struct ip_addr ip;
 	unsigned int port;
-	bool forward = FALSE;
 
 	if (!director_args_parse_ip_port(conn, args, &ip, &port))
 		return FALSE;
@@ -644,20 +643,18 @@
 		/* already have this. just reset its last_network_failure
 		   timestamp, since it might be up now. */
 		host->last_network_failure = 0;
-		if (host->last_seq != 0 || host->last_sync_seq != 0) {
-			/* it also may have been restarted, reset its state */
-			director_host_restarted(host);
-			forward = TRUE;
-		}
+		/* it also may have been restarted, reset its state */
+		director_host_restarted(host);
 	} else {
 		/* save the director and forward it */
 		host = director_host_add(conn->dir, &ip, port);
-		forward = TRUE;
 	}
-	if (forward) {
-		director_notify_ring_added(host,
-			director_connection_get_host(conn));
-	}
+	/* just forward this to the entire ring until it reaches back to
+	   itself. some hosts may see this twice, but that's the only way to
+	   guarantee that it gets seen by everyone. reseting the host multiple
+	   times may cause us to handle its commands multiple times, but the
+	   commands can handle that. */
+	director_notify_ring_added(host, director_connection_get_host(conn));
 	return TRUE;
 }