1. 10 Jun, 2020 9 commits
  2. 21 Apr, 2020 1 commit
  3. 09 Apr, 2020 2 commits
  4. 06 Apr, 2020 1 commit
  5. 01 Apr, 2020 1 commit
  6. 31 Mar, 2020 1 commit
  7. 02 Mar, 2020 1 commit
  8. 14 Feb, 2020 1 commit
  9. 06 Feb, 2020 1 commit
    • Guy Benoish's avatar
      Diskless-load emptyDb-related fixes · 92dc5e1f
      Guy Benoish authored
      1. Call emptyDb even in case of diskless-load: We want modules
         to get the same FLUSHDB event as disk-based replication.
      2. Do not fire any module events when flushing the backups array.
      3. Delete redundant call to signalFlushedDb (Called from emptyDb).
      92dc5e1f
  10. 05 Feb, 2020 2 commits
  11. 07 Jan, 2020 1 commit
  12. 23 Dec, 2019 1 commit
  13. 18 Dec, 2019 3 commits
  14. 19 Nov, 2019 2 commits
  15. 14 Nov, 2019 1 commit
  16. 06 Nov, 2019 1 commit
    • antirez's avatar
      Update PR #6537: use a fresh time outside call(). · 8b2c0f90
      antirez authored
      One problem with the solution proposed so far in #6537 is that key
      lookups outside a command execution via call(), still used a cached
      time. The cached time needed to be refreshed in multiple places,
      especially because of modules callbacks from timers, cluster bus, and
      thread safe contexts, that may use RM_Open().
      
      In order to avoid this problem, this commit introduces the ability to
      detect if we are inside call(): this way we can use the reference fixed
      time only when we are in the context of a command execution or Lua
      script, but for the asynchronous lookups, we can still use mstime() to
      get a fresh time reference.
      8b2c0f90
  17. 05 Nov, 2019 2 commits
    • antirez's avatar
      Update PR #6537 patch to for generality. · 824f5f0b
      antirez authored
      After the thread in #6537 and thanks to the suggestions received, this
      commit updates the original patch in order to:
      
      1. Solve the problem of updating the time in multiple places by updating
      it in call().
      2. Avoid introducing a new field but use our cached time.
      
      This required some minor refactoring to the function updating the time,
      and the introduction of a new cached time in microseconds in order to
      use less gettimeofday() calls.
      824f5f0b
    • zhaozhao.zz's avatar
      expires: refactoring judgment about whether a key is expired · e542132b
      zhaozhao.zz authored
      Calling lookupKey*() many times to search a key in one command
      may get different result.
      
      That's because lookupKey*() calls expireIfNeeded(), and delete
      the key when reach the expire time. So we can get an robj before
      the expire time, but a NULL after the expire time.
      
      The worst is that may lead to Redis crash, for example
      `RPOPLPUSH foo foo` the first time we get a list form `foo` and
      hold the pointer, but when we get `foo` again it's expired and
      deleted. Now we hold a freed memory, when execute rpoplpushHandlePush()
      redis crash.
      
      To fix it, we can refactor the judgment about whether a key is expired,
      using the same basetime `server.cmd_start_mstime` instead of calling
      mstime() everytime.
      e542132b
  18. 04 Nov, 2019 1 commit
  19. 29 Oct, 2019 1 commit
  20. 23 Oct, 2019 1 commit
  21. 27 Sep, 2019 1 commit
  22. 30 Jul, 2019 1 commit
  23. 22 Jul, 2019 2 commits
    • antirez's avatar
      Move signalFlushedDb() into a better place. · 436d02dd
      antirez authored
      Now that the call also invalidates client side caching slots, it is
      important that after an internal flush operation we both send the
      notifications to the clients and, at the same time, are able to reclaim
      the memory of the tracking table. This may even fix a few edge cases
      related to MULTI/EXEC + WATCH during resync, not sure, but in general
      looks more correct.
      436d02dd
    • antirez's avatar
      Client side caching: call the invalidation functions always. · 842b44dc
      antirez authored
      Otherwise what happens is that the tracking table will never get garbage
      collected if there are no longer clients with tracking enabled.
      Now the invalidation function immediately checks if there is any table
      allocated, otherwise it returns ASAP, so the overhead when the feature
      is not used should be near zero.
      842b44dc
  24. 17 Jul, 2019 2 commits
    • Oran Agra's avatar
      Module API for Forking · 56258c6b
      Oran Agra authored
      * create module API for forking child processes.
      * refactor duplicate code around creating and tracking forks by AOF and RDB.
      * child processes listen to SIGUSR1 and dies exitFromChild in order to
        eliminate a valgrind warning of unhandled signal.
      * note that BGSAVE error reply has changed.
      
      valgrind error is:
        Process terminating with default action of signal 10 (SIGUSR1)
      56258c6b
    • zhaozhao.zz's avatar