565 Commits

Author SHA1 Message Date
antirez
05b6b147ec Test: find_available_port: check that cluster port is free as well.
The function will only return ports that have also port+10000 free, so
that Redis Cluster instances can be executed at the returned port.
2014-06-30 12:11:22 +02:00
antirez
a5aa3b6491 Test: fix instances.tcl restart_instance abort error. 2014-06-30 12:11:22 +02:00
antirez
e530c2ccb2 Fixed assert conditional in ROLE command test. 2014-06-26 22:13:54 +02:00
antirez
76e7673259 Remove infinite loop from PSYNC test.
Added for debugging and forgot there.
2014-06-26 18:43:28 +02:00
antirez
2e01ac52c7 Test: hopefully more robust PSYNC test.
This is supposed to fix issue #1417, but we'll know if this is enough
only after a couple of runs of the CI test without false positives.
2014-06-26 18:43:28 +02:00
antirez
6adf0e092c Sentinel test: more correct sentinels config reset.
In the initialization test for each instance we used to unregister the
old master and register it again to clear the config.
However there is a race condition doing this: as soon as we unregister
and re-register "mymaster", another Sentinel can update the new
configuration with the old state because of gossip "hello" messages.

So the correct procedure is instead, unregister "mymaster" from all the
sentinel instances, and re-register it everywhere again.
2014-06-23 14:07:45 +02:00
antirez
5eb5a06078 Basic tests for the ROLE command. 2014-06-23 09:09:07 +02:00
antirez
52456bf8c3 Sentinel test: tolerate larger delays in init tests. 2014-06-21 15:18:33 +02:00
antirez
716a77d347 Sentinel test: unit 02, avoid some time related false positives. 2014-06-21 15:18:33 +02:00
antirez
32adcda857 Sentinel test: add manual failover test. 2014-06-21 15:18:33 +02:00
antirez
64e618d10c Test: use higher level redis.tcl proc to read replies. 2014-06-21 15:18:33 +02:00
antirez
28c86fe463 Sentienl/Redis test: enable link reconnection in instances.tcl. 2014-06-21 15:18:32 +02:00
antirez
3cba0c3ebb Test: Tcl client initial support for automatic reconnection. 2014-06-21 15:18:32 +02:00
antirez
256046fdb4 Test: tcl client, unset deferred var on close. 2014-06-21 15:18:32 +02:00
Matt Stancliff
4dfc18596e Add correct exit value to failed tests 2014-06-21 15:18:32 +02:00
antirez
59cfa49c21 Scripting: regression test for issue #1811. 2014-06-21 15:18:32 +02:00
antirez
2b57d96ea0 Fix semantics of Lua calls to SELECT.
Lua scripts are executed in the context of the currently selected
database (as selected by the caller of the script).

However Lua scripts are also free to use the SELECT command in order to
affect other DBs. When SELECT is called frm Lua, the old behavior, before
this commit, was to automatically set the Lua caller selected DB to the
last DB selected by Lua. See for example the following sequence of
commands:

    SELECT 0
    SET x 10
    EVAL "redis.call('select','1')" 0
    SET x 20

Before this commit after the execution of this sequence of commands,
we'll have x=10 in DB 0, and x=20 in DB 1.

Because of the problem above, there was a bug affecting replication of
Lua scripts, because of the actual implementation of replication. It was
possible to fix the implementation of Lua scripts in order to fix the
issue, but looking closely, the bug is the consequence of the behavior
of Lua ability to set the caller's DB.

Under the old semantics, a script selecting a different DB, has no simple
ways to restore the state and select back the previously selected DB.
Moreover the script auhtor must remember that the restore is needed,
otherwise the new commands executed by the caller, will be executed in
the context of a different DB.

So this commit fixes both the replication issue, and this hard-to-use
semantics, by removing the ability of Lua, after the script execution,
to force the caller to switch to the DB selected by the Lua script.

The new behavior of the previous sequence of commadns is to just set
X=20 in DB 0. However Lua scripts are still capable of writing / reading
from different DBs if needed.

WARNING: This is a semantical change that will break programs that are
conceived to select the client selected DB via Lua scripts.

This fixes issue #1811.
2014-06-21 15:18:32 +02:00
antirez
62bddfe3af Cluser test: write multiple keys in unit 03.
The write-failover-read test is better if we write 100 keys so that we
are sure all the nodes are affected by the write.
2014-06-21 15:18:32 +02:00
antirez
1381a6bf3d Cluster test: rewrite config when resetting nodes. 2014-06-21 15:18:32 +02:00
Matt Stancliff
9ca83c82bf Scripting: Fix regression from #1118
The new check-for-number behavior of Lua arguments broke
users who use large strings of just integers.

The Lua number check would convert the string to a number, but
that breaks user data because
Lua numbers have limited precision compared to an arbitrarily
precise number wrapped in a string.

Regression fixed and new test added.

