From 689b64c3ad921c6f82cee38c0940c6637e9ba88f Mon Sep 17 00:00:00 2001 From: Oran Agra Date: Tue, 16 Jan 2018 10:10:42 +0200 Subject: [PATCH] PSYNC2 fix - promoted slave should hold on to it's backlog after a slave is promoted (assuming it has no slaves and it booted over an hour ago), it will lose it's replication backlog at the next replication cron, rather than waiting for slaves to connect to it. so on a simple master/slave faiover, if the new slave doesn't connect immediately, it may be too later and PSYNC2 will fail. --- src/replication.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/replication.c b/src/replication.c index 064d2bece..68fd80293 100644 --- a/src/replication.c +++ b/src/replication.c @@ -1970,6 +1970,11 @@ void replicationUnsetMaster(void) { * with PSYNC version 2, there is no need for full resync after a * master switch. */ server.slaveseldb = -1; + + /* We need to remember the time when we became a master and lost all + * attached slaves (if we had any), as after some time we'll free the + * replication backlog. */ + server.repl_no_slaves_since = server.unixtime; } /* This function is called when the slave lose the connection with the -- GitLab