1. 04 May, 2015 2 commits
    • antirez's avatar
      Use cached time in expireCommand() · d57ac2c8
      antirez authored
      Should not be an issue given that the precision is the second here, at
      least if we are using a decent HZ value and the cached time refreshes
      enough times. So the cached time is only used if HZ is >= 10.
      d57ac2c8
    • antirez's avatar
      Update cached time during slow scripts & transactions · 27db4563
      antirez authored
      Commands may use cached time when the precision is not vital. It is
      a good idea to refresh it from time to time during the execution of long
      running scripts or transactions composed of quite a lot of commands.
      27db4563
  2. 30 Apr, 2015 1 commit
  3. 29 Apr, 2015 5 commits
  4. 28 Apr, 2015 3 commits
    • antirez's avatar
      Fix Sentinel memory leak (hiredis bug) · c806dd79
      antirez authored
      This fixes issue #2535, that was actually an hiredis library bug (I
      submitted an issue and fix to the redis/hiredis repo as well).
      
      When an asynchronous hiredis connection subscribes to a Pub/Sub channel
      and gets an error, and in other related conditions, the function
      redisProcessCallbacks() enters a code path where the link is
      disconnected, however the function returns before freeing the allocated
      reply object. This causes a memory leak. The memory leak was trivial to
      trigger in Redis Sentinel, which uses hiredis, every time we tried to
      subscribe to an instance that required a password, in case the Sentinel
      was configured either with the wrong password or without password at
      all. In this case, the -AUTH error caused the leaking code path to be
      executed.
      
      It was verified with Valgrind that after this change the leak no longer
      happens in Sentinel with a misconfigured authentication password.
      c806dd79
    • Jan-Erik Rediger's avatar
      One more small fix · fb532881
      Jan-Erik Rediger authored
      fb532881
    • Jan-Erik Rediger's avatar
      Fix spelling and grammatical errors in readme · 3ff49aff
      Jan-Erik Rediger authored
      Closes #2549
      3ff49aff
  5. 27 Apr, 2015 2 commits
  6. 26 Apr, 2015 1 commit
  7. 24 Apr, 2015 1 commit
  8. 23 Apr, 2015 1 commit
  9. 01 Apr, 2015 2 commits
  10. 31 Mar, 2015 3 commits
    • antirez's avatar
      Test: be more patient waiting for servers to exit. · 38680424
      antirez authored
      This should likely fix a false positive when running with the --valgrind
      option.
      38680424
    • Oran Agra's avatar
      fixes to diskless replication. · 159875b5
      Oran Agra authored
      master was closing the connection if the RDB transfer took long time.
      and also sent PINGs to the slave before it got the initial ACK, in which case the slave wouldn't be able to find the EOF marker.
      159875b5
    • antirez's avatar
      Fix setTypeNext call assuming NULL can be passed. · 66f9393e
      antirez authored
      Segfault introduced during a refactoring / warning suppression a few
      commits away. This particular call assumed that it is safe to pass NULL
      to the object pointer argument when we are sure the set has a given
      encoding. This can't be assumed and is now guaranteed to segfault
      because of the new API of setTypeNext().
      66f9393e
  11. 30 Mar, 2015 4 commits
  12. 27 Mar, 2015 3 commits
  13. 24 Mar, 2015 3 commits
    • antirez's avatar
      Replication: disconnect blocked clients when switching to slave role. · c3ad7090
      antirez authored
      Bug as old as Redis and blocking operations. It's hard to trigger since
      only happens on instance role switch, but the results are quite bad
      since an inconsistency between master and slave is created.
      
      How to trigger the bug is a good description of the bug itself.
      
      1. Client does "BLPOP mylist 0" in master.
      2. Master is turned into slave, that replicates from New-Master.
      3. Client does "LPUSH mylist foo" in New-Master.
      4. New-Master propagates write to slave.
      5. Slave receives the LPUSH, the blocked client get served.
      
      Now Master "mylist" key has "foo", Slave "mylist" key is empty.
      
      Highlights:
      
      * At step "2" above, the client remains attached, basically escaping any
        check performed during command dispatch: read only slave, in that case.
      * At step "5" the slave (that was the master), serves the blocked client
        consuming a list element, which is not consumed on the master side.
      
      This scenario is technically likely to happen during failovers, however
      since Redis Sentinel already disconnects clients using the CLIENT
      command when changing the role of the instance, the bug is avoided in
      Sentinel deployments.
      
      Closes #2473.
      c3ad7090
    • antirez's avatar
      Cluster: redirection refactoring + handling of blocked clients. · 9b7f8b1c
      antirez authored
      There was a bug in Redis Cluster caused by clients blocked in a blocking
      list pop operation, for keys no longer handled by the instance, or
      in a condition where the cluster became down after the client blocked.
      
      A typical situation is:
      
      1) BLPOP <somekey> 0
      2) <somekey> hash slot is resharded to another master.
      
      The client will block forever int this case.
      
      A symmentrical non-cluster-specific bug happens when an instance is
      turned from master to slave. In that case it is more serious since this
      will desynchronize data between slaves and masters. This other bug was
      discovered as a side effect of thinking about the bug explained and
      fixed in this commit, but will be fixed in a separated commit.
      9b7f8b1c
    • Salvatore Sanfilippo's avatar
      Merge pull request #2470 from superlogical/unstable · eff68bd6
      Salvatore Sanfilippo authored
      create-cluster fix for stop and watch commands
      eff68bd6
  14. 23 Mar, 2015 1 commit
  15. 22 Mar, 2015 5 commits
  16. 21 Mar, 2015 3 commits