1. 23 5月, 2012 2 次提交
  2. 22 5月, 2012 1 次提交
    • A
      Redis test: include bug report on crash. · 2bcd18a2
      antirez 提交于
      Due to a change in the format of the bug report in case of crash of
      failed assertion the test suite was no longer able to properly log it.
      Instead just a protocol error was logged by the Redis TCL client that
      provided no clue about the actual problem.
      
      This commit resolves the issue by logging everything from the first line
      of the log including the string REDIS BUG REPORT, till the end of the
      file.
      2bcd18a2
  3. 21 5月, 2012 2 次提交
    • A
      Use comments to split aof.c into sections. · 5a559993
      antirez 提交于
      This makes the code more readable, it is still not the case to split the
      file itself into three different files, but the logical separation
      improves the readability especially since new commits are going to
      introduce an additional section.
      5a559993
    • A
      TODO file removed. · d44a36e0
      antirez 提交于
      The list of things to do is since long time in two places:
      
      1) Github issues.
      2) I've a private TOOD list of random ideas, what makes sense is later
      moved to github issues. So github is anyway the true source of things to
      do.
      d44a36e0
  4. 16 5月, 2012 2 次提交
  5. 15 5月, 2012 4 次提交
  6. 14 5月, 2012 3 次提交
    • A
      Added time.h include in redis-cli. · e9f0419c
      antirez 提交于
      redis-cli.c uses the time() function to seed the PRNG, but time.h was
      not included. This was not noticed since sys/time.h is included and was
      enough in most systems (but not correct). With Ubuntu 12.04 GCC
      generates a warning that made us aware of the issue.
      e9f0419c
    • A
      activeExpireCycle(): better precision in max time used. · b3624f5a
      antirez 提交于
      activeExpireCycle() can consume no more than a few milliseconds per
      iteration. This commit improves the precision of the check for the time
      elapsed in two ways:
      
      1) We check every 16 iterations instead of the main loop instead of 256.
      2) We reset iterations at the start of the function and not every time
         we switch to the next database, so the check is correctly performed
         every 16 iterations.
      b3624f5a
    • A
      Impovements for: Redis timer, hashes rehashing, keys collection. · 61daf891
      antirez 提交于
      A previous commit introduced REDIS_HZ define that changes the frequency
      of calls to the serverCron() Redis function. This commit improves
      different related things:
      
      1) Software watchdog: now the minimal period can be set according to
      REDIS_HZ. The minimal period is two times the timer period, that is:
      
          (1000/REDIS_HZ)*2 milliseconds
      
      2) The incremental rehashing is now performed in the expires dictionary
      as well.
      
      3) The activeExpireCycle() function was improved in different ways:
      
      - Now it checks if it already used too much time using microseconds
        instead of milliseconds for better precision.
      - The time limit is now calculated correctly, in the previous version
        the division was performed before of the multiplication resulting in
        a timelimit of 0 if HZ was big enough.
      - Databases with less than 1% of buckets fill in the hash table are
        skipped, because getting random keys is too expensive in this
        condition.
      
      4) tryResizeHashTables() is now called at every timer call, we need to
         match the number of calls we do to the expired keys colleciton cycle.
      
      5) REDIS_HZ was raised to 100.
      61daf891
  7. 13 5月, 2012 1 次提交
    • A
      Redis timer interrupt frequency configurable as REDIS_HZ. · 94343492
      antirez 提交于
      Redis uses a function called serverCron() that is very similar to the
      timer interrupt of an operating system. This function is used to handle
      a number of asynchronous things, like active expired keys collection,
      clients timeouts, update of statistics, things related to the cluster
      and replication, triggering of BGSAVE and AOF rewrite process, and so
      forth.
      
      In the past the timer was called 1 time per second. At some point it was
      raised to 10 times per second, but it still was fixed and could not be
      changed even at compile time, because different functions called from
      serverCron() assumed a given fixed frequency.
      
      This commmit makes the frequency configurable, so that it is simpler to
      pick a good tradeoff between overhead of this function (that is usually
      very small) and the responsiveness of Redis during a few critical
      circumstances where a lot of work is done inside the timer.
      
      An example of such a critical condition is mass-expire of a lot of keys
      in the same second. Up to a given percentage of CPU time is used to
      perform expired keys collection per expire cylce. Now changing the
      REDIS_HZ macro it is possible to do less work but more times per second
      in order to block the server for less time.
      
      If this patch will work well in our tests it will enter Redis 2.6-final.
      94343492
  8. 12 5月, 2012 2 次提交
    • A
      f333788f
    • A
      More incremental active expired keys collection process. · 1dcc95d0
      antirez 提交于
      If a large amonut of keys are all expiring about at the same time, the
      "active" expired keys collection cycle used to block as far as the
      percentage of already expired keys was >= 25% of the total population of
      keys with an expire set.
      
      This could block the server even for many seconds in order to reclaim
      memory ASAP. The new algorithm uses at max a small amount of
      milliseconds per cycle, even if this means reclaiming the memory less
      promptly it also means a more responsive server.
      1dcc95d0
  9. 11 5月, 2012 3 次提交
  10. 10 5月, 2012 1 次提交
  11. 09 5月, 2012 1 次提交
  12. 07 5月, 2012 1 次提交
  13. 06 5月, 2012 1 次提交
    • P
      Compare integers in ziplist regardless of encoding · bf219416
      Pieter Noordhuis 提交于
      Because of the introduction of new integer encoding types for ziplists
      in the 2.6 tree, the same integer value may have a different encoding in
      different versions of the ziplist implementation. This means that the
      encoding can NOT be used as a fast path in comparing integers.
      bf219416
  14. 04 5月, 2012 2 次提交
  15. 03 5月, 2012 3 次提交
  16. 02 5月, 2012 1 次提交
  17. 01 5月, 2012 2 次提交
    • P
      Use safe dictionary iterator from KEYS · cc4f65fe
      Pieter Noordhuis 提交于
      Every matched key in a KEYS call is checked for expiration. When the key
      is set to expire, the call to `getExpire` will assert that the key also
      exists in the main dictionary. This in turn causes a rehashing step to
      be executed. Rehashing a dictionary when there is an iterator active may
      result in the iterator emitting duplicate entries, or not emitting some
      entries at all. By using a safe iterator, the rehash step is omitted.
      cc4f65fe
    • H
      2ac546e0
  18. 30 4月, 2012 1 次提交
  19. 29 4月, 2012 1 次提交
  20. 27 4月, 2012 3 次提交
    • A
      ffe003dc
    • A
      redis-cli commands description in help.h updated. · 841048f2
      antirez 提交于
      841048f2
    • A
      Set LUA_MASKCOUNT hook more selectively. Fixes issue #480. · 0ad10db2
      antirez 提交于
      An user reported a crash with Redis scripting (see issue #480 on
      github), inspection of the kindly provided strack trace showed that
      server.lua_caller was probably set to NULL. The stack trace also slowed
      that the call to the hook was originating from a point where we just
      used to set/get a few global variables in the Lua state.
      
      What was happening is that we did not set the timeout hook selectively
      only when the user script was called. Now we set it more selectively,
      specifically only in the context of the lua_pcall() call, and make sure
      to remove the hook when the call returns. Otherwise the hook can get
      called in random contexts every time we do something with the Lua
      state.
      0ad10db2
  21. 26 4月, 2012 3 次提交