Commits on Jul 6, 2016
  1. redis_check_rdb(): the rio structure must be global.

    The rio structure is referenced in the global 'riostate' structure
    in order for the logging functions to be always able to access the state
    of the "pseudo-loading" of the RDB, needed for the check.
    Courtesy of Valgrind.
    antirez committed Jul 6, 2016
  2. redis_check_rdb_main(): create shared objects only if needed.

    Otherwise Valgrind will complain a memory leak under certain tests where
    RDB checking is invoked from within Redis.
    antirez committed Jul 6, 2016
  3. Remove dead code from geohash_helper.c.

    The function removed also had potential bugs related to signess of the
    expression, and is not used anyway.
    antirez committed Jul 6, 2016
  4. Fix definition of M_PI in geohash_helper.c.

    Without the right feature macros M_PI is not defined in math.h.
    antirez committed Jul 6, 2016
  5. geohash.c and geohash_helper.c are part of Redis.

    They were under /deps since they originate from a different source tree,
    however at this point they are very modified and we took ownership of
    both the files making changes, fixing bugs, so there is no upgrade path
    from the original code tree.
    Given that, better to move the code under /src with proper dependencies
    and with a more simpler editing experience.
    antirez committed Jul 6, 2016
  6. Add expire.c and evict.c.

    antirez committed Jul 6, 2016
  7. Generate Makefile.dep at every build.

    Normally we used to update it from time to time. Too fragile... better
    to generate dependencies at every run and delete them on 'make clean'.
    antirez committed Jul 6, 2016
  8. Regression test for issue #3333.

    antirez committed Jul 6, 2016
  9. getLongLongFromObject: use string2ll() instead of strict_strtoll().

    strict_strtoll() has a bug that reports the empty string as ok and
    parses it as zero.
    Apparently nobody ever replaced this old call with the faster/saner
    string2ll() which is used otherwise in the rest of the Redis core.
    This commit close #3333.
    antirez committed Jul 6, 2016
Commits on Jul 5, 2016
  1. redis-cli: check SELECT reply type just in state updated.

    In issues #3361 / #3365 a problem was reported / fixed with redis-cli
    not updating correctly the current DB on error after SELECT.
    In theory this bug was fixed in 0042fb0, but actually the commit only
    fixed the prompt updating, not the fact the state was set in a wrong
    This commit removes the check in the prompt update, now that hopefully
    it is the state that is correct, there is no longer need for this check.
    antirez committed Jul 5, 2016
  2. Merge pull request #3365 from sskorgal/unstable

    Fix for redis_cli printing default DB when select command fails. #3361
    antirez committed on GitHub Jul 5, 2016
Commits on Jul 4, 2016
  1. Sentinel: fix cross-master Sentinel address update.

    This commit both fixes the crash reported with issue #3364 and
    also properly closes the old links after the Sentinel address for the
    other masters gets updated.
    The two problems where:
    1. The Sentinel that switched address may not monitor all the masters,
       it is possible that there is no match, and the 'match' variable is
       NULL. Now we check for no match and 'continue' to the next master.
    2. By ispecting the code because of issue "1" I noticed that there was a
       problem in the code that disconnects the link of the Sentinel that
       needs the address update. Basically link->disconnected is non-zero
       even if just *a single link* (cc -- command link or pc -- pubsub
       link) are disconnected, so to check with if (link->disconnected)
       in order to close the links risks to leave one link connected.
    I was able to manually reproduce the crash at "1" and verify that the
    commit resolves the issue.
    Close #3364.
    antirez committed Jul 4, 2016
  2. CONFIG GET is now no longer case sensitive.

    Like CONFIG SET always was. Close #3369.
    antirez committed Jul 4, 2016
  3. Make tcp-keepalive default to 300 in internal conf.

    We already changed the default in the redis.conf template, but I forgot
    to change the internal config as well.
    antirez committed Jul 4, 2016
Commits on Jul 1, 2016
Commits on Jun 30, 2016
  1. In Redis RDB check: initial POC.

    So far we used an external program (later executed within Redis) and
    parser in order to check RDB files for correctness. This forces, at each
    RDB format update, to have two copies of the same format implementation
    that are hard to keep in sync. Morover the former RDB checker only
    checked the very high-level format of the file, without actually trying
    to load things in memory. Certain corruptions can only be handled by
    really loading key-value pairs.
    This first commit attempts to unify the Redis RDB loadig code with the
    task of checking the RDB file for correctness. More work is needed but
    it looks like a sounding direction so far.
    antirez committed Jun 30, 2016
Commits on Jun 28, 2016
  1. Stress tester WIP.

    antirez committed Jun 28, 2016
  2. Regression test for issue #3343 exact min crash sequence.

    Note: it was verified that it can crash the test suite without the patch
    antirez committed Jun 28, 2016
Commits on Jun 27, 2016
  1. Fix quicklistReplaceAtIndex() by updating the quicklist ziplist size.

    The quicklist takes a cached version of the ziplist representation size
    in bytes. The implementation must update this length every time the
    underlying ziplist changes. However quicklistReplaceAtIndex() failed to
    fix the length.
    During LSET calls, the size of the ziplist blob and the cached size
    inside the quicklist diverged. Later, when this size is used in an
    authoritative way, for example during nodes splitting in order to copy
    the nodes, we end with a duplicated node that may contain random
    This commit should fix issue #3343, however several problems were found
    reviewing the quicklist.c code in search of this bug that should be
    addressed soon or later.
    For example:
    1. To take a cached ziplist length is fragile since failing to update it
    leads to this kind of issues.
    2. The node splitting code needs auditing. For example it works just for
    a side effect of ziplistDeleteRange() to be able to cope with a wrong
    count of elements to remove. The code inside quicklist.c assumes that
    -1 means "delete till the end" while actually it's just a count of how
    many elements to delete, and is an unsigned count. So -1 gets converted
    into the maximum integer, and just by chance the ziplist code stops
    deleting elements after there are no more to delete.
    3. Node splitting is extremely inefficient, it copies the node and
    removes elements from both nodes even when actually there is to move a
    single entry from one node to the other, or when the new resulting node
    is empty at all so there is nothing to copy but just to create a new
    However at least for Redis 3.2 to introduce fresh code inside
    quicklist.c may be even more risky, so instead I'm writing a better
    fuzzy tester to stress the internals a bit more in order to anticipate
    other possible bugs.
    This bug was found using a fuzzy tester written after having some clue
    about where the bug could be. The tester eventually created a ~2000
    commands sequence able to always crash Redis. I wrote a better version
    of the tester that searched for the smallest sequence that could crash
    Redis automatically. Later this smaller sequence was minimized by
    removing random commands till it still crashed the server. This resulted
    into a sequence of 7 commands. With this small sequence it was just a
    matter of filling the code with enough printf() to understand enough
    state to fix the bug.
    antirez committed Jun 27, 2016
Commits on Jun 24, 2016
  1. Merge pull request #3342 from yossigo/fix_calloc

    Fix RedisModule_Calloc() definition typo.
    antirez committed on GitHub Jun 24, 2016
Commits on Jun 23, 2016
  1. Merge pull request #3324 from mishan/fix-wrong-comment-about-sentinel…

    Fix incorrect comment for checkForSentinelMode function
    antirez committed on GitHub Jun 23, 2016