From 4d8655cfd3ae656378b32ae56d58455be72cdc70 Mon Sep 17 00:00:00 2001 From: antirez Date: Sat, 3 Nov 2012 12:15:29 +0100 Subject: [PATCH] Use the new unified protocol to send SELECT to slaves. SELECT was still transmitted to slaves using the inline protocol, that is conceived mostly for humans to type into telnet sessions, and is notably not understood by redis-cli --slave. Now the new protocol is used instead. --- src/redis.c | 8 +++++++- src/replication.c | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/redis.c b/src/redis.c index a4654d3a..b6ffb2a0 100644 --- a/src/redis.c +++ b/src/redis.c @@ -1058,8 +1058,14 @@ void createSharedObjects(void) { shared.plus = createObject(REDIS_STRING,sdsnew("+")); for (j = 0; j < REDIS_SHARED_SELECT_CMDS; j++) { + char dictid_str[64]; + int dictid_len; + + dictid_len = ll2string(dictid_str,sizeof(dictid_str),j); shared.select[j] = createObject(REDIS_STRING, - sdscatprintf(sdsempty(),"select %d\r\n", j)); + sdscatprintf(sdsempty(), + "*2\r\n$6\r\nSELECT\r\n$%d\r\n%s\r\n", + dictid_len, dictid_str)); } shared.messagebulk = createStringObject("$7\r\nmessage\r\n",13); shared.pmessagebulk = createStringObject("$8\r\npmessage\r\n",14); diff --git a/src/replication.c b/src/replication.c index ea9c0104..872cf473 100644 --- a/src/replication.c +++ b/src/replication.c @@ -61,8 +61,14 @@ void replicationFeedSlaves(list *slaves, int dictid, robj **argv, int argc) { selectcmd = shared.select[dictid]; incrRefCount(selectcmd); } else { + char dictid_str[64]; + int dictid_len; + + dictid_len = ll2string(dictid_str,sizeof(dictid_str),dictid); selectcmd = createObject(REDIS_STRING, - sdscatprintf(sdsempty(),"select %d\r\n",dictid)); + sdscatprintf(sdsempty(), + "*2\r\n$6\r\nSELECT\r\n$%d\r\n%s\r\n", + dictid_len, dictid_str)); } addReply(slave,selectcmd); decrRefCount(selectcmd);