1. 04 9月, 2013 1 次提交
  2. 03 9月, 2013 3 次提交
  3. 26 8月, 2013 1 次提交
    • A
      Don't update node pong time via gossip. · 303dde37
      antirez 提交于
      This feature was implemented in the initial days of the Redis Cluster
      implementaiton but is not a good idea at all.
      
      1) It depends on clocks to be synchronized, that is already very bad.
      2) Moreover it adds a bug where the pong time is updated via gossip so
      no new PING is ever sent by the current node, with the effect of no PONG
      received, no update of tables, no clearing of PFAIL flag.
      
      In general to trust other nodes about the reachability of other nodes is
      a broken distributed programming model.
      303dde37
  4. 22 8月, 2013 4 次提交
  5. 21 8月, 2013 1 次提交
  6. 24 7月, 2013 1 次提交
    • A
      sdsrange() does not need to return a value. · 6ea8e094
      antirez 提交于
      Actaully the string is modified in-place and a reallocation is never
      needed, so there is no need to return the new sds string pointer as
      return value of the function, that is now just "void".
      6ea8e094
  7. 22 7月, 2013 1 次提交
    • A
      Introduction of a new string encoding: EMBSTR · 894eba07
      antirez 提交于
      Previously two string encodings were used for string objects:
      
      1) REDIS_ENCODING_RAW: a string object with obj->ptr pointing to an sds
      stirng.
      
      2) REDIS_ENCODING_INT: a string object where the obj->ptr void pointer
      is casted to a long.
      
      This commit introduces a experimental new encoding called
      REDIS_ENCODING_EMBSTR that implements an object represented by an sds
      string that is not modifiable but allocated in the same memory chunk as
      the robj structure itself.
      
      The chunk looks like the following:
      
      +--------------+-----------+------------+--------+----+
      | robj data... | robj->ptr | sds header | string | \0 |
      +--------------+-----+-----+------------+--------+----+
                           |                       ^
                           +-----------------------+
      
      The robj->ptr points to the contiguous sds string data, so the object
      can be manipulated with the same functions used to manipulate plan
      string objects, however we need just on malloc and one free in order to
      allocate or release this kind of objects. Moreover it has better cache
      locality.
      
      This new allocation strategy should benefit both the memory usage and
      the performances. A performance gain between 60 and 70% was observed
      during micro-benchmarks, however there is more work to do to evaluate
      the performance impact and the memory usage behavior.
      894eba07
  8. 09 7月, 2013 1 次提交
  9. 08 7月, 2013 10 次提交
    • G
      Mark places that might want changing for IPv6. · ca78446c
      Geoff Garside 提交于
      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
    • G
      Mark ip string buffers which could be reduced. · f7d9a92d
      Geoff Garside 提交于
      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
    • G
      Update clusterCommand to handle AF_INET6 addresses · e6bf4c26
      Geoff Garside 提交于
      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
    • G
      Update node2IpString to handle AF_INET6 addresses. · 5be83eec
      Geoff Garside 提交于
      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
    • G
      Add missing includes for getpeername. · b39e827d
      Geoff Garside 提交于
      getpeername(2) requires <sys/socket.h> which on some systems also
      requires <sys/types.h>. Include both to avoid compilation warnings.
      b39e827d
    • G
      Add macro to define clusterNode.ip buffer size. · 9cfa02fe
      Geoff Garside 提交于
      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
    • G
      Fix cluster.c inet_ntop use of sizeof(n->ip). · 6e894f02
      Geoff Garside 提交于
      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
    • G
      Use inet_pton(3) in clusterCommand. · 693b6405
      Geoff Garside 提交于
      Replace inet_aton(3) call with the more future proof inet_pton(3)
      function which is capable of handling additional address families.
      693b6405
    • G
      Use inet_ntop(3) in nodeIp2String & clusterCommand · a6ea707c
      Geoff Garside 提交于
      Replace inet_ntoa(3) calls with the more future proof inet_ntop(3)
      function which is capable of handling additional address families.
      a6ea707c
    • G
      Update anetTcpAccept & anetPeerToString calls. · f5494a42
      Geoff Garside 提交于
      Add the additional ip buffer length argument to function calls of
      anetTcpAccept and anetPeerToString in network.c and cluster.c
      f5494a42
  10. 05 7月, 2013 3 次提交
  11. 13 6月, 2013 1 次提交
  12. 12 6月, 2013 1 次提交
  13. 03 5月, 2013 5 次提交
  14. 19 4月, 2013 1 次提交
  15. 09 4月, 2013 4 次提交
    • A
      Cluster: reconfigure additonal slaves on failover. · b84570de
      antirez 提交于
      b84570de
    • A
      Cluster: use server.cluster_node_timeout directly. · 68cf249f
      antirez 提交于
      We used to copy this value into the server.cluster structure, however this
      was not necessary.
      
      The reason why we don't directly use server.cluster->node_timeout is
      that things that can be configured via redis.conf need to be directly
      available in the server structure as server.cluster is allocated later
      only if needed in order to reduce the memory footprint of non-cluster
      instances.
      68cf249f
    • A
      Cluster: configdigest field no longer used. Removed. · ef4f25ff
      antirez 提交于
      ef4f25ff
    • A
      Cluster: properly send ping to nodes not pinged foro too much time. · f09b2508
      antirez 提交于
      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
  16. 04 4月, 2013 2 次提交