4306 Commits

Author SHA1 Message Date
antirez
54a526687d Slaves heartbeat while loading RDB files.
Starting with Redis 2.8 masters are able to detect timed out slaves,
while before 2.8 only slaves were able to detect a timed out master.

Now that timeout detection is bi-directional the following problem
happens as described "in the field" by issue #1449:

1) Master and slave setup with big dataset.
2) Slave performs the first synchronization, or a full sync
   after a failed partial resync.
3) Master sends the RDB payload to the slave.
4) Slave loads this payload.
5) Master detects the slave as timed out since does not receive back the
   REPLCONF ACK acknowledges.

Here the problem is that the master has no way to know how much the
slave will take to load the RDB file in memory. The obvious solution is
to use a greater replication timeout setting, but this is a shame since
for the 0.1% of operation time we are forced to use a timeout that is
not what is suited for 99.9% of operation time.

This commit tries to fix this problem with a solution that is a bit of
an hack, but that modifies little of the replication internals, in order
to be back ported to 2.8 safely.

During the RDB loading time, we send the master newlines to avoid
being sensed as timed out. This is the same that the master already does
while saving the RDB file to still signal its presence to the slave.

The single newline is used because:

1) It can't desync the protocol, as it is only transmitted all or
nothing.
2) It can be safely sent while we don't have a client structure for the
master or in similar situations just with write(2).
2013-12-09 20:26:00 +01:00
antirez
ae81525d35 Handle inline requested terminated with just \n. 2013-12-09 13:28:39 +01:00
Yossi Gottlieb
834a5f530d Return proper error on requests with an unbalanced number of quotes. 2013-12-08 12:58:12 +02:00
antirez
b6d79f34e8 Sentinel: fix reported role info sampling.
The way the role change was recoded was not sane and too much
convoluted, causing the role information to be not always updated.

This commit fixes issue #1445.
2013-12-06 12:46:56 +01:00
antirez
33ea913329 Sentinel: fix reported role fields when master is reset.
When there is a master address switch, the reported role must be set to
master so that we have a chance to re-sample the INFO output to check if
the new address is reporting the right role.

Otherwise if the role was wrong, it will be sensed as wrong even after
the address switch, and for enough time according to the role change
time, for Sentinel consider the master SDOWN.

This fixes isue #1446, that describes the effects of this bug in
practice.
2013-12-06 11:37:46 +01:00
antirez
87d6939e79 Fixed typo in redis.conf. 2013-12-06 10:48:46 +01:00
Salvatore Sanfilippo
7230831fd5 Merge pull request #1439 from AnuragRamdasan/patch-3
Grammar fix.
2013-12-05 09:53:45 -08:00
Anurag Ramdasan
f775787f2e Grammar fix. 2013-12-05 23:15:47 +05:30
Salvatore Sanfilippo
d5c369a836 Merge pull request #1438 from AnuragRamdasan/patch-2
fixed typo
2013-12-05 08:18:20 -08:00
Anurag Ramdasan
f416ddc327 fixed typo 2013-12-05 21:47:17 +05:30
Salvatore Sanfilippo
4eda9be590 Merge pull request #1437 from AnuragRamdasan/patch-1
Fixed grammar: 'usually' to 'usual'
2013-12-05 07:42:05 -08:00
Anurag Ramdasan
6232143904 Fixed grammar: 'usually' to 'usual' 2013-12-05 21:09:31 +05:30
antirez
7a5a646df9 Fixed grammar: before H the article is a, not an. 2013-12-05 16:35:32 +01:00
antirez
6763faef58 Fixed typos in redis.conf file. 2013-12-05 16:28:35 +01:00
antirez
faa5495eea Fix clients timeout handling.
During the refactoring of blocking operations, commit
83e363d3e67c27865d7679c27f466c5e12b3d4ee, a bug was introduced where
a milliseconds time is compared to a seconds time, so all the clients
always appear to timeout if timeout is set to non-zero value.

Thanks to Jonathan Leibiusky for finding the bug and helping verifying
the cause and fix.
2013-12-05 14:55:07 +01:00
antirez
a7ebb0c7bf WAIT command: synchronous replication for Redis. 2013-12-04 16:20:03 +01:00
antirez
5f743cc4f8 blocked.c API commented. 2013-12-03 18:03:15 +01:00
antirez
83e363d3e6 BLPOP blocking code refactored to be generic & reusable. 2013-12-03 17:43:53 +01:00
antirez
a6ed453b33 Removed old comments and dead code from freeClient(). 2013-12-03 13:54:06 +01:00
antirez
1ea9a283cb Grammar fix in freeClient(). 2013-12-03 13:40:41 +01:00
antirez
6fc6c6bda9 Sentinel: don't write HZ when flushing config.
See issue #1419.
2013-12-02 15:56:10 +01:00
antirez
4df452caf6 Sentinel: better time desynchronization.
Sentinels are now desynchronized in a better way changing the time
handler frequency between 10 and 20 HZ. This way on average a
desynchronization of 25 milliesconds is produced that should be larger
enough compared to network latency, avoiding most split-brain condition
during the vote.

