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:
antirez
2013-02-22 19:18:30 +01:00
parent 5c55ed9388
commit d218a4e244
2 changed files with 21 additions and 0 deletions

View File

@ -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);
}
}
/* -----------------------------------------------------------------------------