提交 30318c1d 编写于 作者: A antirez

SPOP replication/AOF patch ported to unstable branch

上级 21cda08b
...@@ -334,12 +334,25 @@ void spopCommand(redisClient *c) { ...@@ -334,12 +334,25 @@ void spopCommand(redisClient *c) {
encoding = setTypeRandomElement(set,&ele,&llele); encoding = setTypeRandomElement(set,&ele,&llele);
if (encoding == REDIS_ENCODING_INTSET) { if (encoding == REDIS_ENCODING_INTSET) {
addReplyBulkLongLong(c,llele); ele = createStringObjectFromLongLong(llele);
set->ptr = intsetRemove(set->ptr,llele,NULL); set->ptr = intsetRemove(set->ptr,llele,NULL);
} else { } else {
addReplyBulk(c,ele); incrRefCount(ele);
setTypeRemove(set,ele); setTypeRemove(set,ele);
} }
/* Change argv to replicate as SREM */
c->argc = 3;
c->argv = zrealloc(c->argv,sizeof(robj*)*(c->argc));
/* Overwrite SREM with SPOP (same length) */
redisAssert(sdslen(c->argv[0]->ptr) == 4);
memcpy(c->argv[0]->ptr, "SREM", 4);
/* Popped element already has incremented refcount */
c->argv[2] = ele;
addReplyBulk(c,ele);
if (setTypeSize(set) == 0) dbDelete(c->db,c->argv[1]); if (setTypeSize(set) == 0) dbDelete(c->db,c->argv[1]);
signalModifiedKey(c->db,c->argv[1]); signalModifiedKey(c->db,c->argv[1]);
server.dirty++; server.dirty++;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册