1. 23 12月, 2013 1 次提交
  2. 22 12月, 2013 2 次提交
    • A
      Make new masters inherit replication offsets. · 4456ee11
      antirez 提交于
      Currently replication offsets could be used into a limited way in order
      to understand, out of a set of slaves, what is the one with the most
      updated data. For example this comparison is possible of N slaves
      were replicating all with the same master.
      
      However the replication offset was not transferred from master to slaves
      (that are later promoted as masters) in any way, so for instance if
      there were three instances A, B, C, with A master and B and C
      replication from A, the following could happen:
      
      C disconnects from A.
      B is turned into master.
      A is switched to master of B.
      B receives some write.
      
      In this context there was no way to compare the offset of A and C,
      because B would use its own local master replication offset as
      replication offset to initialize the replication with A.
      
      With this commit what happens is that when B is turned into master it
      inherits the replication offset from A, making A and C comparable.
      In the above case assuming no inconsistencies are created during the
      disconnection and failover process, A will show to have a replication
      offset greater than C.
      
      Note that this does not mean offsets are always comparable to understand
      what is, in a set of instances, since in more complex examples the
      replica with the higher replication offset could be partitioned away
      when picking the instance to elect as new master. However this in
      general improves the ability of a system to try to pick a good replica
      to promote to master.
      4456ee11
    • A
      Slave disconnection is an event worth logging. · 5fa937d9
      antirez 提交于
      5fa937d9
  3. 21 12月, 2013 1 次提交
  4. 19 12月, 2013 6 次提交
  5. 13 12月, 2013 4 次提交
  6. 12 12月, 2013 3 次提交
  7. 11 12月, 2013 8 次提交
  8. 10 12月, 2013 2 次提交
    • A
      Slaves heartbeat while loading RDB files. · 75bf5a4a
      antirez 提交于
      Starting with Redis 2.8 masters are able to detect timed out slaves,
      while before 2.8 only slaves were able to detect a timed out master.
      
      Now that timeout detection is bi-directional the following problem
      happens as described "in the field" by issue #1449:
      
      1) Master and slave setup with big dataset.
      2) Slave performs the first synchronization, or a full sync
         after a failed partial resync.
      3) Master sends the RDB payload to the slave.
      4) Slave loads this payload.
      5) Master detects the slave as timed out since does not receive back the
         REPLCONF ACK acknowledges.
      
      Here the problem is that the master has no way to know how much the
      slave will take to load the RDB file in memory. The obvious solution is
      to use a greater replication timeout setting, but this is a shame since
      for the 0.1% of operation time we are forced to use a timeout that is
      not what is suited for 99.9% of operation time.
      
      This commit tries to fix this problem with a solution that is a bit of
      an hack, but that modifies little of the replication internals, in order
      to be back ported to 2.8 safely.
      
      During the RDB loading time, we send the master newlines to avoid
      being sensed as timed out. This is the same that the master already does
      while saving the RDB file to still signal its presence to the slave.
      
      The single newline is used because:
      
      1) It can't desync the protocol, as it is only transmitted all or
      nothing.
      2) It can be safely sent while we don't have a client structure for the
      master or in similar situations just with write(2).
      75bf5a4a
    • A
      Handle inline requested terminated with just \n. · 8d0083ba
      antirez 提交于
      8d0083ba
  9. 06 12月, 2013 5 次提交
    • A
      Sentinel: fix reported role info sampling. · fba0b23e
      antirez 提交于
      The way the role change was recoded was not sane and too much
      convoluted, causing the role information to be not always updated.
      
      This commit fixes issue #1445.
      fba0b23e
    • A
      Sentinel: fix reported role fields when master is reset. · dceaca1f
      antirez 提交于
      When there is a master address switch, the reported role must be set to
      master so that we have a chance to re-sample the INFO output to check if
      the new address is reporting the right role.
      
      Otherwise if the role was wrong, it will be sensed as wrong even after
      the address switch, and for enough time according to the role change
      time, for Sentinel consider the master SDOWN.
      
      This fixes isue #1446, that describes the effects of this bug in
      practice.
      dceaca1f
    • A
      Fixed typo in redis.conf. · bf307cfb
      antirez 提交于
      bf307cfb
    • A
      Grammar fix. · 4f9d30b3
      Anurag Ramdasan 提交于
      4f9d30b3
    • A
      fixed typo · b67f39da
      Anurag Ramdasan 提交于
      b67f39da
  10. 05 12月, 2013 3 次提交
  11. 03 12月, 2013 2 次提交
  12. 02 12月, 2013 3 次提交
    • A
      Redis 2.8.2. · 4d650a3b
      antirez 提交于
      4d650a3b
    • A
      Sentinel: don't write HZ when flushing config. · dd0ac4ac
      antirez 提交于
      See issue #1419.
      dd0ac4ac
    • A
      Sentinel: better time desynchronization. · 75347ada
      antirez 提交于
      Sentinels are now desynchronized in a better way changing the time
      handler frequency between 10 and 20 HZ. This way on average a
      desynchronization of 25 milliesconds is produced that should be larger
      enough compared to network latency, avoiding most split-brain condition
      during the vote.
      
      Now that the clocks are desynchronized, to have larger random delays when
      performing operations can be easily achieved in the following way.
      Take as example the function that starts the failover, that is
      called with a frequency between 10 and 20 HZ and will start the
      failover every time there are the conditions. By just adding as an
      additional condition something like rand()%4 == 0, we can amplify the
      desynchronization between Sentinel instances easily.
      
      See issue #1419.
      75347ada