1. 08 Jul, 2013 10 commits
    • Geoff Garside's avatar
      Mark places that might want changing for IPv6. · ca78446c
      Geoff Garside authored
      Any places which I feel might want to be updated to work differently
      with IPv6 have been marked with a comment starting "IPV6:".
      
      Currently the only comments address places where an IP address is
      combined with a port using the standard : separated form. These may want
      to be changed when printing IPv6 addresses to wrap the address in []
      such as
      
      	[2001:db8::c0:ffee]:6379
      
      instead of
      
      	2001:db8::c0:ffee:6379
      
      as the latter format is a technically valid IPv6 address and it is hard
      to distinguish the IPv6 address component from the port unless you know
      the port is supposed to be there.
      ca78446c
    • Geoff Garside's avatar
      Mark ip string buffers which could be reduced. · f7d9a92d
      Geoff Garside authored
      In two places buffers have been created with a size of 128 bytes which
      could be reduced to INET6_ADDRSTRLEN to still hold a full IP address.
      These places have been marked as they are presently big enough to handle
      the needs of storing a printable IPv6 address.
      f7d9a92d
    • Geoff Garside's avatar
      Update clusterCommand to handle AF_INET6 addresses · e6bf4c26
      Geoff Garside authored
      Changes the sockaddr_in to a sockaddr_storage. Attempts to convert the
      IP address into an AF_INET or AF_INET6 before returning an "Invalid IP
      address" error. Handles converting the sockaddr from either AF_INET or
      AF_INET6 back into a string for storage in the clusterNode ip field.
      e6bf4c26
    • Geoff Garside's avatar
      Update node2IpString to handle AF_INET6 addresses. · 5be83eec
      Geoff Garside authored
      Change the sockaddr_in to sockaddr_storage which is capable of storing
      both AF_INET and AF_INET6 sockets. Uses the sockaddr_storage ss_family
      to correctly return the printable IP address and port.
      
      Function makes the assumption that the buffer is of at least
      REDIS_CLUSTER_IPLEN bytes in size.
      5be83eec
    • Geoff Garside's avatar
      Add missing includes for getpeername. · b39e827d
      Geoff Garside authored
      getpeername(2) requires <sys/socket.h> which on some systems also
      requires <sys/types.h>. Include both to avoid compilation warnings.
      b39e827d
    • Geoff Garside's avatar
      Add macro to define clusterNode.ip buffer size. · 9cfa02fe
      Geoff Garside authored
      Add REDIS_CLUSTER_IPLEN macro to define the size of the clusterNode ip
      character array. Additionally use this macro in inet_ntop(3) calls where
      the size of the array was being defined manually.
      
      The REDIS_CLUSTER_IPLEN is defined as INET_ADDRSTRLEN which defines the
      correct size of a buffer to store an IPv4 address in. The
      INET_ADDRSTRLEN macro itself is defined in the <netinet/in.h> header
      file and should be portable across the majority of systems.
      9cfa02fe
    • Geoff Garside's avatar
      Fix cluster.c inet_ntop use of sizeof(n->ip). · 6e894f02
      Geoff Garside authored
      Using sizeof with an array will only return expected results if the
      array is created in the scope of the function where sizeof is used. This
      commit changes the inet_ntop calls so that they use the fixed buffer
      value as defined in redis.h which is 16.
      6e894f02
    • Geoff Garside's avatar
      Use inet_pton(3) in clusterCommand. · 693b6405
      Geoff Garside authored
      Replace inet_aton(3) call with the more future proof inet_pton(3)
      function which is capable of handling additional address families.
      693b6405
    • Geoff Garside's avatar
      Use inet_ntop(3) in nodeIp2String & clusterCommand · a6ea707c
      Geoff Garside authored
      Replace inet_ntoa(3) calls with the more future proof inet_ntop(3)
      function which is capable of handling additional address families.
      a6ea707c
    • Geoff Garside's avatar
      Update anetTcpAccept & anetPeerToString calls. · f5494a42
      Geoff Garside authored
      Add the additional ip buffer length argument to function calls of
      anetTcpAccept and anetPeerToString in network.c and cluster.c
      f5494a42
  2. 05 Jul, 2013 2 commits
  3. 04 Jul, 2013 1 commit
  4. 12 Jun, 2013 1 commit
  5. 11 Jun, 2013 1 commit
  6. 03 May, 2013 5 commits
  7. 19 Apr, 2013 1 commit
  8. 09 Apr, 2013 3 commits
  9. 08 Apr, 2013 1 commit
    • antirez's avatar
      Cluster: properly send ping to nodes not pinged foro too much time. · f09b2508
      antirez authored
      In commit d728ec6d it was introduced the concept of sending a ping to
      every node not receiving a ping since node_timeout/2 seconds.
      However the code was located in a place that was not executed because of
      a previous conditional causing the loop to re-iterate.
      
      This caused false positives in nodes availability detection.
      
      The current code is still not perfect as a node may be detected to be in
      PFAIL state even if it does not reply for just node_timeout/2 seconds
      that is not correct. There is a plan to improve this code ASAP.
      f09b2508
  10. 04 Apr, 2013 2 commits
  11. 25 Mar, 2013 2 commits
  12. 21 Mar, 2013 1 commit
  13. 20 Mar, 2013 4 commits
    • antirez's avatar
      Cluster: clear the PROMOTED slave directly into clusterSetMaster(). · 8c1bc8e8
      antirez authored
      This way we make sure every time a master is turned into a replica
      the flag will be cleared.
      8c1bc8e8
    • antirez's avatar
      Cluster: master node must clear its hash slots when turning into a slave. · e006407f
      antirez authored
      When a master turns into a slave after a failover event, make sure to
      clear the assigned slots before setting up the replication, as a slave
      should never claim slots in an explicit way, but just take over the
      master slots when replacing its master.
      e006407f
    • antirez's avatar
      Cluster: new flag PROMOTED introduced. · 506f9a42
      antirez authored
      A slave node set this flag for itself when, after receiving authorization
      from the majority of nodes, it turns itself into a master.
      
      At the same time now this flag is tested by nodes receiving a PING
      message before reconfiguring after a failover event. This makes the
      system more robust: even if currently there is no way to manually turn
      a slave into a master it is possible that we'll have such a feature in
      the future, or that simply because of misconfiguration a node joins the
      cluster as master while others believe it's a slave. This alone is now
      no longer enough to trigger reconfiguration as other nodes will check
      for the PROMOTED flag.
      
      The PROMOTED flag is cleared every time the node is turned back into a
      replica of some other node.
      506f9a42
    • antirez's avatar
      Cluster: add sender flags in cluster bus messages header. · 026b9483
      antirez authored
      Sender flags were not propagated for the sender, but only for nodes in
      the gossip section. This is odd and in the next commits we'll need to
      get updated flags for the sender node, so this commit adds a new field
      in the cluster messages header.
      
      The message header is the same size as we reused some free space that
      was marked as 'unused' because of alignment concerns.
      026b9483
  14. 19 Mar, 2013 3 commits
    • antirez's avatar
      Cluster: turn old master into a replica of node that failed over. · d15b027d
      antirez authored
      So when the failing master node is back in touch with the cluster,
      instead of remaining unused it is converted into a replica of the
      new master, ready to perform the fail over if the new master node
      will fail at some point.
      
      Note that as a side effect clients with stale configuration are now
      not an issue as well, as the node converted into a slave will not
      accept queries but will redirect clients accordingly.
      d15b027d
    • antirez's avatar
      Cluster: node replication role change handle improved. · 4d626230
      antirez authored
      The code handling a master that turns into a slave or the contrary was
      improved in order to avoid repeating the same operations. Also
      the readability and conceptual simplicity was improved.
      4d626230
    • antirez's avatar
      Cluster: new command CLUSTER FLUSHSLOTS. · 88221f88
      antirez authored
      It's just a simpler way to CLUSTER DELSLOTS with all the slots as
      arguments, in order to obtain a node without assigned slots for
      reconfiguration.
      88221f88
  15. 15 Mar, 2013 3 commits