1. 14 Dec, 2016 2 commits
    • antirez's avatar
      MIGRATE: Remove upfront ttl initialization. · 68aab8e8
      antirez authored
      After the fix for #3673 the ttl var is always initialized inside the
      loop itself, so the early initialization is not needed.
      
      Variables declaration also moved to a more local scope.
      68aab8e8
    • Jan-Erik Rediger's avatar
      Reset the ttl for additional keys · 788e8925
      Jan-Erik Rediger authored
      Before, if a previous key had a TTL set but the current one didn't, the
      TTL was reused and thus resulted in wrong expirations set.
      
      This behaviour was experienced, when `MigrateDefaultPipeline` in
      redis-trib was set to >1
      
      Fixes #3655
      788e8925
  2. 16 Nov, 2016 1 commit
  3. 16 Jun, 2016 1 commit
    • antirez's avatar
      RESTORE: accept RDB dumps with older versions. · f592b4d3
      antirez authored
      Reference issue #3218.
      
      Checking the code I can't find a reason why the original RESTORE
      code was so opinionated about restoring only the current version. The
      code in to `rdb.c` appears to be capable as always to restore data from
      older versions of Redis, and the only places where it is needed the
      current version in order to correctly restore data, is while loading the
      opcodes, not the values itself as it happens in the case of RESTORE.
      
      For the above reasons, this commit enables RESTORE to accept older
      versions of values payloads.
      f592b4d3
  4. 05 May, 2016 2 commits
  5. 02 May, 2016 1 commit
    • antirez's avatar
      New masters with slots are now targets of migration if others are. · 7b618823
      antirez authored
      This fixes issue #3043.
      
      Before this fix, after a complete resharding of a master slots
      to other nodes, the master remains empty and the slaves migrate away
      to other masters with non-zero nodes. However the old master now empty,
      is no longer considered a target for migration, because the system has
      no way to tell it had slaves in the past.
      
      This fix leaves the algorithm used in the past untouched, but adds a
      new rule. When a new or old master which is empty and without slaves,
      are assigend with their first slot, if other masters in the cluster have
      slaves, they are automatically considered to be targets for replicas
      migration.
      7b618823
  6. 29 Jan, 2016 1 commit
    • antirez's avatar
      Cluster: include node IDs in SLOTS output. · 0f3fb009
      antirez authored
      CLUSTER SLOTS now includes IDs in the nodes description associated with
      a given slot range. Certain client libraries implementations need a way
      to reference a node in an unique way, so they were relying on CLUSTER
      NODES, that is not a stable API and may change frequently depending on
      Redis Cluster future requirements.
      0f3fb009
  7. 26 Jan, 2016 3 commits
    • antirez's avatar
      c0acccc3
    • antirez's avatar
    • antirez's avatar
      Better address udpate strategy when processing gossip sections. · bd998b7d
      antirez authored
      The change covers the case where:
      
      1. There is a node we can't reach (in fail or pfail state).
      2. We see a different address for this node, in the gossip section sent
      to us by a node that, instead, is able to talk with the node we cannot
      talk to.
      
      In this case it's a good bet to switch to the address reported by this
      node, since there was an address switch and it is able to talk with the
      node and we are not.
      
      However previosuly this was done in a dangerous way, by initiating an
      handshake. The handshake, using the MEET packet, forces the receiver to
      join our cluster, and this is not a good idea. If the node in question
      really just switched address, but is the same node, it already knows about
      us, so we just need to perform an address update and a reconnection.
      
      So with this commit instead we just update the address of the node,
      release the node link if any, and attempt to reconnect in the next
      clusterCron() cycle.
      
      The commit also improves debugging messages printed by Cluster during
      address or ID switches.
      bd998b7d
  8. 25 Jan, 2016 7 commits
    • antirez's avatar
      Minor MIGRATE refactoring. · 33c4da4a
      antirez authored
      Centralize cleanup of newargv in a single place.
      Add more comments to help a bit following a complex function.
      
      Related to issue #3016.
      33c4da4a
    • antirez's avatar
      More variadic MIGRATE fixes. · 5a5e3231
      antirez authored
      Another leak was fixed in the case of syntax error by restructuring the
      allocation strategy for the two dynamic vectors.
      
      We also make sure to always close the cached socket on I/O errors so that
      all the I/O errors are handled the same, even if we had a previously
      queued error of a different kind from the destination server.
      
      Thanks to Kevin McGehee. Related to issue #3016.
      5a5e3231
    • antirez's avatar
      Various fixes to MIGRATE with multiple keys. · 77837a91
      antirez authored
      In issue #3016 Kevin McGehee identified multiple very serious issues in
      the new implementation of MIGRATE. This commit attempts to restructure
      the code in oder to avoid mistakes, an analysis of the new
      implementation is in progress in order to check for possible edge cases.
      77837a91
    • antirez's avatar
      Cluster: fix setting nodes slaveof pointer to NULL on node release. · c9889461
      antirez authored
      With this commit we preserve the list of nodes that have .slaveof set
      to the node, even when the node is turned into a slave, and make sure to
      fix the .slaveof pointers to NULL when a node is freed from memory,
      regardless of the fact it's a slave or a master.
      
      Basically we try to remember the logical master in the current
      configuration even if the logical master advertised it as a slave
      already. However we still remember the associations, so that when a node
      is freed we can fix them.
      
      This should fix issue #3002.
      c9889461
    • antirez's avatar
      CLUSTER BUMPEPOCH initial implementation fixed. · ace53e89
      antirez authored
      ace53e89
    • antirez's avatar
      Cluster: CLUSTER BUMPEPOCH introduced to help redis-trib fix. · 90a79bc1
      antirez authored
      Sometimes during "fixes" we have to setup a new configuration and assign
      slots to nodes. With BUMPEPOCH we can make sure the new configuration of
      the node will win if there are conflicting configurations (for example
      another node is *also* claiming the same slot because the cluster is
      totally messed up).
      90a79bc1
    • antirez's avatar
      6ce536db
  9. 19 Jan, 2016 1 commit
  10. 08 Jan, 2016 2 commits
  11. 06 Jan, 2016 1 commit
    • antirez's avatar
      Cluster: don't send -ASK to MIGRATE. · b18e42b2
      antirez authored
      For non existing keys, we don't want to send -ASK redirections to
      MIGRATE, since when moving slots from the migrating node to the
      importing node, we want just to ignore keys that are no longer there.
      They may be expired or deleted between the GETKEYSINSLOT call and the
      MIGRATE call. Otherwise this causes an error during migrations with
      redis-trib (or equivalent cluster management tools).
      b18e42b2
  12. 17 Dec, 2015 1 commit
  13. 13 Dec, 2015 3 commits
  14. 11 Dec, 2015 1 commit
    • antirez's avatar
      Cluster: replica migration with delay. · 6b8a6c2a
      antirez authored
      We wait a fixed amount of time (5 seconds currently) much greater than
      the usual Cluster node to node communication latency, before migrating.
      This way when a failover occurs, before detecting the new master as a
      target for migration, we give the time to its natural slaves (the slaves
      of the failed over master) to announce they switched to the new master,
      preventing an useless migration operation.
      6b8a6c2a
  15. 10 Dec, 2015 1 commit
  16. 09 Dec, 2015 1 commit
    • antirez's avatar
      Fix replicas migration by adding a new flag. · db65f6d3
      antirez authored
      Some time ago I broken replicas migration (reported in #2924).
      The idea was to prevent masters without replicas from getting replicas
      because of replica migration, I remember it to create issues with tests,
      but there is no clue in the commit message about why it was so
      undesirable.
      
      However my patch as a side effect totally ruined the concept of replicas
      migration since we want it to work also for instances that, technically,
      never had slaves in the past: promoted slaves.
      
      So now instead the ability to be targeted by replicas migration, is a
      new flag "migrate-to". It only applies to masters, and is set in the
      following two cases:
      
      1. When a master gets a slave, it is set.
      2. When a slave turns into a master because of fail over, it is set.
      
      This way replicas migration targets are only masters that used to have
      slaves, and slaves of masters (that used to have slaves... obviously)
      and are promoted.
      
      The new flag is only internal, and is never exposed in the output nor
      persisted in the nodes configuration, since all the information to
      handle it are implicit in the cluster configuration we already have.
      db65f6d3
  17. 27 Nov, 2015 1 commit
  18. 27 Jul, 2015 3 commits
  19. 26 Jul, 2015 6 commits
  20. 24 Jun, 2015 1 commit