3644 Commits

Author SHA1 Message Date
antirez
491bdb8d61 Cluster: more correct update of slots state when PONG is received. 2013-02-21 16:52:06 +01:00
antirez
e9c34fedfd Call clusterUpdateState() after CLUSTER SETSLOT too. 2013-02-21 16:31:22 +01:00
antirez
4edf3759db Aesthetic change to make a line more 80-cols friendly. 2013-02-21 16:24:48 +01:00
antirez
4d33e72fdb redis-trib: move instance vars in the right class. 2013-02-21 13:06:59 +01:00
antirez
1544701d1d redis-trib: some refactoring and skeleton of the "fix" command. 2013-02-21 13:00:41 +01:00
antirez
1455ba6e36 Cluster: clusterAddSlot() was not doing what stated in the comment. 2013-02-21 11:51:17 +01:00
antirez
0b0a8884fc Cluster: always use cluster(Add|Del)Slot to modify the cluster slots table. 2013-02-21 11:44:58 +01:00
antirez
1e2a5d119c Use RESTORE-ASKING for MIGRATE when in cluster mode. 2013-02-20 17:36:54 +01:00
antirez
a9624604ed Cluster: new command flag forcing implicit ASKING.
Also using this new flag the RESTORE-ASKING command was implemented that
will be used by MIGRATE.
2013-02-20 17:28:35 +01:00
antirez
1de23b0795 Cluster: ASKING command fixed, state was not retained. 2013-02-20 17:07:52 +01:00
antirez
71d6ea6755 redis-trib: set the migrating slot in the correct way when resharding. 2013-02-20 15:29:53 +01:00
antirez
f6a8ba8de5 Cluster: I/O errors are now logged at DEBUG level. 2013-02-20 13:18:51 +01:00
antirez
fe4e3581f2 redis-trib: make a few comments 80-cols friendly. 2013-02-15 17:11:55 +01:00
antirez
cf24a53850 Cluster: specific error code for cluster down condition. 2013-02-15 16:53:24 +01:00
antirez
0e7225be93 Merge branch 'unstable' of github.com:antirez/redis into unstable 2013-02-15 16:45:04 +01:00
antirez
79f3570266 Cluster: sanity checks on the cluster bus message length. 2013-02-15 16:44:39 +01:00
antirez
6c4f5dd263 Removed useless newlines from hashTypeCurrentObject(). 2013-02-15 13:12:55 +01:00
antirez
47838ff689 Cluster: make valgrind happy initializing all the bytes of the node IP. 2013-02-15 12:58:35 +01:00
antirez
8e84bccec9 Remove wrong decrRefCount() from getNodeByQuery().
This fixes issue #607.
2013-02-15 11:57:53 +01:00
antirez
ed0e930804 Top comment for getNodeByQuery() improved. 2013-02-15 11:50:54 +01:00
antirez
751b523fb8 redis-cli: update prompt on cluster redirection. 2013-02-14 18:49:08 +01:00
antirez
882e5ae8de Cluster: with 16384 slots we need bigger buffers. 2013-02-14 15:36:33 +01:00
antirez
6c809ab43a Cluster: move cluster config file out of config state.
This makes us able to avoid allocating the cluster state structure if
cluster is not enabled, but still we can handle the configuration
directive that sets the cluster config filename.
2013-02-14 15:20:02 +01:00
antirez
2531fea2a5 Cluster: the cluster state structure is now heap allocated. 2013-02-14 13:20:56 +01:00
antirez
fe93071f33 Cluster: Initialize ip and port in createClusterNode(). 2013-02-14 13:01:28 +01:00
antirez
4a00f830b9 Cluster: redis-trib updated to use 16384 hash slots. 2013-02-14 12:55:34 +01:00
antirez
e60743e0fc Cluster: from 4096 to 16384 hash slots. 2013-02-14 12:49:16 +01:00
antirez
c72be04d12 PSYNC: another change to unexpected reply from PSYNC. 2013-02-13 18:43:40 +01:00
antirez
67ef554e2e PSYNC: More robust handling of unexpected reply to PSYNC. 2013-02-13 18:33:33 +01:00
antirez
0795a4db2a Avoid compiler warning by casting to match printf() specifier. 2013-02-13 13:38:20 +01:00
antirez
f8e3cd19ad Replication: more strict error checking for master PING reply. 2013-02-12 16:53:27 +01:00
antirez
cb6ff7f5d1 Return a specific NOAUTH error if authentication is required. 2013-02-12 16:25:41 +01:00
antirez
12a3bf6245 Replication: added new stats counting full and partial resynchronizations. 2013-02-12 15:33:54 +01:00
antirez
950d8b40e5 Add missing bracket removed for error after rebase of PSYNC. 2013-02-12 12:56:32 +01:00
antirez
d5bed58b08 PSYNC: debugging printf() calls are now logs at DEBUG level. 2013-02-12 12:52:22 +01:00
antirez
33a7ca234d Remove harmless warning in slaveTryPartialResynchronization(). 2013-02-12 12:52:21 +01:00
antirez
10756f5c4a PSYNC: don't use the client buffer to send +CONTINUE and +FULLRESYNC.
When we are preparing an handshake with the slave we can't touch the
connection buffer as it'll be used to accumulate differences between
the sent RDB file and what arrives next from clients.

