4535 Commits

Author SHA1 Message Date
antirez
b46271cc78 Remove useless var and check in zunionInterGenericCommand(). 2014-07-23 09:41:01 +02:00
antirez
5e88bd0526 ZUNIONSTORE reimplemented for speed.
The user @kjmph provided excellent ideas to improve speed of ZUNIONSTORE
(in certain cases by many order of magnitude), together with an
implementation of the ideas.

While the ideas were sounding, the implementation could be improved both
in terms of speed and clearness, so that's my attempt at reimplementing
the speedup proposed, trying to improve by directly using just a
dictionary with an embedded score inside, and reusing the single-pass
aggregate + order-later approach.

Note that you can't apply this commit without applying the previous
commit in this branch that adds a double in the dictEntry value union.

Issue #1786.
2014-07-23 09:41:01 +02:00
antirez
36498152f5 Add double field in dict.c entry value union. 2014-07-23 09:41:01 +02:00
antirez
955b25624e CLUSTER RESET: Flush dataset if node is a slave.
For non-empty masters, CLUSTER RESET is denied, and the user requires to
start to reset a node by explicitly clearing it with FLUSHALL.
However CLUSTER RESET when executed with slaves don't have this
restrictions since data is just a replica of the master, and with
read-only slaves it is also not possible to remove the data set. However
the node was turned from slave to master after a reset, without touching
the old slave data. This is 99.99% of times not appropriate and forces
full resets to follow this path to work with both slave and master
nodes:

    FLUSHALL
    CLUSTER RESET HARD
    FLUSHALL

Since we need the first flushall for masters, and the second for slaves.

This commit changes the behavior so that CLUSTER RESET removes the data set
of a slave node during a reset, in the moment it gets turned into a master,
so the new pattern is simply:

    FLUSHALL (that may fail for slaves)
    CLUSTER RESET
2014-07-23 09:41:01 +02:00
antirez
e8199b67e3 Cluster test: use larger keyspace in resharding test. 2014-07-23 09:41:01 +02:00
antirez
b4937427db Cluster test: unit 04, consistency during resharding. 2014-07-23 09:41:01 +02:00
antirez
16a66581fe Cluster: fix redis-trib --from all. 2014-07-23 09:41:01 +02:00
antirez
ec054b36c3 redis-trib: allow to reshard in non-interactive way.
The introduction of --from --to --slots --yes options allow to reshard
from cli in an automated way from scripts. The code is ugly and needs
refactoring as soon as we get it in RC / stable release.
2014-07-23 09:41:01 +02:00
antirez
e6ac6a170b Cluster test: test that writes are retained during failovers.
In the test we use WAIT when the master and slave are up, and only later the
partition is created killing the master, so we are sure we don't incur
in failure modes that may lose writes in this test: the goal here is to
make sure that the elected slave was replicating correctly with the
master.
2014-07-23 09:41:01 +02:00
antirez
d080eea03d Test: Pub/Sub PING. 2014-07-18 12:20:56 +02:00
antirez
e236199be8 Test: small integer sharing depends on maxmemory policy. 2014-07-18 12:20:56 +02:00
antirez
29e1c431bd PING: backward compatible error for wrong number of args. 2014-07-18 12:20:56 +02:00
antirez
2570eeb711 tryObjectEncoding(): use shared objects with maxmemory and non-LRU policy.
In order to make sure every object has its own private LRU counter, when
maxmemory is enabled tryObjectEncoding() does not use the pool of shared
integers. However when the policy is not LRU-based, it does not make
sense to do so, and it is much better to save memory using shared
integers.
2014-07-18 12:20:56 +02:00
antirez
2264b9816c Variadic PING with support for Pub/Sub.
PING can now be called with an additional arugment, behaving exactly
like the ECHO command. PING can now also be called in Pub/Sub mode (with
one more more subscriptions to channels / patterns) in order to trigger
the delivery of an asynchronous pong message with the optional payload.

This fixes issue #420.
2014-07-18 12:20:56 +02:00
antirez
23c1408963 PubSub clients refactoring and new PUBSUB flag.
The code tested many times if a client had active Pub/Sub subscriptions
by checking the length of a list and dictionary where the patterns and
channels are stored. This was substituted with a client flag called
REDIS_PUBSUB that is simpler to test for. Moreover in order to manage
this flag some code was refactored.

This commit is believed to have no effects in the behavior of the
server.
2014-07-18 12:20:56 +02:00
antirez
63f6351858 RDB: load string objects directly as EMBSTR objects when possible. 2014-07-18 12:20:56 +02:00
michael-grunder
d75fc09354 Fix OBJECT arity
Previously, the command definition for the OBJECT command specified
a minimum of two args (and that it was variadic), which meant that
if you sent this:

OBJECT foo

