Commit cf76af6b authored by antirez's avatar antirez
Browse files

Cluster: fetch my IP even if msg is not MEET for the first time.

In order to avoid that misconfigured cluster nodes at some time may
force an IP update on other nodes, it is required that nodes update
their own address only on MEET messages. However it does not make sense
to do this the first time a node is contacted and yet does not have an
IP, we just risk that myself->ip remains not assigned if there are
messages lost or cluster creation procedures that don't make sure
everybody is targeted by at least one incoming MEET message.

Also fix the logging of the IP switch avoiding the :-1 tail.
parent 5b0f4a83
...@@ -1547,18 +1547,20 @@ int clusterProcessPacket(clusterLink *link) { ...@@ -1547,18 +1547,20 @@ int clusterProcessPacket(clusterLink *link) {
* later if we changed address, and those nodes will use our * later if we changed address, and those nodes will use our
* official address to connect to us. So by obtaining this address * official address to connect to us. So by obtaining this address
* from the socket is a simple way to discover / update our own * from the socket is a simple way to discover / update our own
* address in the cluster without it being hardcoded in the config. */ * address in the cluster without it being hardcoded in the config.
if (type == CLUSTERMSG_TYPE_MEET) { *
* However if we don't have an address at all, we update the address
* even with a normal PING packet. If it's wrong it will be fixed
* by MEET later. */
if (type == CLUSTERMSG_TYPE_MEET || myself->ip[0] == '\0') {
char ip[REDIS_IP_STR_LEN]; char ip[REDIS_IP_STR_LEN];
if (anetSockName(link->fd,ip,sizeof(ip),NULL) != -1 && if (anetSockName(link->fd,ip,sizeof(ip),NULL) != -1 &&
strcmp(ip,myself->ip)) strcmp(ip,myself->ip))
{ {
memcpy(myself->ip,ip,REDIS_IP_STR_LEN); memcpy(myself->ip,ip,REDIS_IP_STR_LEN);
anetFormatAddr(ip, sizeof(ip), myself->ip, -1);
redisLog(REDIS_WARNING,"IP address for this node updated to %s", redisLog(REDIS_WARNING,"IP address for this node updated to %s",
ip); myself->ip);
clusterDoBeforeSleep(CLUSTER_TODO_SAVE_CONFIG); clusterDoBeforeSleep(CLUSTER_TODO_SAVE_CONFIG);
} }
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment