mirror of
https://github.com/fluencelabs/redis
synced 2025-03-19 17:10:50 +00:00
SPOP replication/AOF patch ported to unstable branch
This commit is contained in:
parent
21cda08b3b
commit
30318c1ddd
17
src/t_set.c
17
src/t_set.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++;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user