summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorantirez <antirez@gmail.com>2018-04-01 16:36:32 +0200
committerantirez <antirez@gmail.com>2018-04-01 16:36:32 +0200
commitc75582889a49ed15524a05f855d2a6327451c8c6 (patch)
tree8503fd5ab21ec32cffdd96aad157b5187809db41
parent27f9c8108c1c6a803ad8e386d655c7065feda394 (diff)
downloadredis-c75582889a49ed15524a05f855d2a6327451c8c6.tar.gz
Modules Cluster API: GetClusterSize() added.
-rw-r--r--src/module.c10
-rw-r--r--src/redismodule.h4
2 files changed, 13 insertions, 1 deletions
diff --git a/src/module.c b/src/module.c
index 78e6aea49..1aa398849 100644
--- a/src/module.c
+++ b/src/module.c
@@ -3968,6 +3968,15 @@ const char *RM_GetMyClusterID(void) {
return server.cluster->myself->name;
}
+/* Return the number of nodes in the cluster, regardless of their state
+ * (handshake, noaddress, ...) so that the number of active nodes may actually
+ * be smaller, but not greater than this number. If the instance is not in
+ * cluster mode, zero is returned. */
+size_t RM_GetClusterSize(void) {
+ if (!server.cluster_enabled) return 0;
+ return dictSize(server.cluster->nodes);
+}
+
/* Populate the specified info for the node having as ID the specified 'id',
* then returns REDISMODULE_OK. Otherwise if the node ID does not exist from
* the POV of this local node, REDISMODULE_ERR is returned.
@@ -4565,4 +4574,5 @@ void moduleRegisterCoreAPI(void) {
REGISTER_API(StopTimer);
REGISTER_API(GetTimerInfo);
REGISTER_API(GetMyClusterID);
+ REGISTER_API(GetClusterSize);
}
diff --git a/src/redismodule.h b/src/redismodule.h
index e16031a4f..d232c0fa0 100644
--- a/src/redismodule.h
+++ b/src/redismodule.h
@@ -276,7 +276,8 @@ void REDISMODULE_API_FUNC(RedisModule_FreeClusterNodesList)(char **ids);
RedisModuleTimerID REDISMODULE_API_FUNC(RedisModule_CreateTimer)(RedisModuleCtx *ctx, mstime_t period, RedisModuleTimerProc callback, void *data);
int REDISMODULE_API_FUNC(RedisModule_StopTimer)(RedisModuleCtx *ctx, RedisModuleTimerID id, void **data);
int REDISMODULE_API_FUNC(RedisModule_GetTimerInfo)(RedisModuleCtx *ctx, RedisModuleTimerID id, uint64_t *remaining, void **data);
-const char *REDISMODULE_API_FUNC(RM_GetMyClusterID)(void);
+const char *REDISMODULE_API_FUNC(RedisModule_GetMyClusterID)(void);
+size_t REDISMODULE_API_FUNC(RedisModule_GetClusterSize)(void);
/* Experimental APIs */
#ifdef REDISMODULE_EXPERIMENTAL_API
@@ -409,6 +410,7 @@ static int RedisModule_Init(RedisModuleCtx *ctx, const char *name, int ver, int
REDISMODULE_GET_API(StopTimer);
REDISMODULE_GET_API(GetTimerInfo);
REDISMODULE_GET_API(GetMyClusterID);
+ REDISMODULE_GET_API(GetClusterSize);
#ifdef REDISMODULE_EXPERIMENTAL_API
REDISMODULE_GET_API(GetThreadSafeContext);