summaryrefslogtreecommitdiff
path: root/src/sort.c
diff options
context:
space:
mode:
authorMatt Stancliff <matt@genges.com>2014-10-23 11:52:35 -0400
committerMatt Stancliff <matt@genges.com>2014-10-29 14:57:35 -0400
commit6c0abc4a0ee1450a7fc13076f5d04a6549286cf3 (patch)
tree6c605c218c903b6eeaa5916551d245a1a1e7900f /src/sort.c
parent6fbaeddf3f547217df9f808da80a716661bfa591 (diff)
downloadredis-6c0abc4a0ee1450a7fc13076f5d04a6549286cf3.tar.gz
Fix zero-ordering SORT when called against lists
People mostly use SORT against lists, but our prior behavior was pretending lists were an unordered bag requiring a forced-sort when no sort was requested. We can just use the native list ordering to ensure consistency across replicaion and scripting calls. Closes #2079 Closes #545 (again)
Diffstat (limited to 'src/sort.c')
-rw-r--r--src/sort.c15
1 files changed, 6 insertions, 9 deletions
diff --git a/src/sort.c b/src/sort.c
index fedf0cf3a..d3521e663 100644
--- a/src/sort.c
+++ b/src/sort.c
@@ -285,16 +285,13 @@ void sortCommand(redisClient *c) {
return;
}
- /* For the STORE option, or when SORT is called from a Lua script,
- * we want to force a specific ordering even when no explicit ordering
- * was asked (SORT BY nosort). This guarantees that replication / AOF
- * is deterministic.
+ /* When sorting a set with no sort specified, we must sort the output
+ * so the result is consistent across scripting and replication.
*
- * However in the case 'dontsort' is true, but the type to sort is a
- * sorted set, we don't need to do anything as ordering is guaranteed
- * in this special case. */
- if ((storekey || c->flags & REDIS_LUA_CLIENT) &&
- (dontsort && sortval->type != REDIS_ZSET))
+ * The other types (list, sorted set) will retain their native order
+ * even if no sort order is requested, so they remain stable across
+ * scripting and replication. */
+ if ((dontsort && sortval->type == REDIS_SET))
{
/* Force ALPHA sorting */
dontsort = 0;