Cluster: set a minimum rejoin delay if node_timeout is too small.

The rejoin delay usually is the node timeout. However if the node
timeout is too small, we set it to 500 milliseconds, that is a value
chosen to be greater than most setups RTT / instances latency figures
so that likely communication with other nodes happen before rejoining.
This commit is contained in:
antirez 2014-01-15 12:34:33 +01:00
parent a687cbc19c
commit a81340abaf

View File

@ -2327,6 +2327,7 @@ int clusterDelNodeSlots(clusterNode *node) {
* -------------------------------------------------------------------------- */ * -------------------------------------------------------------------------- */
#define REDIS_CLUSTER_MAX_REJOIN_DELAY 5000 #define REDIS_CLUSTER_MAX_REJOIN_DELAY 5000
#define REDIS_CLUSTER_MIN_REJOIN_DELAY 500
void clusterUpdateState(void) { void clusterUpdateState(void) {
int j, new_state; int j, new_state;
@ -2392,6 +2393,8 @@ void clusterUpdateState(void) {
* a configuration update. */ * a configuration update. */
if (rejoin_delay > REDIS_CLUSTER_MAX_REJOIN_DELAY) if (rejoin_delay > REDIS_CLUSTER_MAX_REJOIN_DELAY)
rejoin_delay = REDIS_CLUSTER_MAX_REJOIN_DELAY; rejoin_delay = REDIS_CLUSTER_MAX_REJOIN_DELAY;
if (rejoin_delay < REDIS_CLUSTER_MIN_REJOIN_DELAY)
rejoin_delay = REDIS_CLUSTER_MIN_REJOIN_DELAY;
if (new_state == REDIS_CLUSTER_OK && if (new_state == REDIS_CLUSTER_OK &&
server.cluster->myself->flags & REDIS_NODE_MASTER && server.cluster->myself->flags & REDIS_NODE_MASTER &&