When cluster was enabled, it would result in an assertion/SEGFAULT
when Redis was attempting to extract keys.

It appears that OBJECT is not variadic, and only ever takes 3 args.

https://gist.github.com/michael-grunder/25960ce1508396d0d36a
2014-07-18 12:20:56 +02:00
antirez
a16feb99f2 Fix typo in LATENCY DOCTOR output. 2014-07-18 12:20:56 +02:00
antirez
639674b309 Test: more reliable AOF rewrite test under write load. 2014-07-18 12:20:56 +02:00
antirez
0e22e4ae91 LATENCY command / monitor basic tests. 2014-07-18 12:20:56 +02:00
antirez
034f39f14d LATENCY HISTORY returns empty array if no data is available.
Previously we returned an error.
2014-07-18 12:20:56 +02:00
antirez
ef7c1fbcef Test: enable latency monitor in the default config.
This way as a side effect of running the test we also stress the latency
monitor data collection.
2014-07-18 12:20:56 +02:00
antirez
93c6ea6c6f Test: AOF rewrite during write load. 2014-07-18 12:20:56 +02:00
antirez
959667ffe1 Fixed a few missing newline in createLatencyReport(). 2014-07-18 12:20:56 +02:00
antirez
c9ddd141dd createLatencyReport(): compile before commit avoids commits. 2014-07-18 12:20:56 +02:00
antirez
1b6d614f2c createLatencyReport(), fix mount option name. 2014-07-18 12:20:56 +02:00
antirez
44de3a9cfb createLatencyReport(): initialize all advices to zero. 2014-07-18 12:20:56 +02:00
antirez
a117fd2a44 LATENCY DOCTOR first implementation complete. 2014-07-18 12:20:56 +02:00
antirez
31e1e30aa6 Fix analyzeLatencyForEvent() MAD computation. 2014-07-18 12:20:56 +02:00
antirez
9ed02e137c LATENCY DOCTOR: initial draft and events summary output. 2014-07-18 12:20:56 +02:00
antirez
c7f1aa74d7 Latency: low level time series analysis implemented. 2014-07-18 12:20:56 +02:00
antirez
9a037792b6 LATENCY SAMPLES renamed LATENCY HISTORY. 2014-07-18 12:20:56 +02:00
antirez
7c6a028a3a LATENCY RESET implemented. 2014-07-18 12:20:56 +02:00
antirez
cc7b10cb52 Better "final read from parent" algorithm in rewriteAppendOnlyFile*(.
We now wait up to 1 second for diff data to come from the parent,
however we use poll(2) to wait for more data, and use a counter of
contiguous failures to get data for N times (set to 20 experimentally
after different tests) as an early stop condition to avoid wasting 1
second when the write traffic is too low.
2014-07-18 12:20:56 +02:00
antirez
d721e6e5c3 Log AOF diff sizes in MBs instead of bytes. 2014-07-18 12:20:56 +02:00
antirez
e615539cc7 aofChildWriteDiffData() better handling of free blocks. 2014-07-18 12:20:55 +02:00
antirez
f0a58bfaba redis-benchmark: abort when all clients are disconnected. 2014-07-18 12:20:55 +02:00
antirez
d3514edd3e Fine tuning of aofReadDiffFromParent() calls trigger. 2014-07-18 12:20:55 +02:00
antirez
180c9143b9 Use amount of I/O not ops to trigger aofReadDiffFromParent(). 2014-07-18 12:20:55 +02:00
antirez
e05cd36326 aofChildWriteDiffData(): write as much as possible. 2014-07-18 12:20:55 +02:00
antirez
9494c84523 Handle write failure in AOF parent -> child ACK. 2014-07-18 12:20:55 +02:00
antirez
896256210f Use a timeout when reading parent ack from AOF child. 2014-07-18 12:20:55 +02:00
antirez
576056d973 Send AOF diffs from parent to child to improve latency. 2014-07-18 12:20:55 +02:00
antirez
ca2db2bcb9 Use fsync instead of aof_fsync in final AOF sync.
This happens in the child process so we don't care about latency:
better to sync metadata as well.
2014-07-18 12:20:55 +02:00
antirez
74423be7a5 Fixed conditional for aof-write-pending-fsync latency event selection. 2014-07-18 12:20:55 +02:00
antirez
7989b612af Dependencies updated. 2014-07-18 12:20:55 +02:00
antirez
289e83f1c9 Cast void* to char* to avoid waring in latencyCommand(). 2014-07-18 12:20:55 +02:00
antirez
a7dc975a81 Properly initialize min/max in latency.c. 2014-07-18 12:20:55 +02:00
antirez
b2d6266521 latencyStartMonitor() modified to avoid warnings. 2014-07-18 12:20:55 +02:00
antirez
cd5c13e12f Latency monitor: specialize delayed aof writes events. 2014-07-18 12:20:55 +02:00