Fixes #1118 again.
2014-06-21 15:18:32 +02:00
antirez
053bcf034e Cluster test: set config epochs when creating clusters. 2014-06-21 15:18:32 +02:00
antirez
6cd068d421 Cluster test: unit 03, check epochs correctness. 2014-06-21 15:18:32 +02:00
antirez
90b4f91e1a Cluster test: better failover detection in unit 03. 2014-06-21 15:18:32 +02:00
antirez
9912a60d01 Cluster test: added show-redis-logs command in the interactive console. 2014-06-21 15:18:32 +02:00
antirez
7079ef0341 Cluster test: new unit 03, failover loop stress testing. 2014-06-21 15:18:32 +02:00
antirez
1d896303af Cluster test: 02 unit more reliable waiting for slave sync. 2014-06-21 15:18:32 +02:00
antirez
d7a4025828 Cluster test: unit 02 should wait for failover. 2014-06-21 15:18:31 +02:00
antirez
33f09f0ff3 Cluster test: check master -> slave role switch. 2014-06-21 15:18:31 +02:00
Matt Stancliff
7fc1fc8ca7 Fix blocking operations from missing new lists
Behrad Zari discovered [1] and Josiah reported [2]: if you block
and wait for a list to exist, but the list creates from
a non-push command, the blocked client never gets notified.

This commit adds notification of blocked clients into
the DB layer and away from individual commands.

Lists can be created by [LR]PUSH, SORT..STORE, RENAME, MOVE,
and RESTORE.  Previously, blocked client notifications were
only triggered by [LR]PUSH.  Your client would never get
notified if a list were created by SORT..STORE or RENAME or
a RESTORE, etc.

Blocked client notification now happens in one unified place:
  - dbAdd() triggers notification when adding a list to the DB

Two new tests are added that fail prior to this commit.

All test pass.

Fixes #1668

[1]: https://groups.google.com/forum/#!topic/redis-db/k4oWfMkN1NU
[2]: #1668
2014-06-09 11:38:55 +02:00
yoav
a20d5c50d0 Fix eval usage in tests to conform with eval semantics 2014-06-06 10:44:04 +02:00
antirez
cfe2d563bc Tests for min-slaves-* feature. 2014-06-05 10:50:32 +02:00
antirez
b71720772e Regression test for issue #1118. 2014-06-04 18:51:33 +02:00
antirez
53bc8a77d1 Cluster test: add tmp dir to Git repo. 2014-05-26 18:06:48 +02:00
Matt Stancliff
033d717295 Fix test framework to detect proper server PID
Previously the PID format was:
[PID] Timestamp

But it recently changed to:
PID:X Timestamp

The tcl testing framework was grabbing the PID from \[\d+\], but
that's not valid anymore.

Now we grab the pid from "PID: <PID>" in the part of Redis startup
output to the right of the ASCII logo.
2014-05-26 17:58:49 +02:00
antirez
672e2672aa Cluster test: catch FLUSHALL errors on node reset.
FLUSHALL will fail on read-only slaves, but there the command is not
needed in order to reset the instance with CLUSTER RESET so errors can
be ignored.
2014-05-26 16:36:11 +02:00
antirez
7f8ea7a50f Cluster test: basic failover unit added. 2014-05-23 15:54:53 +02:00
antirez
29aed9c48f Cluster test: move basic read/write test into a procedure. 2014-05-23 15:54:53 +02:00
antirez
81af783fec Cluster test: more reliable 01-faildet unit.
Do things in a sequence that prevents failover during failure detection.
2014-05-23 15:54:53 +02:00
antirez
308c570e04 Test: AOF test false positive when running in slow hosts.
The bug was triggered by running the test with Valgrind (which is a lot
slower and more sensible to timing issues) after the recent changes
that made Redis more promptly able to reply with the -LOADING error.
2014-05-23 09:26:04 +02:00
antirez
1d70312028 Test: dump.tcl fixed for RESTORE new error msg. 2014-05-23 09:26:04 +02:00
antirez
122157f220 Regression test for issue #1764. 2014-05-20 17:45:50 +02:00
antirez
440ee603b7 Cluster test: better failure detection test and framework improvements. 2014-05-20 17:45:50 +02:00
antirez
a7fd2eb594 Cluster test: failure detection initial tests. 2014-05-20 17:45:50 +02:00
antirez
a82c000bdb Cluster test: proper initialization at unit startup. 2014-05-20 17:45:50 +02:00
antirez
d279024081 Cluster test: added function assert_cluster_state. 2014-05-20 17:45:50 +02:00
antirez
f727000f0c cluster.tcl: fix redis links leak in refresh_nodes_map. 2014-05-20 17:45:49 +02:00
antirez
4db4a5d5d6 cluster.tcl: saner error handling.
Better handling of connection errors in order to update the table and
recovery, populate the startup nodes table after fetching the list of
nodes.

More work to do about it, it is still not as reliable as
redis-rb-cluster implementation which is the minimal reference
implementation for Redis Cluster clients.
2014-05-20 17:45:49 +02:00
antirez
d9227938c8 redis.tcl: return I/O error message when peer closes connection. 2014-05-20 17:45:49 +02:00
antirez
26eb7ec731 HyperLogLog regression test for issue #1762. 2014-05-19 15:45:22 +02:00
antirez
35b94422f6 Scripting test: check that Lua can call commands rewirting argv.
SPOP, tested in the new test, is among the commands rewritng the
client->argv argument vector (it gets rewritten as SREM) for command
replication purposes.

Because of recent optimizations to client->argv caching in the context
of the Lua internal Redis client, it is important to test for SPOP to be
callable from Lua without bad effects to the other commands.
2014-05-07 16:12:38 +02:00