19 Commits

Author SHA1 Message Date
antirez
7d6e56c5e1 Scripting: Force SORT BY constant determinism inside SORT itself.
SORT is able to return (faster than when ordering) unordered output if
the "BY" clause is used with a constant value. However we try to play
well with scripting requirements of determinism providing always sorted
outputs when SORT (and other similar commands) are called by Lua
scripts.

However we used the general mechanism in place in scripting in order to
reorder SORT output, that is, if the command has the "S" flag set, the
Lua scripting engine will take an additional step when converting a
multi bulk reply to Lua value, calling a Lua sorting function.

This is suboptimal as we can do it faster inside SORT itself.
This is also broken as issue #545 shows us: basically when SORT is used
with a constant BY, and additionally also GET is used, the Lua scripting
engine was trying to order the output as a flat array, while it was
actually a list of key-value pairs.

What we do know is to recognized if the caller of SORT is the Lua client
(since we can check this using the REDIS_LUA_CLIENT flag). If so, and if
a "don't sort" condition is triggered by the BY option with a constant
string, we force the lexicographical sorting.

This commit fixes this bug and improves the performance, and at the same
time simplifies the implementation. This does not mean I'm smart today,
it means I was stupid when I committed the original implementation ;)
2012-09-05 01:17:49 +02:00
antirez
cd1401b3b5 Scripting: require at least one argument for redis.call().
Redis used to crash with a call like the following:

    EVAL "redis.call()" 0

Now the explicit check for at least one argument prevents the problem.

This commit fixes issue #655.
2012-08-31 10:28:13 +02:00
antirez
7f255aac59 EVAL replication test: less false positives.
wait_for_condition is now used instead of the usual "after 1000" (that
is the way to sleep in Tcl). This should avoid to find the replica in
a state where it is loading the RDB in memory, returning -LOADING error.

This test used to fail when running the test over valgrind, due to the
added latencies.
2012-06-02 23:29:57 +02:00
antirez
d3d7542a86 Redis test: scripting EVALSHA replication test more reliable.
A new primitive wait_for_condition was introduced in the scripting
engine that makes waiting for events simpler, so that it is simpler to
write tests that are more resistant to timing issues.
2012-04-26 11:16:52 +02:00
antirez
b2023cd0fa New tests related to scripts max execution time. 2012-04-19 23:49:33 +02:00
antirez
e719081188 Tests for scripting PRNG. 2012-04-18 23:50:16 +02:00
antirez
549e3d0a85 New test for scripting engine: DECR_IF_GT. 2012-04-13 15:23:32 +02:00
antirez
a45cd5edd8 Tests modified to match the new global protection implementation. 2012-04-13 13:40:57 +02:00
antirez
1bbc0b92b7 Tests for lua globals protection. 2012-04-13 11:48:45 +02:00
antirez
322fa040e5 Test for redis.sha1hex(). 2012-03-28 20:47:50 +02:00
antirez
fdac48210c Added tests checking ability of the scripting engine to reorder the output of commands with a random output regarding signle elements position in the multi bulk reply. 2012-02-01 17:49:03 +01:00
antirez
0bf9019d5b Script max execution time test disabled for now since it is no longer enforced. 2011-10-31 16:09:07 +01:00
antirez
efd6ecaa17 SCRIPT LOAD now returns the SHA1 instead of +OK 2011-10-25 14:46:15 +02:00
antirez
4ed00fae19 Fixes for the scripting refactoring and new commands. Tests for the new features. 2011-10-25 11:19:15 +02:00
antirez
7a34a833a7 Redis.call is now split into two variants of the same function. Redis.call will raise an error by default. Redis.pcall will return the error object instead. 2011-10-20 16:02:23 +02:00
antirez
7dcafc2bd5 new tests for the scripting engine: not allowed commands and write commands after random commands. 2011-09-27 15:39:41 +02:00
antirez
c18bc7fce6 make a scripting test more valgrind friendly 2011-07-15 18:28:24 +02:00
antirez
7be726880e test that EVALSHA is replicated as EVAL 2011-07-15 17:41:40 +02:00
antirez
a79ed5a118 Scripting tests added 2011-05-25 12:32:50 +02:00