Module cluster flags: add RM_SetClusterFlags() API.
This commit is contained in:
parent
777cc5b987
commit
3213e8de92
@ -3877,6 +3877,11 @@ int verifyClusterConfigWithData(void) {
|
||||
int j;
|
||||
int update_config = 0;
|
||||
|
||||
/* Return ASAP if a module disabled cluster redirections. In that case
|
||||
* every master can store keys about every possible hash slot. */
|
||||
if (server.cluster_module_flags & CLUSTER_MODULE_FLAG_NO_REDIRECTION)
|
||||
return C_OK;
|
||||
|
||||
/* If this node is a slave, don't perform the check at all as we
|
||||
* completely depend on the replication stream. */
|
||||
if (nodeIsSlave(myself)) return C_OK;
|
||||
|
26
src/module.c
26
src/module.c
@ -4132,6 +4132,31 @@ int RM_GetClusterNodeInfo(RedisModuleCtx *ctx, const char *id, char *ip, char *m
|
||||
return REDISMODULE_OK;
|
||||
}
|
||||
|
||||
/* Set Redis Cluster flags in order to change the normal behavior of
|
||||
* Redis Cluster, especially with the goal of disabling certain functions.
|
||||
* This is useful for modules that use the Cluster API in order to create
|
||||
* a different distributed system, but still want to use the Redis Cluster
|
||||
* message bus. Flags that can be set:
|
||||
*
|
||||
* CLUSTER_MODULE_FLAG_NO_FAILOVER
|
||||
* CLUSTER_MODULE_FLAG_NO_REDIRECTION
|
||||
*
|
||||
* With the following effects:
|
||||
*
|
||||
* NO_FAILOVER: prevent Redis Cluster slaves to failover a failing master.
|
||||
* Also disables the replica migration feature.
|
||||
*
|
||||
* NO_REDIRECTION: Every node will accept any key, without trying to perform
|
||||
* partitioning according to the user Redis Cluster algorithm.
|
||||
* Slots informations will still be propagated across the
|
||||
* cluster, but without effects. */
|
||||
void RM_SetClusterFlags(RedisModuleCtx *ctx, uint64_t flags) {
|
||||
if (flags & REDISMODULE_CLUSTER_FLAG_NO_FAILOVER)
|
||||
server.cluster_module_flags |= CLUSTER_MODULE_FLAG_NO_FAILOVER;
|
||||
if (flags & REDISMODULE_CLUSTER_FLAG_NO_REDIRECTION)
|
||||
server.cluster_module_flags |= CLUSTER_MODULE_FLAG_NO_REDIRECTION;
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------
|
||||
* Modules Timers API
|
||||
*
|
||||
@ -4708,4 +4733,5 @@ void moduleRegisterCoreAPI(void) {
|
||||
REGISTER_API(BlockedClientDisconnected);
|
||||
REGISTER_API(SetDisconnectCallback);
|
||||
REGISTER_API(GetBlockedClientHandle);
|
||||
REGISTER_API(SetClusterFlags);
|
||||
}
|
||||
|
@ -307,6 +307,7 @@ size_t REDISMODULE_API_FUNC(RedisModule_GetClusterSize)(void);
|
||||
void REDISMODULE_API_FUNC(RedisModule_GetRandomBytes)(unsigned char *dst, size_t len);
|
||||
void REDISMODULE_API_FUNC(RedisModule_GetRandomHexChars)(char *dst, size_t len);
|
||||
void REDISMODULE_API_FUNC(RedisModule_SetDisconnectCallback)(RedisModuleBlockedClient *bc, RedisModuleDisconnectFunc callback);
|
||||
void REDISMODULE_API_FUNC(RedisModule_SetClusterFlags)(RedisModuleCtx *ctx, uint64_t flags);
|
||||
#endif
|
||||
|
||||
/* This is included inline inside each Redis module. */
|
||||
@ -444,6 +445,7 @@ static int RedisModule_Init(RedisModuleCtx *ctx, const char *name, int ver, int
|
||||
REDISMODULE_GET_API(GetClusterSize);
|
||||
REDISMODULE_GET_API(GetRandomBytes);
|
||||
REDISMODULE_GET_API(GetRandomHexChars);
|
||||
REDISMODULE_GET_API(SetClusterFlags);
|
||||
#endif
|
||||
|
||||
if (RedisModule_IsModuleNameBusy && RedisModule_IsModuleNameBusy(name)) return REDISMODULE_ERR;
|
||||
|
Loading…
x
Reference in New Issue
Block a user