1. 13 Feb, 2014 3 commits
    • antirez's avatar
      Log when CONFIG REWRITE goes bad. · 116617c5
      antirez authored
      116617c5
    • antirez's avatar
      Test: regression for issue #1549. · 767846dc
      antirez authored
      It was verified that reverting the commit that fixes the bug, the test
      no longer passes.
      767846dc
    • antirez's avatar
      Fix script cache bug in the scripting engine. · 14143fbe
      antirez authored
      This commit fixes a serious Lua scripting replication issue, described
      by Github issue #1549. The root cause of the problem is that scripts
      were put inside the script cache, assuming that slaves and AOF already
      contained it, even if the scripts sometimes produced no changes in the
      data set, and were not actaully propagated to AOF/slaves.
      
      Example:
      
          eval "if tonumber(KEYS[1]) > 0 then redis.call('incr', 'x') end" 1 0
      
      Then:
      
          evalsha <sha1 step 1 script> 1 0
      
      At this step sha1 of the script is added to the replication script cache
      (the script is marked as known to the slaves) and EVALSHA command is
      transformed to EVAL. However it is not dirty (there is no changes to db),
      so it is not propagated to the slaves. Then the script is called again:
      
          evalsha <sha1 step 1 script> 1 1
      
      At this step master checks that the script already exists in the
      replication script cache and doesn't transform it to EVAL command. It is
      dirty and propagated to the slaves, but they fail to evaluate the script
      as they don't have it in the script cache.
      
      The fix is trivial and just uses the new API to force the propagation of
      the executed command regardless of the dirty state of the data set.
      
      Thank you to @minus-infinity on Github for finding the issue,
      understanding the root cause, and fixing it.
      14143fbe
  2. 12 Feb, 2014 2 commits
    • antirez's avatar
      AOF write error: retry with a frequency of 1 hz. · 0296aab6
      antirez authored
      0296aab6
    • antirez's avatar
      AOF: don't abort on write errors unless fsync is 'always'. · dd73a7bf
      antirez authored
      A system similar to the RDB write error handling is used, in which when
      we can't write to the AOF file, writes are no longer accepted until we
      are able to write again.
      
      For fsync == always we still abort on errors since there is currently no
      easy way to avoid replying with success to the user otherwise, and this
      would violate the contract with the user of only acknowledging data
      already secured on disk.
      dd73a7bf
  3. 11 Feb, 2014 7 commits
  4. 10 Feb, 2014 22 commits
  5. 07 Feb, 2014 3 commits
  6. 05 Feb, 2014 3 commits
    • antirez's avatar
      Check for EAGAIN in sendBulkToSlave(). · 970de3e9
      antirez authored
      Sometime an osx master with a Linux server over a slow link caused
      a strange error where osx called the writable function for
      the socket but actually apparently there was no room in the socket
      buffer to accept the write: write(2) call returned an EAGAIN error,
      that was not checked, so we considered write(2) == 0 always as a connection
      reset, which was unfortunate since the bulk transfer has to start again.
      
      Also more errors are logged with the WARNING level in the same code path
      now.
      970de3e9
    • antirez's avatar
      Cluster: fixed MF condition in clusterHandleSlaveFailover(). · 04fe000b
      antirez authored
      For manual failover we need a manual failover in progress, and that
      mf_can_start is true (master offset received and matched).
      04fe000b
    • antirez's avatar
      c6f02fd6