Don't change the replication state if SLAVE OF is called with arguments specifying the same master we are already connected with. This fixes issues #290.
This commit is contained in:
parent
1596d6a61e
commit
ebdfad69dc
@ -517,9 +517,23 @@ void slaveofCommand(redisClient *c) {
|
|||||||
redisLog(REDIS_NOTICE,"MASTER MODE enabled (user request)");
|
redisLog(REDIS_NOTICE,"MASTER MODE enabled (user request)");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
long port;
|
||||||
|
|
||||||
|
if ((getLongFromObjectOrReply(c, c->argv[2], &port, NULL) != REDIS_OK))
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* Check if we are already attached to the specified slave */
|
||||||
|
if (server.masterhost && !strcasecmp(server.masterhost,c->argv[1]->ptr)
|
||||||
|
&& server.masterport == port) {
|
||||||
|
redisLog(REDIS_NOTICE,"SLAVE OF would result into synchronization with the master we are already connected with. No operation performed.");
|
||||||
|
addReplySds(c,sdsnew("+OK Already connected to specified master\r\n"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
/* There was no previous master or the user specified a different one,
|
||||||
|
* we can continue. */
|
||||||
sdsfree(server.masterhost);
|
sdsfree(server.masterhost);
|
||||||
server.masterhost = sdsdup(c->argv[1]->ptr);
|
server.masterhost = sdsdup(c->argv[1]->ptr);
|
||||||
server.masterport = atoi(c->argv[2]->ptr);
|
server.masterport = port;
|
||||||
if (server.master) freeClient(server.master);
|
if (server.master) freeClient(server.master);
|
||||||
if (server.repl_state == REDIS_REPL_TRANSFER)
|
if (server.repl_state == REDIS_REPL_TRANSFER)
|
||||||
replicationAbortSyncTransfer();
|
replicationAbortSyncTransfer();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user