Make SORT BY <constant> STORE ... to always produce the same output by force sorting, so that we have deterministic replication of this command.

This commit is contained in:
antirez 2012-02-01 17:05:45 +01:00
parent 2c861050c1
commit de79a2ee12
2 changed files with 16 additions and 0 deletions

View File

@ -203,6 +203,15 @@ void sortCommand(redisClient *c) {
j++;
}
/* If we have STORE we need to force sorting for deterministic output
* and replication. We use alpha sorting since this is guaranteed to
* work with any input. */
if (storekey && dontsort) {
dontsort = 0;
alpha = 1;
sortby = NULL;
}
/* Destructively convert encoded sorted sets for SORT. */
if (sortval->type == REDIS_ZSET)
zsetConvert(sortval, REDIS_ENCODING_SKIPLIST);

View File

@ -157,6 +157,13 @@ start_server {
r exists foo
} {0}
test "SORT with BY <constant> and STORE should still order output" {
r del myset mylist
r sadd myset a b c d e f g h i l m n o p q r s t u v z
r sort myset alpha by _ store mylist
r lrange mylist 0 -1
} {a b c d e f g h i l m n o p q r s t u v z}
tags {"slow"} {
set num 100
set res [create_random_dataset $num lpush]