- 21 8月, 2013 1 次提交
-
-
由 antirez 提交于
-
- 24 7月, 2013 1 次提交
-
-
由 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".
-
- 22 7月, 2013 1 次提交
-
-
由 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.
-
- 09 7月, 2013 1 次提交
-
-
由 antirez 提交于
-
- 08 7月, 2013 10 次提交
-
-
由 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.
-
由 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.
-
由 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.
-
由 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.
-
由 Geoff Garside 提交于
getpeername(2) requires <sys/socket.h> which on some systems also requires <sys/types.h>. Include both to avoid compilation warnings.
-
由 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.
-
由 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.
-
由 Geoff Garside 提交于
Replace inet_aton(3) call with the more future proof inet_pton(3) function which is capable of handling additional address families.
-
由 Geoff Garside 提交于
Replace inet_ntoa(3) calls with the more future proof inet_ntop(3) function which is capable of handling additional address families.
-
由 Geoff Garside 提交于
Add the additional ip buffer length argument to function calls of anetTcpAccept and anetPeerToString in network.c and cluster.c
-
- 05 7月, 2013 3 次提交
- 13 6月, 2013 1 次提交
-
-
由 antirez 提交于
-
- 12 6月, 2013 1 次提交
-
-
由 antirez 提交于
-
- 03 5月, 2013 5 次提交
-
-
由 antirez 提交于
When the PONG delay is half the cluster node timeout, the link gets disconnected (and later automatically reconnected) in order to ensure that it's not just a dead connection issue. However this operation is only performed if the link is old enough, in order to avoid to disconnect the same link again and again (and among the other problems, never receive the PONG because of that). Note: when the link is reconnected, the 'ping_sent' field is not updated even if a new ping is sent using the new connection, so we can still reliably detect a node ping timeout.
-
由 antirez 提交于
-
由 antirez 提交于
-
由 antirez 提交于
Also clusterBroadcastPing() was renamed into clusterBroadcastPong() that's what the function is actually doing.
-
由 antirez 提交于
-
- 19 4月, 2013 1 次提交
-
-
由 xiaost7 提交于
It was %40s instead of %.40s, and since the string is not null terminated it caused random garbage to be displayed, and possibly a crash.
-
- 09 4月, 2013 4 次提交
-
-
由 antirez 提交于
-
由 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.
-
由 antirez 提交于
-
由 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.
-
- 04 4月, 2013 2 次提交
- 25 3月, 2013 2 次提交
- 21 3月, 2013 1 次提交
-
-
由 antirez 提交于
-
- 20 3月, 2013 5 次提交
-
-
由 antirez 提交于
This way we make sure every time a master is turned into a replica the flag will be cleared.
-
由 antirez 提交于
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.
-
由 antirez 提交于
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.
-
由 antirez 提交于
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.
-
由 antirez 提交于
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.
-
- 19 3月, 2013 1 次提交
-
-
由 antirez 提交于
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.
-