Commits on Dec 3, 2012
  1. Redis 2.6.7

    antirez committed Dec 3, 2012
  2. Issue 804 Add Default-Start and Default-Stop LSB tags for RedHat star…

    bmcmanus authored and antirez committed Dec 3, 2012
    …tup and update-rc.d compatability.
  3. Memory leak fixed: release client's bpop->keys dictionary.

    antirez committed Dec 3, 2012
    Refactoring performed after issue #801 resolution (see commit
    2f87cf8) introduced a memory leak that
    is fixed by this commit.
    I simply forgot to free the new allocated dictionary in the client
    structure trusting the output of "make test" on OSX.
    However due to changes in the "leaks" utility the test was no longer
    testing memory leaks. This problem was also fixed.
    Fortunately the CI test running at spotted the bug in the
    valgrind run.
    The leak never ended into a stable release.
  4. Test: fixed osx "leaks" support in test.

    antirez committed Dec 3, 2012
    Due to changes in recent releases of osx leaks utility, the osx leak
    detection no longer worked. Now it is fixed in a way that should be
    backward compatible.
Commits on Dec 2, 2012
  1. Blocking POP: use a dictionary to store keys clinet side.

    antirez committed Dec 2, 2012
    To store the keys we block for during a blocking pop operation, in the
    case the client is blocked for more data to arrive, we used a simple
    linear array of redis objects, in the blockingState structure:
        robj **keys;
        int count;
    However in order to fix issue #801 we also use a dictionary in order to
    avoid to end in the blocked clients queue for the same key multiple
    times with the same client.
    The dictionary was only temporary, just to avoid duplicates, but since
    we create / destroy it there is no point in doing this duplicated work,
    so this commit simply use a dictionary as the main structure to store
    the keys we are blocked for. So instead of the previous fields we now
    just have:
        dict *keys;
    This simplifies the code and reduces the work done by the server during
    a blocking POP operation.
Commits on Dec 1, 2012
  1. Client should not block multiple times on the same key.

    antirez committed Dec 1, 2012
    Sending a command like:
    BLPOP foo foo foo foo 0
    Resulted into a crash before this commit since the client ended being
    inserted in the waiting list for this key multiple times.
    This resulted into the function handleClientsBlockedOnLists() to fail
    because we have code like that:
        if (de) {
            list *clients = dictGetVal(de);
            int numclients = listLength(clients);
            while(numclients--) {
                listNode *clientnode = listFirst(clients);
                /* server clients here... */
    The code to serve clients used to remove the served client from the
    waiting list, so if a client is blocking multiple times, eventually the
    call to listFirst() will return NULL or worse will access random memory
    since the list may no longer exist as it is removed by the function
    unblockClientWaitingData() if there are no more clients waiting for this
    To avoid making the rest of the implementation more complex, this commit
    modifies blockForKeys() so that a client will be put just a single time
    into the waiting list for a given key.
    Since it is Saturday, I hope this fixes issue #801.
Commits on Nov 29, 2012
Commits on Nov 28, 2012
  1. Redis 2.6.6

    antirez committed Nov 28, 2012
Commits on Nov 22, 2012
  1. Redis 2.6.5

    antirez committed Nov 22, 2012
  2. EVALSHA is now case insensitive.

    antirez committed Nov 22, 2012
    EVALSHA used to crash if the SHA1 was not lowercase (Issue #783).
    Fixed using a case insensitive dictionary type for the sha -> script
    map used for replication of scripts.
  3. Fix integer overflow in zunionInterGenericCommand().

    antirez committed Nov 22, 2012
    This fixes issue #761.
  4. Safer handling of MULTI/EXEC on errors.

    antirez committed Nov 15, 2012
    After the transcation starts with a MULIT, the previous behavior was to
    return an error on problems such as maxmemory limit reached. But still
    to execute the transaction with the subset of queued commands on EXEC.
    While it is true that the client was able to check for errors
    distinguish QUEUED by an error reply, MULTI/EXEC in most client
    implementations uses pipelining for speed, so all the commands and EXEC
    are sent without caring about replies.
    With this change:
    1) EXEC fails if at least one command was not queued because of an
    error. The EXECABORT error is used.
    2) A generic error is always reported on EXEC.
    3) The client DISCARDs the MULTI state after a failed EXEC, otherwise
    pipelining multiple transactions would be basically impossible:
    After a failed EXEC the next transaction would be simply queued as
    the tail of the previous transaction.
Commits on Nov 20, 2012
  1. Children creating AOF or RDB files now report memory used by COW.

    antirez committed Nov 19, 2012
    Finally Redis is able to report the amount of memory used by
    copy-on-write while saving an RDB or writing an AOF file in background.
    Note that this information is currently only logged (at NOTICE level)
    and not shown in INFO because this is less trivial (but surely doable
    with some minor form of interprocess communication).
    The reason we can't capture this information on the parent before we
    call wait3() is that the Linux kernel will release the child memory
    ASAP, and only retain the minimal state for the process that is useful
    to report the child termination to the parent.
    The COW size is obtained by summing all the Private_Dirty fields found
    in the "smap" file inside the proc filesystem for the process.
    All this is Linux specific and is not available on other systems.
  2. zmalloc_get_private_dirty() function added (Linux only).

    antirez committed Nov 19, 2012
    For non Linux systmes it just returns 0.
    This function is useful to estimate copy-on-write because of childs
    saving stuff on disk.
Commits on Nov 14, 2012
Commits on Nov 12, 2012
  1. MIGRATE: fix default timeout to 1000 milliseconds.

    antirez committed Nov 12, 2012
    When a timeout <= 0 is provided we set a default timeout of 1 second.
    It was set to 1 millisecond for an error resulting from a recent change.
  2. MIGRATE timeout should be in milliseconds.

    antirez committed Nov 12, 2012
    While it is documented that the MIGRATE timeout is in milliseconds, it
    was in seconds instead. This commit fixes the problem.
Commits on Nov 8, 2012
  1. Redis 2.6.4

    antirez committed Nov 8, 2012
  2. Make clear that contributing code to the Redis project means to relea…

    antirez committed Nov 8, 2012
    …se it under the terms of the BSD license.
Commits on Nov 6, 2012
  1. Redis 2.6.3

    antirez committed Nov 6, 2012
Commits on Nov 2, 2012
  1. fix a typo in redis.h line 595 comment

    Runzhen Wang authored and antirez committed Oct 31, 2012
Commits on Nov 1, 2012
  1. More robust handling of AOF rewrite child.

    antirez committed Nov 1, 2012
    After the wait3() syscall we used to do something like that:
        if (pid == server.rdb_child_pid) {
        } else {
    So the AOF rewrite was handled in the else branch without actually
    checking if the pid really matches. This commit makes the check explicit
    and logs at WARNING level if the pid returned by wait3() does not match
    neither the RDB or AOF rewrite child.
  2. Merge pull request #743 from Cofyc/fixtypo

    antirez committed Nov 1, 2012
    fix typo in comments (redis.c, networking.c)
  3. Unix socket clients properly displayed in MONITOR and CLIENT LIST.

    antirez committed Nov 1, 2012
    This also fixes issue #745.
  4. 32 bit build fixed on Linux.

    antirez committed Nov 1, 2012
    It failed because of the way jemalloc was compiled (without passing the
    right flags to make, but just to configure). Now the same set of flags
    are also passed to the make command, fixing the issue.
    This fixes issue #744
Commits on Oct 31, 2012
  1. fix a typo in a comment

    yamt authored and antirez committed Oct 24, 2012