]> git.saurik.com Git - redis.git/commit - src/sentinel.c
Sentinel: more robust failover detection as observer.
authorantirez <antirez@gmail.com>
Tue, 24 Jul 2012 10:42:40 +0000 (12:42 +0200)
committerantirez <antirez@gmail.com>
Thu, 27 Sep 2012 11:04:02 +0000 (13:04 +0200)
commite01a415d3727f7972f2da46b662ccdfac95f839a
treee8b11faf48cae2c1c5b87c822a1e5090ce612aca
parentd26a8fb4dbb0e98eb64d5a95541cea3fc95d9906
Sentinel: more robust failover detection as observer.

Sentinel observers detect failover checking if a slave attached to the
monitored master turns into its replication state from slave to master.
However while this change may in theory only happen after a SLAVEOF NO
ONE command, in practie it is very easy to reboot a slave instance with
a wrong configuration that turns it into a master, especially if it was
a past master before a successfull failover.

This commit changes the detection policy so that if an instance goes
from slave to master, but at the same time the runid has changed, we
sense a reboot, and in that case we don't detect a failover at all.

This commit also introduces the "reboot" sentinel event, that is logged
at "warning" level (so this will trigger an admin notification).

The commit also fixes a problem in the disconnect handler that assumed
that the instance object always existed, that is not the case. Now we
no longer assume that redisAsyncFree() will call the disconnection
handler before returning.
src/sentinel.c