diff --git a/src/t_set.c b/src/t_set.c index d0c54848e..2bce6294d 100644 --- a/src/t_set.c +++ b/src/t_set.c @@ -392,12 +392,12 @@ void smoveCommand(client *c) { } signalModifiedKey(c,c->db,c->argv[1]); - signalModifiedKey(c,c->db,c->argv[2]); server.dirty++; /* An extra key has changed when ele was successfully added to dstset */ if (setTypeAdd(dstset,ele->ptr)) { server.dirty++; + signalModifiedKey(c,c->db,c->argv[2]); notifyKeyspaceEvent(NOTIFY_SET,"sadd",c->argv[2],c->db->id); } addReply(c,shared.cone); diff --git a/tests/unit/type/set.tcl b/tests/unit/type/set.tcl index bc5accb41..ee7b936b5 100644 --- a/tests/unit/type/set.tcl +++ b/tests/unit/type/set.tcl @@ -826,6 +826,28 @@ start_server { lsort [r smembers set] } {a b c} + test "SMOVE only notify dstset when the addition is successful" { + r del srcset{t} + r del dstset{t} + + r sadd srcset{t} a b + r sadd dstset{t} a + + r watch dstset{t} + + r multi + r sadd dstset{t} c + + set r2 [redis_client] + $r2 smove srcset{t} dstset{t} a + + # The dstset is actually unchanged, multi should success + r exec + set res [r scard dstset{t}] + assert_equal $res 2 + $r2 close + } + tags {slow} { test {intsets implementation stress testing} { for {set j 0} {$j < 20} {incr j} {