From 2a391b8bac975b0f547064010226b71278c4e22c Mon Sep 17 00:00:00 2001 From: antirez Date: Mon, 30 Sep 2013 10:13:58 +0200 Subject: [PATCH] Cluster: re-order failover operations to make it safer. We need to: 1) Increment the configEpoch. 2) Save it to disk and fsync the file. 3) Broadcast the PONG with the new configuration. If other nodes will receive the updated configuration we need to be sure to restart with this new config in the event of a crash. --- src/cluster.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/cluster.c b/src/cluster.c index f0a6ddeb4..e8ee45c40 100644 --- a/src/cluster.c +++ b/src/cluster.c @@ -1693,16 +1693,16 @@ void clusterHandleSlaveFailover(void) { } } - /* 3) Pong all the other nodes so that they can update the state - * accordingly and detect that we switched to master role. */ - clusterBroadcastPong(); - - /* 4) Update my configEpoch to the epoch of the election. */ + /* 3) Update my configEpoch to the epoch of the election. */ server.cluster->myself->configEpoch = server.cluster->failover_auth_epoch; - /* 5) Update state and save config. */ + /* 4) Update state and save config. */ clusterUpdateState(); clusterSaveConfigOrDie(); + + /* 5) Pong all the other nodes so that they can update the state + * accordingly and detect that we switched to master role. */ + clusterBroadcastPong(); } }