5858#define REDISMODULE_HASH_CFIELDS (1<<2)
5959#define REDISMODULE_HASH_EXISTS (1<<3)
6060
61+ /* Context Flags: Info about the current context returned by
62+ * RM_GetContextFlags(). */
63+
64+ /* The command is running in the context of a Lua script */
65+ #define REDISMODULE_CTX_FLAGS_LUA (1<<0)
66+ /* The command is running inside a Redis transaction */
67+ #define REDISMODULE_CTX_FLAGS_MULTI (1<<1)
68+ /* The instance is a master */
69+ #define REDISMODULE_CTX_FLAGS_MASTER (1<<2)
70+ /* The instance is a slave */
71+ #define REDISMODULE_CTX_FLAGS_SLAVE (1<<3)
72+ /* The instance is read-only (usually meaning it's a slave as well) */
73+ #define REDISMODULE_CTX_FLAGS_READONLY (1<<4)
74+ /* The instance is running in cluster mode */
75+ #define REDISMODULE_CTX_FLAGS_CLUSTER (1<<5)
76+ /* The instance has AOF enabled */
77+ #define REDISMODULE_CTX_FLAGS_AOF (1<<6)
78+ /* The instance has RDB enabled */
79+ #define REDISMODULE_CTX_FLAGS_RDB (1<<7)
80+ /* The instance has Maxmemory set */
81+ #define REDISMODULE_CTX_FLAGS_MAXMEMORY (1<<8)
82+ /* Maxmemory is set and has an eviction policy that may delete keys */
83+ #define REDISMODULE_CTX_FLAGS_EVICT (1<<9)
84+ /* Redis is out of memory according to the maxmemory flag. */
85+ #define REDISMODULE_CTX_FLAGS_OOM (1<<10)
86+ /* Less than 25% of memory available according to maxmemory. */
87+ #define REDISMODULE_CTX_FLAGS_OOM_WARNING (1<<11)
88+
89+ #define REDISMODULE_NOTIFY_GENERIC (1<<2) /* g */
90+ #define REDISMODULE_NOTIFY_STRING (1<<3) /* $ */
91+ #define REDISMODULE_NOTIFY_LIST (1<<4) /* l */
92+ #define REDISMODULE_NOTIFY_SET (1<<5) /* s */
93+ #define REDISMODULE_NOTIFY_HASH (1<<6) /* h */
94+ #define REDISMODULE_NOTIFY_ZSET (1<<7) /* z */
95+ #define REDISMODULE_NOTIFY_EXPIRED (1<<8) /* x */
96+ #define REDISMODULE_NOTIFY_EVICTED (1<<9) /* e */
97+ #define REDISMODULE_NOTIFY_STREAM (1<<10) /* t */
98+ #define REDISMODULE_NOTIFY_ALL (REDISMODULE_NOTIFY_GENERIC | REDISMODULE_NOTIFY_STRING | REDISMODULE_NOTIFY_LIST | REDISMODULE_NOTIFY_SET | REDISMODULE_NOTIFY_HASH | REDISMODULE_NOTIFY_ZSET | REDISMODULE_NOTIFY_EXPIRED | REDISMODULE_NOTIFY_EVICTED | REDISMODULE_NOTIFY_STREAM) /* A */
99+
100+
61101/* A special pointer that we can use between the core and the module to signal
62102 * field deletion, and that is impossible to be a valid pointer. */
63103#define REDISMODULE_HASH_DELETE ((RedisModuleString*)(long)1)
68108#define REDISMODULE_POSITIVE_INFINITE (1.0/0.0)
69109#define REDISMODULE_NEGATIVE_INFINITE (-1.0/0.0)
70110
111+ /* Cluster API defines. */
112+ #define REDISMODULE_NODE_ID_LEN 40
113+ #define REDISMODULE_NODE_MYSELF (1<<0)
114+ #define REDISMODULE_NODE_MASTER (1<<1)
115+ #define REDISMODULE_NODE_SLAVE (1<<2)
116+ #define REDISMODULE_NODE_PFAIL (1<<3)
117+ #define REDISMODULE_NODE_FAIL (1<<4)
118+ #define REDISMODULE_NODE_NOFAILOVER (1<<5)
119+
120+ #define REDISMODULE_CLUSTER_FLAG_NONE 0
121+ #define REDISMODULE_CLUSTER_FLAG_NO_FAILOVER (1<<1)
122+ #define REDISMODULE_CLUSTER_FLAG_NO_REDIRECTION (1<<2)
123+
71124#define REDISMODULE_NOT_USED (V ) ((void) V)
72125
126+ /* This type represents a timer handle, and is returned when a timer is
127+ * registered and used in order to invalidate a timer. It's just a 64 bit
128+ * number, because this is how each timer is represented inside the radix tree
129+ * of timers that are going to expire, sorted by expire time. */
130+ typedef uint64_t RedisModuleTimerID ;
131+
73132/* ------------------------- End of common defines ------------------------ */
74133
75134#ifndef REDISMODULE_CORE
@@ -85,15 +144,21 @@ typedef struct RedisModuleIO RedisModuleIO;
85144typedef struct RedisModuleType RedisModuleType ;
86145typedef struct RedisModuleDigest RedisModuleDigest ;
87146typedef struct RedisModuleBlockedClient RedisModuleBlockedClient ;
147+ typedef struct RedisModuleClusterInfo RedisModuleClusterInfo ;
148+ typedef struct RedisModuleDict RedisModuleDict ;
149+ typedef struct RedisModuleDictIter RedisModuleDictIter ;
88150
89- typedef int (* RedisModuleCmdFunc ) (RedisModuleCtx * ctx , RedisModuleString * * argv , int argc );
90-
151+ typedef int (* RedisModuleCmdFunc )(RedisModuleCtx * ctx , RedisModuleString * * argv , int argc );
152+ typedef void (* RedisModuleDisconnectFunc )(RedisModuleCtx * ctx , RedisModuleBlockedClient * bc );
153+ typedef int (* RedisModuleNotificationFunc )(RedisModuleCtx * ctx , int type , const char * event , RedisModuleString * key );
91154typedef void * (* RedisModuleTypeLoadFunc )(RedisModuleIO * rdb , int encver );
92155typedef void (* RedisModuleTypeSaveFunc )(RedisModuleIO * rdb , void * value );
93156typedef void (* RedisModuleTypeRewriteFunc )(RedisModuleIO * aof , RedisModuleString * key , void * value );
94157typedef size_t (* RedisModuleTypeMemUsageFunc )(const void * value );
95158typedef void (* RedisModuleTypeDigestFunc )(RedisModuleDigest * digest , void * value );
96159typedef void (* RedisModuleTypeFreeFunc )(void * value );
160+ typedef void (* RedisModuleClusterMessageReceiver )(RedisModuleCtx * ctx , const char * sender_id , uint8_t type , const unsigned char * payload , uint32_t len );
161+ typedef void (* RedisModuleTimerProc )(RedisModuleCtx * ctx , void * data );
97162
98163#define REDISMODULE_TYPE_METHOD_VERSION 1
99164typedef struct RedisModuleTypeMethods {
@@ -119,7 +184,8 @@ void *REDISMODULE_API_FUNC(RedisModule_Calloc)(size_t nmemb, size_t size);
119184char * REDISMODULE_API_FUNC (RedisModule_Strdup )(const char * str );
120185int REDISMODULE_API_FUNC (RedisModule_GetApi )(const char * , void * );
121186int REDISMODULE_API_FUNC (RedisModule_CreateCommand )(RedisModuleCtx * ctx , const char * name , RedisModuleCmdFunc cmdfunc , const char * strflags , int firstkey , int lastkey , int keystep );
122- int REDISMODULE_API_FUNC (RedisModule_SetModuleAttribs )(RedisModuleCtx * ctx , const char * name , int ver , int apiver );
187+ void REDISMODULE_API_FUNC (RedisModule_SetModuleAttribs )(RedisModuleCtx * ctx , const char * name , int ver , int apiver );
188+ int REDISMODULE_API_FUNC (RedisModule_IsModuleNameBusy )(const char * name );
123189int REDISMODULE_API_FUNC (RedisModule_WrongArity )(RedisModuleCtx * ctx );
124190int REDISMODULE_API_FUNC (RedisModule_ReplyWithLongLong )(RedisModuleCtx * ctx , long long ll );
125191int REDISMODULE_API_FUNC (RedisModule_GetSelectedDb )(RedisModuleCtx * ctx );
@@ -160,6 +226,7 @@ int REDISMODULE_API_FUNC(RedisModule_ReplicateVerbatim)(RedisModuleCtx *ctx);
160226const char * REDISMODULE_API_FUNC (RedisModule_CallReplyStringPtr )(RedisModuleCallReply * reply , size_t * len );
161227RedisModuleString * REDISMODULE_API_FUNC (RedisModule_CreateStringFromCallReply )(RedisModuleCallReply * reply );
162228int REDISMODULE_API_FUNC (RedisModule_DeleteKey )(RedisModuleKey * key );
229+ int REDISMODULE_API_FUNC (RedisModule_UnlinkKey )(RedisModuleKey * key );
163230int REDISMODULE_API_FUNC (RedisModule_StringSet )(RedisModuleKey * key , RedisModuleString * str );
164231char * REDISMODULE_API_FUNC (RedisModule_StringDMA )(RedisModuleKey * key , size_t * len , int mode );
165232int REDISMODULE_API_FUNC (RedisModule_StringTruncate )(RedisModuleKey * key , size_t newlen );
@@ -183,6 +250,7 @@ int REDISMODULE_API_FUNC(RedisModule_HashGet)(RedisModuleKey *key, int flags, ..
183250int REDISMODULE_API_FUNC (RedisModule_IsKeysPositionRequest )(RedisModuleCtx * ctx );
184251void REDISMODULE_API_FUNC (RedisModule_KeyAtPos )(RedisModuleCtx * ctx , int pos );
185252unsigned long long REDISMODULE_API_FUNC (RedisModule_GetClientId )(RedisModuleCtx * ctx );
253+ int REDISMODULE_API_FUNC (RedisModule_GetContextFlags )(RedisModuleCtx * ctx );
186254void * REDISMODULE_API_FUNC (RedisModule_PoolAlloc )(RedisModuleCtx * ctx , size_t bytes );
187255RedisModuleType * REDISMODULE_API_FUNC (RedisModule_CreateDataType )(RedisModuleCtx * ctx , const char * name , int encver , RedisModuleTypeMethods * typemethods );
188256int REDISMODULE_API_FUNC (RedisModule_ModuleTypeSetValue )(RedisModuleKey * key , RedisModuleType * mt , void * value );
@@ -207,17 +275,64 @@ int REDISMODULE_API_FUNC(RedisModule_StringAppendBuffer)(RedisModuleCtx *ctx, Re
207275void REDISMODULE_API_FUNC (RedisModule_RetainString )(RedisModuleCtx * ctx , RedisModuleString * str );
208276int REDISMODULE_API_FUNC (RedisModule_StringCompare )(RedisModuleString * a , RedisModuleString * b );
209277RedisModuleCtx * REDISMODULE_API_FUNC (RedisModule_GetContextFromIO )(RedisModuleIO * io );
210- RedisModuleBlockedClient * REDISMODULE_API_FUNC (RedisModule_BlockClient )(RedisModuleCtx * ctx , RedisModuleCmdFunc reply_callback , RedisModuleCmdFunc timeout_callback , void (* free_privdata )(void * ), long long timeout_ms );
278+ long long REDISMODULE_API_FUNC (RedisModule_Milliseconds )(void );
279+ void REDISMODULE_API_FUNC (RedisModule_DigestAddStringBuffer )(RedisModuleDigest * md , unsigned char * ele , size_t len );
280+ void REDISMODULE_API_FUNC (RedisModule_DigestAddLongLong )(RedisModuleDigest * md , long long ele );
281+ void REDISMODULE_API_FUNC (RedisModule_DigestEndSequence )(RedisModuleDigest * md );
282+ RedisModuleDict * REDISMODULE_API_FUNC (RedisModule_CreateDict )(RedisModuleCtx * ctx );
283+ void REDISMODULE_API_FUNC (RedisModule_FreeDict )(RedisModuleCtx * ctx , RedisModuleDict * d );
284+ uint64_t REDISMODULE_API_FUNC (RedisModule_DictSize )(RedisModuleDict * d );
285+ int REDISMODULE_API_FUNC (RedisModule_DictSetC )(RedisModuleDict * d , void * key , size_t keylen , void * ptr );
286+ int REDISMODULE_API_FUNC (RedisModule_DictReplaceC )(RedisModuleDict * d , void * key , size_t keylen , void * ptr );
287+ int REDISMODULE_API_FUNC (RedisModule_DictSet )(RedisModuleDict * d , RedisModuleString * key , void * ptr );
288+ int REDISMODULE_API_FUNC (RedisModule_DictReplace )(RedisModuleDict * d , RedisModuleString * key , void * ptr );
289+ void * REDISMODULE_API_FUNC (RedisModule_DictGetC )(RedisModuleDict * d , void * key , size_t keylen , int * nokey );
290+ void * REDISMODULE_API_FUNC (RedisModule_DictGet )(RedisModuleDict * d , RedisModuleString * key , int * nokey );
291+ int REDISMODULE_API_FUNC (RedisModule_DictDelC )(RedisModuleDict * d , void * key , size_t keylen , void * oldval );
292+ int REDISMODULE_API_FUNC (RedisModule_DictDel )(RedisModuleDict * d , RedisModuleString * key , void * oldval );
293+ RedisModuleDictIter * REDISMODULE_API_FUNC (RedisModule_DictIteratorStartC )(RedisModuleDict * d , const char * op , void * key , size_t keylen );
294+ RedisModuleDictIter * REDISMODULE_API_FUNC (RedisModule_DictIteratorStart )(RedisModuleDict * d , const char * op , RedisModuleString * key );
295+ void REDISMODULE_API_FUNC (RedisModule_DictIteratorStop )(RedisModuleDictIter * di );
296+ int REDISMODULE_API_FUNC (RedisModule_DictIteratorReseekC )(RedisModuleDictIter * di , const char * op , void * key , size_t keylen );
297+ int REDISMODULE_API_FUNC (RedisModule_DictIteratorReseek )(RedisModuleDictIter * di , const char * op , RedisModuleString * key );
298+ void * REDISMODULE_API_FUNC (RedisModule_DictNextC )(RedisModuleDictIter * di , size_t * keylen , void * * dataptr );
299+ void * REDISMODULE_API_FUNC (RedisModule_DictPrevC )(RedisModuleDictIter * di , size_t * keylen , void * * dataptr );
300+ RedisModuleString * REDISMODULE_API_FUNC (RedisModule_DictNext )(RedisModuleCtx * ctx , RedisModuleDictIter * di , void * * dataptr );
301+ RedisModuleString * REDISMODULE_API_FUNC (RedisModule_DictPrev )(RedisModuleCtx * ctx , RedisModuleDictIter * di , void * * dataptr );
302+ int REDISMODULE_API_FUNC (RedisModule_DictCompareC )(RedisModuleDictIter * di , const char * op , void * key , size_t keylen );
303+ int REDISMODULE_API_FUNC (RedisModule_DictCompare )(RedisModuleDictIter * di , const char * op , RedisModuleString * key );
304+
305+ /* Experimental APIs */
306+ #ifdef REDISMODULE_EXPERIMENTAL_API
307+ #define REDISMODULE_EXPERIMENTAL_API_VERSION 3
308+ RedisModuleBlockedClient * REDISMODULE_API_FUNC (RedisModule_BlockClient )(RedisModuleCtx * ctx , RedisModuleCmdFunc reply_callback , RedisModuleCmdFunc timeout_callback , void (* free_privdata )(RedisModuleCtx * ,void * ), long long timeout_ms );
211309int REDISMODULE_API_FUNC (RedisModule_UnblockClient )(RedisModuleBlockedClient * bc , void * privdata );
212310int REDISMODULE_API_FUNC (RedisModule_IsBlockedReplyRequest )(RedisModuleCtx * ctx );
213311int REDISMODULE_API_FUNC (RedisModule_IsBlockedTimeoutRequest )(RedisModuleCtx * ctx );
214312void * REDISMODULE_API_FUNC (RedisModule_GetBlockedClientPrivateData )(RedisModuleCtx * ctx );
313+ RedisModuleBlockedClient * REDISMODULE_API_FUNC (RedisModule_GetBlockedClientHandle )(RedisModuleCtx * ctx );
215314int REDISMODULE_API_FUNC (RedisModule_AbortBlock )(RedisModuleBlockedClient * bc );
216- long long REDISMODULE_API_FUNC (RedisModule_Milliseconds )(void );
217315RedisModuleCtx * REDISMODULE_API_FUNC (RedisModule_GetThreadSafeContext )(RedisModuleBlockedClient * bc );
218316void REDISMODULE_API_FUNC (RedisModule_FreeThreadSafeContext )(RedisModuleCtx * ctx );
219317void REDISMODULE_API_FUNC (RedisModule_ThreadSafeContextLock )(RedisModuleCtx * ctx );
220318void REDISMODULE_API_FUNC (RedisModule_ThreadSafeContextUnlock )(RedisModuleCtx * ctx );
319+ int REDISMODULE_API_FUNC (RedisModule_SubscribeToKeyspaceEvents )(RedisModuleCtx * ctx , int types , RedisModuleNotificationFunc cb );
320+ int REDISMODULE_API_FUNC (RedisModule_BlockedClientDisconnected )(RedisModuleCtx * ctx );
321+ void REDISMODULE_API_FUNC (RedisModule_RegisterClusterMessageReceiver )(RedisModuleCtx * ctx , uint8_t type , RedisModuleClusterMessageReceiver callback );
322+ int REDISMODULE_API_FUNC (RedisModule_SendClusterMessage )(RedisModuleCtx * ctx , char * target_id , uint8_t type , unsigned char * msg , uint32_t len );
323+ int REDISMODULE_API_FUNC (RedisModule_GetClusterNodeInfo )(RedisModuleCtx * ctx , const char * id , char * ip , char * master_id , int * port , int * flags );
324+ char * * REDISMODULE_API_FUNC (RedisModule_GetClusterNodesList )(RedisModuleCtx * ctx , size_t * numnodes );
325+ void REDISMODULE_API_FUNC (RedisModule_FreeClusterNodesList )(char * * ids );
326+ RedisModuleTimerID REDISMODULE_API_FUNC (RedisModule_CreateTimer )(RedisModuleCtx * ctx , mstime_t period , RedisModuleTimerProc callback , void * data );
327+ int REDISMODULE_API_FUNC (RedisModule_StopTimer )(RedisModuleCtx * ctx , RedisModuleTimerID id , void * * data );
328+ int REDISMODULE_API_FUNC (RedisModule_GetTimerInfo )(RedisModuleCtx * ctx , RedisModuleTimerID id , uint64_t * remaining , void * * data );
329+ const char * REDISMODULE_API_FUNC (RedisModule_GetMyClusterID )(void );
330+ size_t REDISMODULE_API_FUNC (RedisModule_GetClusterSize )(void );
331+ void REDISMODULE_API_FUNC (RedisModule_GetRandomBytes )(unsigned char * dst , size_t len );
332+ void REDISMODULE_API_FUNC (RedisModule_GetRandomHexChars )(char * dst , size_t len );
333+ void REDISMODULE_API_FUNC (RedisModule_SetDisconnectCallback )(RedisModuleBlockedClient * bc , RedisModuleDisconnectFunc callback );
334+ void REDISMODULE_API_FUNC (RedisModule_SetClusterFlags )(RedisModuleCtx * ctx , uint64_t flags );
335+ #endif
221336
222337/* This is included inline inside each Redis module. */
223338static int RedisModule_Init (RedisModuleCtx * ctx , const char * name , int ver , int apiver ) __attribute__((unused ));
@@ -231,6 +346,7 @@ static int RedisModule_Init(RedisModuleCtx *ctx, const char *name, int ver, int
231346 REDISMODULE_GET_API (Strdup );
232347 REDISMODULE_GET_API (CreateCommand );
233348 REDISMODULE_GET_API (SetModuleAttribs );
349+ REDISMODULE_GET_API (IsModuleNameBusy );
234350 REDISMODULE_GET_API (WrongArity );
235351 REDISMODULE_GET_API (ReplyWithLongLong );
236352 REDISMODULE_GET_API (ReplyWithError );
@@ -272,6 +388,7 @@ static int RedisModule_Init(RedisModuleCtx *ctx, const char *name, int ver, int
272388 REDISMODULE_GET_API (Replicate );
273389 REDISMODULE_GET_API (ReplicateVerbatim );
274390 REDISMODULE_GET_API (DeleteKey );
391+ REDISMODULE_GET_API (UnlinkKey );
275392 REDISMODULE_GET_API (StringSet );
276393 REDISMODULE_GET_API (StringDMA );
277394 REDISMODULE_GET_API (StringTruncate );
@@ -295,6 +412,7 @@ static int RedisModule_Init(RedisModuleCtx *ctx, const char *name, int ver, int
295412 REDISMODULE_GET_API (IsKeysPositionRequest );
296413 REDISMODULE_GET_API (KeyAtPos );
297414 REDISMODULE_GET_API (GetClientId );
415+ REDISMODULE_GET_API (GetContextFlags );
298416 REDISMODULE_GET_API (PoolAlloc );
299417 REDISMODULE_GET_API (CreateDataType );
300418 REDISMODULE_GET_API (ModuleTypeSetValue );
@@ -319,18 +437,64 @@ static int RedisModule_Init(RedisModuleCtx *ctx, const char *name, int ver, int
319437 REDISMODULE_GET_API (RetainString );
320438 REDISMODULE_GET_API (StringCompare );
321439 REDISMODULE_GET_API (GetContextFromIO );
440+ REDISMODULE_GET_API (Milliseconds );
441+ REDISMODULE_GET_API (DigestAddStringBuffer );
442+ REDISMODULE_GET_API (DigestAddLongLong );
443+ REDISMODULE_GET_API (DigestEndSequence );
444+ REDISMODULE_GET_API (CreateDict );
445+ REDISMODULE_GET_API (FreeDict );
446+ REDISMODULE_GET_API (DictSize );
447+ REDISMODULE_GET_API (DictSetC );
448+ REDISMODULE_GET_API (DictReplaceC );
449+ REDISMODULE_GET_API (DictSet );
450+ REDISMODULE_GET_API (DictReplace );
451+ REDISMODULE_GET_API (DictGetC );
452+ REDISMODULE_GET_API (DictGet );
453+ REDISMODULE_GET_API (DictDelC );
454+ REDISMODULE_GET_API (DictDel );
455+ REDISMODULE_GET_API (DictIteratorStartC );
456+ REDISMODULE_GET_API (DictIteratorStart );
457+ REDISMODULE_GET_API (DictIteratorStop );
458+ REDISMODULE_GET_API (DictIteratorReseekC );
459+ REDISMODULE_GET_API (DictIteratorReseek );
460+ REDISMODULE_GET_API (DictNextC );
461+ REDISMODULE_GET_API (DictPrevC );
462+ REDISMODULE_GET_API (DictNext );
463+ REDISMODULE_GET_API (DictPrev );
464+ REDISMODULE_GET_API (DictCompare );
465+ REDISMODULE_GET_API (DictCompareC );
466+
467+ #ifdef REDISMODULE_EXPERIMENTAL_API
468+ REDISMODULE_GET_API (GetThreadSafeContext );
469+ REDISMODULE_GET_API (FreeThreadSafeContext );
470+ REDISMODULE_GET_API (ThreadSafeContextLock );
471+ REDISMODULE_GET_API (ThreadSafeContextUnlock );
322472 REDISMODULE_GET_API (BlockClient );
323473 REDISMODULE_GET_API (UnblockClient );
324474 REDISMODULE_GET_API (IsBlockedReplyRequest );
325475 REDISMODULE_GET_API (IsBlockedTimeoutRequest );
326476 REDISMODULE_GET_API (GetBlockedClientPrivateData );
477+ REDISMODULE_GET_API (GetBlockedClientHandle );
327478 REDISMODULE_GET_API (AbortBlock );
328- REDISMODULE_GET_API (Milliseconds );
329- REDISMODULE_GET_API (GetThreadSafeContext );
330- REDISMODULE_GET_API (FreeThreadSafeContext );
331- REDISMODULE_GET_API (ThreadSafeContextLock );
332- REDISMODULE_GET_API (ThreadSafeContextUnlock );
333-
479+ REDISMODULE_GET_API (SetDisconnectCallback );
480+ REDISMODULE_GET_API (SubscribeToKeyspaceEvents );
481+ REDISMODULE_GET_API (BlockedClientDisconnected );
482+ REDISMODULE_GET_API (RegisterClusterMessageReceiver );
483+ REDISMODULE_GET_API (SendClusterMessage );
484+ REDISMODULE_GET_API (GetClusterNodeInfo );
485+ REDISMODULE_GET_API (GetClusterNodesList );
486+ REDISMODULE_GET_API (FreeClusterNodesList );
487+ REDISMODULE_GET_API (CreateTimer );
488+ REDISMODULE_GET_API (StopTimer );
489+ REDISMODULE_GET_API (GetTimerInfo );
490+ REDISMODULE_GET_API (GetMyClusterID );
491+ REDISMODULE_GET_API (GetClusterSize );
492+ REDISMODULE_GET_API (GetRandomBytes );
493+ REDISMODULE_GET_API (GetRandomHexChars );
494+ REDISMODULE_GET_API (SetClusterFlags );
495+ #endif
496+
497+ if (RedisModule_IsModuleNameBusy && RedisModule_IsModuleNameBusy (name )) return REDISMODULE_ERR ;
334498 RedisModule_SetModuleAttribs (ctx ,name ,ver ,apiver );
335499 return REDISMODULE_OK ;
336500}
@@ -342,4 +506,4 @@ static int RedisModule_Init(RedisModuleCtx *ctx, const char *name, int ver, int
342506#define RedisModuleString robj
343507
344508#endif /* REDISMODULE_CORE */
345- #endif /* REDISMOUDLE_H */
509+ #endif /* REDISMOUDLE_H */
0 commit comments