Now that the clocks are desynchronized, to have larger random delays when
performing operations can be easily achieved in the following way.
Take as example the function that starts the failover, that is
called with a frequency between 10 and 20 HZ and will start the
failover every time there are the conditions. By just adding as an
additional condition something like rand()%4 == 0, we can amplify the
desynchronization between Sentinel instances easily.

See issue #1419.
2013-12-02 12:29:42 +01:00
antirez
b7c955046d Cluster: nodes re-addition blacklist API. 2013-12-02 11:12:23 +01:00
antirez
5502face59 Cluster: basic data structures for nodes black list. 2013-11-29 17:37:06 +01:00
antirez
a829c85988 Cluster: some code about clusterHandleSlaveFailover() marginally improved.
80 cols friendly, some minor change to the code to make it simpler.
2013-11-29 16:17:05 +01:00
antirez
7cd6b48963 Stop writes on MISCONF only if instance is a master.
From the point of view of the slave not accepting writes from the master
can only create a bigger consistency issue.
2013-11-28 16:29:26 +01:00
antirez
d0a7a5a39f Reply to PING with error when there is a MISCONF state. 2013-11-28 16:17:10 +01:00
antirez
394bccd137 Sentinel: log vote received from other Sentinels. 2013-11-28 15:23:46 +01:00
Salvatore Sanfilippo
e59eaad57e Merge pull request #1401 from huangz1990/fix_sentinel_bug
fix a bug in sentinel.c about pub/sub link
2013-11-26 06:15:25 -08:00
huangz1990
a1979d9d55 fix a bug in sentinel.c about pub/sub link 2013-11-26 19:55:51 +08:00
antirez
2995302165 Sentinel: fixes inverted strcmp() test preventing config updates.
The result of this one-char bug was pretty serious, if the new master
had the same port of the previous master, but just a different IP
address, non-leader Sentinels would not be able to recognize the
configuration change.

This commit fixes issue #1394.

Many thanks to @shanemadden that reported the bug and helped
investigating it.
2013-11-25 10:59:53 +01:00
antirez
90bacd032e Sentinel: fix type specifier for Hello msg generation.
This fixes issue #1395.
2013-11-25 10:24:34 +01:00
antirez
8bc3e626a5 Fix false positive in memory efficiency test.
Fixes issue #1298.
2013-11-25 10:21:46 +01:00
antirez
573c416e00 Sentinel: example sentinel.conf updated. 2013-11-21 17:07:00 +01:00
antirez
e8b13dc679 Sentinel: different comments updated to new implementation. 2013-11-21 16:22:59 +01:00
antirez
6feb6cfdf8 Sentinel: cleanup around SENTINEL_INFO_VALIDITY_TIME. 2013-11-21 16:05:41 +01:00
antirez
0fa5d0e537 Sentinel: removed mem leak and useless code. 2013-11-21 15:43:55 +01:00
antirez
c8bbc084d5 Merge branch 'newsentinel' into unstable 2013-11-21 15:01:25 +01:00
antirez
166b380011 Sentinel: manual failover works again. 2013-11-21 12:39:47 +01:00
antirez
adbba45d5d Sentinel: test for writable config file.
This commit introduces a funciton called when Sentinel is ready for
normal operations to avoid putting Sentinel specific stuff in redis.c.
2013-11-21 12:28:15 +01:00
antirez
98f08fa3ab Sentinel: check for disconnected links in sentinelSendHello().
Does not fix any bug as the test is performed by the caller, but better
to have the check.
2013-11-21 11:35:50 +01:00
antirez
221d4d48f4 Sentinel: Hello message sending code refactored. 2013-11-21 11:31:06 +01:00
antirez
3f92ee09ae Sentinel: select slave with best (greater) replication offset. 2013-11-20 16:05:36 +01:00
antirez
3ea52291d9 Sentinel: take the replication offset in slaves state. 2013-11-20 15:53:21 +01:00
antirez
19f625ed5c CONFIG REWRITE: don't add the signature if it already exists.
At the end of the file, CONFIG REWRITE adds a comment line that:

    # Generated by CONFIG REWRITE

Followed by the additional config options required. However this was
added again and again at every rewrite in praticular conditions (when a
given set of options change in a given time during the time).

Now if it was alrady encountered, it is not added a second time.

This is especially important for Sentinel that rewrites the config at
every state change.
2013-11-19 17:58:11 +01:00
antirez
5d77fe69c7 Sentinel: distinguish between is-master-down-by-addr requests.
Some are just to know if the master is down, and in this case the runid
in the request is set to "*", others are actually in order to seek for a
vote and get elected. In the latter case the runid is set to the runid
of the instance seeking for the vote.
2013-11-19 16:50:04 +01:00
antirez
9bae762af3 Sentinel: various fixes to leader election implementation. 2013-11-19 16:20:42 +01:00
antirez
101f583689 Sentinel: failover script execution fixed. 2013-11-19 12:34:46 +01:00
antirez
02b42dc7c7 Sentinel: no longer used defines removed. 2013-11-19 11:24:36 +01:00
antirez
934e4d103f Sentinel: when writing config on disk, remember sentinels runid. 2013-11-19 11:11:43 +01:00