From 973c5fd008fec1a71bc8c50e2a2782e10995d485 Mon Sep 17 00:00:00 2001 From: Brendan O'Dea Date: Tue, 14 Jun 2005 05:37:09 +0000 Subject: [PATCH] Ping new master when we get C_MASTER and delay next election to allow the unicast limp-along code to kick in if required. --- Changes | 2 ++ cluster.c | 13 +++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/Changes b/Changes index a1f3126..c987d1e 100644 --- a/Changes +++ b/Changes @@ -9,6 +9,8 @@ - Always initialise PRNG. - Sanity check length of random_vector. - Fix segv in unhide_value. +- Ping new master when we get C_MASTER and delay next election to allow + the unicast limp-along code to kick in if required. * Sun Jun 5 2005 Brendan O'Dea 2.1.0 - Add IPv6 support from Jonathan McDowell. diff --git a/cluster.c b/cluster.c index 83d9501..a6350e0 100644 --- a/cluster.c +++ b/cluster.c @@ -1,6 +1,6 @@ // L2TPNS Clustering Stuff -char const *cvs_id_cluster = "$Id: cluster.c,v 1.41 2005-06-04 15:42:35 bodea Exp $"; +char const *cvs_id_cluster = "$Id: cluster.c,v 1.42 2005-06-14 05:37:09 bodea Exp $"; #include #include @@ -1022,7 +1022,6 @@ static int cluster_add_peer(in_addr_t peer, time_t basetime, pingt *pp, int size config->cluster_master_address = 0; config->cluster_last_hb = 0; // Force an election. cluster_check_master(); - return 0; } if (i >= num_peers) @@ -1069,6 +1068,16 @@ static int cluster_set_master(in_addr_t peer, in_addr_t master) fmtaddr(master, 1)); config->cluster_master_address = master; + if (master) + { + // catchup with new master + peer_send_message(master, C_LASTSEEN, config->cluster_seq_number, NULL, 0); + + // delay next election + config->cluster_last_hb = TIME; + } + + // run election (or reset "probed" if master was set) cluster_check_master(); return 0; } -- 2.20.1