So in short we can't use addReply() family functions.

However we just use write(2) because we know that the socket buffer is
empty, since a prerequisite for SYNC to work is that the static buffer
and the output list are empty, and in general it is not expected that a
client SYNCs after doing some heavy I/O with the master.

However a short write connection is explicitly handled to avoid
fragility (we simply close the connection and the slave will retry).
2013-02-12 12:52:21 +01:00
antirez
b5ddb829b5 SYNC not allowed with pending data on the static output buffer. 2013-02-12 12:52:21 +01:00
antirez
65c0a0eb2b Log the unexpected string received in place of the SYNC payload length. 2013-02-12 12:52:21 +01:00
antirez
16b114d7db After SLAVEOF <newslave> don't allow chained slaves to PSYNC. 2013-02-12 12:52:21 +01:00
antirez
75512d94d9 PSYNC: work in progress, preview #2, rebased to unstable. 2013-02-12 12:52:21 +01:00
antirez
4860dda15d Use the new unified protocol to send SELECT to slaves.
SELECT was still transmitted to slaves using the inline protocol, that
is conceived mostly for humans to type into telnet sessions, and is
notably not understood by redis-cli --slave.

Now the new protocol is used instead.
2013-02-12 12:50:28 +01:00
antirez
96c5190ed9 Use replicationFeedSlaves() to send PING to slaves.
A Redis master sends PING commands to slaves from time to time: doing
this ensures that even if absence of writes, the master->slave channel
remains active and the slave can feel the master presence, instead of
closing the connection for timeout.

This commit changes the way PINGs are sent to slaves in order to use the
standard interface used to replicate all the other commands, that is,
the function replicationFeedSlaves().

With this change the stream of commands sent to every slave is exactly
the same regardless of their exact state (Transferring RDB for first
synchronization or slave already online). With the previous
implementation the PING was only sent to online slaves, with the result
that the output stream from master to slaves was not identical for all
the slaves: this is a problem if we want to implement partial resyncs in
the future using a global replication stream offset.

TL;DR: this commit should not change the behaviour in practical terms,
but is just something in preparation for partial resynchronization
support.
2013-02-12 12:50:28 +01:00
antirez
08d5aa6a20 Emit SELECT to slaves in a centralized way.
Before this commit every Redis slave had its own selected database ID
state. This was not actually useful as the emitted stream of commands
is identical for all the slaves.

Now the the currently selected database is a global state that is set to
-1 when a new slave is attached, in order to force the SELECT command to
be re-emitted for all the slaves.

This change is useful in order to implement replication partial
resynchronization in the future, as makes sure that the stream of
commands received by slaves, including SELECT commands, are exactly the
same for every slave connected, at any time.

In this way we could have a global offset that can identify a specific
piece of the master -> slaves stream of commands.
2013-02-12 12:50:28 +01:00
antirez
9a847c8fd4 Makefile: valgrind target added (forces -O0 and libc malloc). 2013-02-11 12:11:28 +01:00
antirez
c26737f3e5 Tcp keep-alive: send three probes before detectin an error.
Otherwise we end with less reliable connections because it's too easy
that a single packet gets lost.
2013-02-08 17:06:01 +01:00
antirez
96ef42d768 Set SO_KEEPALIVE on client sockets if configured to do so. 2013-02-08 16:40:59 +01:00
antirez
02949cd4bd Add SO_KEEPALIVE support to anet.c. 2013-02-08 16:30:26 +01:00
antirez
c3ce83fac0 Make all WATCHers dirty when the slave reloads the DB. 2013-02-08 10:26:19 +01:00
antirez
282a4d850e LASTSAVE is a "random" command. 2013-02-07 19:13:00 +01:00