mirror of
https://codeberg.org/redict/redict.git
synced 2025-01-22 16:18:28 -05:00
Cluster: new state information, cluster size.
The definition of cluster size is: the number of known nodes in the cluster that are masters and serving at least an hash slot.
This commit is contained in:
parent
5c55ed9388
commit
d218a4e244
@ -217,6 +217,7 @@ void clusterInit(void) {
|
||||
server.cluster = zmalloc(sizeof(clusterState));
|
||||
server.cluster->myself = NULL;
|
||||
server.cluster->state = REDIS_CLUSTER_FAIL;
|
||||
server.cluster->size = 1;
|
||||
server.cluster->nodes = dictCreate(&clusterNodesDictType,NULL);
|
||||
server.cluster->node_timeout = 15;
|
||||
memset(server.cluster->migrating_slots_to,0,
|
||||
@ -1254,6 +1255,24 @@ void clusterUpdateState(void) {
|
||||
} else {
|
||||
server.cluster->state = REDIS_CLUSTER_FAIL;
|
||||
}
|
||||
|
||||
/* Compute the cluster size, that is the number of master nodes
|
||||
* serving at least a single slot. */
|
||||
{
|
||||
dictIterator *di;
|
||||
dictEntry *de;
|
||||
|
||||
server.cluster->size = 0;
|
||||
di = dictGetIterator(server.cluster->nodes);
|
||||
while((de = dictNext(di)) != NULL) {
|
||||
clusterNode *node = dictGetVal(de);
|
||||
|
||||
if (node->flags & REDIS_NODE_MASTER &&
|
||||
popcount(node->slots,sizeof(node->slots)))
|
||||
server.cluster->size++;
|
||||
}
|
||||
dictReleaseIterator(di);
|
||||
}
|
||||
}
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
|
@ -570,6 +570,7 @@ typedef struct clusterNode clusterNode;
|
||||
typedef struct {
|
||||
clusterNode *myself; /* This node */
|
||||
int state; /* REDIS_CLUSTER_OK, REDIS_CLUSTER_FAIL, ... */
|
||||
int size; /* Num of master nodes with at least one slot */
|
||||
int node_timeout;
|
||||
dict *nodes; /* Hash table of name -> clusterNode structures */
|
||||
clusterNode *migrating_slots_to[REDIS_CLUSTER_SLOTS];
|
||||
@ -960,6 +961,7 @@ long long mstime(void);
|
||||
void getRandomHexChars(char *p, unsigned int len);
|
||||
uint64_t crc64(uint64_t crc, const unsigned char *s, uint64_t l);
|
||||
void exitFromChild(int retcode);
|
||||
long popcount(void *s, long count);
|
||||
|
||||
/* networking.c -- Networking and Client related operations */
|
||||
redisClient *createClient(int fd);
|
||||
|
Loading…
Reference in New Issue
Block a user