1. 04 Feb, 2014 1 commit
  2. 03 Feb, 2014 4 commits
    • antirez's avatar
      Move mstime_t define outside sentinel.c. · ddcf1603
      antirez authored
      The define is now used in other parts of Redis 2.8 tree instead of long
      long.
      
      A nice side effect is that now 2.8 and unstable sentinel.c files are
      identical as it should be.
      ddcf1603
    • antirez's avatar
      Scripting: expire keys in scripts only at first access. · c5bc5926
      antirez authored
      Keys expiring in the middle of the execution of Lua scripts are to
      create inconsistencies in masters and / or AOF files. See the following
      example:
      
          if redis.call("exists",KEYS[1]) == 1
          then
              redis.call("incr","mycounter")
          end
      
          if redis.call("exists",KEYS[1]) == 1
          then
              return redis.call("incr","mycounter")
          end
      
      The script executes two times the same *if key exists then incrementcounter*
      logic. However the two executions will work differently in the master and
      the slaves, provided some unlucky timing happens.
      
      In the master the first time the key may still exist, while the second time
      the key may no longer exist. This will result in the key incremented just one
      time. However as a side effect the master will generate a synthetic
      `DEL` command in the replication channel in order to force the slaves to
      expire the key (given that key expiration is master-driven).
      
      When the same script will run in the slave, the key will no longer be
      there, so the script will not increment the key.
      
      The key idea used to implement the expire-at-first-lookup semantics was
      provided by Marc Gravell.
      c5bc5926
    • antirez's avatar
      5201ca0c
    • antirez's avatar
      Scripting: use mstime() and mstime_t for lua_time_start. · 3da5cbe5
      antirez authored
      server.lua_time_start is expressed in milliseconds. Use mstime_t instead
      of long long, and populate it with mstime() instead of ustime()/1000.
      
      Functionally identical but more natural.
      3da5cbe5
  3. 31 Jan, 2014 3 commits
  4. 28 Jan, 2014 2 commits
  5. 25 Jan, 2014 1 commit
  6. 22 Jan, 2014 3 commits
  7. 14 Jan, 2014 2 commits
  8. 13 Jan, 2014 13 commits
  9. 09 Jan, 2014 1 commit
  10. 08 Jan, 2014 3 commits
  11. 25 Dec, 2013 5 commits
  12. 23 Dec, 2013 2 commits
    • antirez's avatar
      Fix CONFIG REWRITE handling of unknown options. · 4ad219ad
      antirez authored
      There were two problems with the implementation.
      
      1) "save" was not correctly processed when no save point was configured,
         as reported in issue #1416.
      2) The way the code checked if an option existed in the "processed"
         dictionary was wrong, as we add the element with as a key associated
         with a NULL value, so dictFetchValue() can't be used to check for
         existance, but dictFind() must be used, that returns NULL only if the
         entry does not exist at all.
      4ad219ad
    • antirez's avatar
      Configuring port to 0 disables IP socket as specified. · c6db326d
      antirez authored
      This was no longer the case with 2.8 becuase of a bug introduced with
      the IPv6 support. Now it is fixed.
      
      This fixes issue #1287 and #1477.
      c6db326d