Commits on Jan 16, 2013
  1. Redis 2.6.9

    committed Jan 16, 2013
Commits on Jan 15, 2013
  1. Typo fixed, ASCI -> ASCII.

    committed Jan 11, 2013

    Sometimes it is much simpler to debug complex Redis installations if it
    is possible to assign clients a name that is displayed in the CLIENT
    LIST output.
    This is the case, for example, for "leaked" connections. The ability to
    provide a name to the client makes it quite trivial to understand what
    is the part of the code implementing the client not releasing the
    resources appropriately.
        CLIENT SETNAME: set a name for the client, or remove the current
                        name if an empty name is set.
        CLIENT GETNAME: get the current name, or a nil.
        CLIENT LIST: now displays the client name if any.
    Thanks to Mark Gravell for pushing this idea forward.
    committed Jan 11, 2013
  3. Undo slave-master handshake when SLAVEOF sets a new slave.

    Issue #828 shows how Redis was not correctly undoing a non-blocking
    connection attempt with the previous master when the master was set to a
    new address using the SLAVEOF command.
    This was also a result of lack of refactoring, so now there is a
    function to cancel the non blocking handshake with the master.
    The new function is now used when SLAVEOF NO ONE is called or when
    SLAVEOF is used to set the master to a different address.
    committed Jan 14, 2013
Commits on Jan 11, 2013
  1. Makefile.dep updated.

    committed Jan 11, 2013
Commits on Jan 10, 2013
  1. Redis 2.6.8

    committed Jan 10, 2013
  2. Multiple fixes for EVAL (issue #872).

    1) The event handler was no restored after a timeout condition if the
       command was eventually executed with success.
    2) The command was not converted to EVAL in case of errors in the middle
       of the execution.
    3) Terrible duplication of code without any apparent reason.
    committed Jan 10, 2013
Commits on Jan 3, 2013
  1. ae.c: set errno when error is not a failing syscall.

    In this way the caller is able to perform better error checking or to
    use strerror() without the risk of meaningless error messages being
    committed Jan 3, 2013
Commits on Dec 20, 2012
  1. Fix overflow in mstime() in redis-cli and benchmark.

    The problem does not exist in the Redis server implementation of mstime()
    but is only limited to redis-cli and redis-benchmark.
    Thix fixes issue #839.
    committed Dec 20, 2012
Commits on Dec 17, 2012
Commits on Dec 12, 2012
  1. Define _XOPEN_SOURCE appropriately on NetBSD.

    Patrick TJ McPhee committed with Dec 12, 2012
Commits on Dec 11, 2012
  1. Fix config.h endianess detection to work on Linux / PPC64.

    Config.h performs endianess detection including OS-specific headers to
    define the endianess macros, or when this is not possible, checking the
    processor type via ifdefs.
    Sometimes when the OS-specific macro is included, only __BYTE_ORDER is
    defined, while BYTE_ORDER remains undefined. There is code at the end of
    config.h endianess detection in order to define the macros without the
    underscore, but it was not working correctly.
    This commit fixes endianess detection fixing Redis on Linux / PPC64 and
    possibly other systems.
    committed Dec 11, 2012
Commits on Dec 3, 2012
  1. Redis 2.6.7

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

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

    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.
    committed Dec 3, 2012
  4. Test: fixed osx "leaks" support in test.

    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.
    committed Dec 3, 2012
Commits on Dec 2, 2012
  1. Blocking POP: use a dictionary to store keys clinet side.

    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.
    committed Dec 2, 2012
Commits on Dec 1, 2012
  1. Test: regression for issue #801.

    committed Dec 1, 2012
  2. Client should not block multiple times on the same key.

    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.
    committed Dec 1, 2012
Commits on Nov 29, 2012
Commits on Nov 28, 2012
  1. Redis 2.6.6

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

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

    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.
    committed Nov 22, 2012
  3. Fix integer overflow in zunionInterGenericCommand().

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

    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.
    committed Nov 15, 2012