From 5e4bdb5a1b3b748ba95ae58fec893b48b918663a Mon Sep 17 00:00:00 2001 From: Ian Barwick Date: Fri, 30 Mar 2018 12:02:34 +0900 Subject: [PATCH] repmgrd: handle failover with two nodes in the primary location If two nodes were in the primary location, and at least one node in another location, the non-failed node in the primary location was not recognising itself as a promotion candidate. Addresses GitHub #407. --- HISTORY | 2 ++ repmgrd-physical.c | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/HISTORY b/HISTORY index 684a20fb..ba210e58 100644 --- a/HISTORY +++ b/HISTORY @@ -4,6 +4,8 @@ repmgr: poll demoted primary after restart as a standby during a switchover operation; GitHub #408 (Ian) repmgrd: fix memory leaks in witness code (AndrzejNowicki, Martín) + repmgrd: handle failover situation with only two nodes in the primary + location, and at least one node in another location; GitHub #407 (Ian) repmgrd: set "connect_timeout=2" when pinging a server (Ian) 4.0.4 2018-03-09 diff --git a/repmgrd-physical.c b/repmgrd-physical.c index c429f92d..d76f5a81 100644 --- a/repmgrd-physical.c +++ b/repmgrd-physical.c @@ -2554,6 +2554,14 @@ do_election(void) return ELECTION_NOT_CANDIDATE; } } + else + { + /* standby nodes found - check if we're in the primary location befor checking theirs */ + if (strncmp(upstream_node_info.location, local_node_info.location, MAXLEN) == 0) + { + primary_location_seen = true; + } + } /* get our lsn */ local_node_info.last_wal_receive_lsn = get_last_wal_receive_location(local_conn);