87
87
#define REDISMODULE_CTX_FLAGS_OOM_WARNING (1<<11)
88
88
/* The command was sent over the replication link. */
89
89
#define REDISMODULE_CTX_FLAGS_REPLICATED (1<<12)
90
-
90
+ /* Redis is currently loading either from AOF or RDB. */
91
+ #define REDISMODULE_CTX_FLAGS_LOADING (1<<13)
92
+ /* The replica has no link with its master, note that
93
+ * there is the inverse flag as well:
94
+ *
95
+ * REDISMODULE_CTX_FLAGS_REPLICA_IS_ONLINE
96
+ *
97
+ * The two flags are exclusive, one or the other can be set. */
98
+ #define REDISMODULE_CTX_FLAGS_REPLICA_IS_STALE (1<<14)
99
+ /* The replica is trying to connect with the master.
100
+ * (REPL_STATE_CONNECT and REPL_STATE_CONNECTING states) */
101
+ #define REDISMODULE_CTX_FLAGS_REPLICA_IS_CONNECTING (1<<15)
102
+ /* THe replica is receiving an RDB file from its master. */
103
+ #define REDISMODULE_CTX_FLAGS_REPLICA_IS_TRANSFERRING (1<<16)
104
+ /* The replica is online, receiving updates from its master. */
105
+ #define REDISMODULE_CTX_FLAGS_REPLICA_IS_ONLINE (1<<17)
106
+ /* There is currently some background process active. */
107
+ #define REDISMODULE_CTX_FLAGS_ACTIVE_CHILD (1<<18)
91
108
92
109
#define REDISMODULE_NOTIFY_GENERIC (1<<2) /* g */
93
110
#define REDISMODULE_NOTIFY_STRING (1<<3) /* $ */
126
143
127
144
#define REDISMODULE_NOT_USED (V ) ((void) V)
128
145
146
+ /* Bit flags for aux_save_triggers and the aux_load and aux_save callbacks */
147
+ #define REDISMODULE_AUX_BEFORE_RDB (1<<0)
148
+ #define REDISMODULE_AUX_AFTER_RDB (1<<1)
149
+
129
150
/* This type represents a timer handle, and is returned when a timer is
130
151
* registered and used in order to invalidate a timer. It's just a 64 bit
131
152
* number, because this is how each timer is represented inside the radix tree
132
153
* of timers that are going to expire, sorted by expire time. */
133
154
typedef uint64_t RedisModuleTimerID ;
134
155
156
+ /* CommandFilter Flags */
157
+
158
+ /* Do filter RedisModule_Call() commands initiated by module itself. */
159
+ #define REDISMODULE_CMDFILTER_NOSELF (1<<0)
160
+
135
161
/* ------------------------- End of common defines ------------------------ */
136
162
137
163
#ifndef REDISMODULE_CORE
@@ -150,20 +176,25 @@ typedef struct RedisModuleBlockedClient RedisModuleBlockedClient;
150
176
typedef struct RedisModuleClusterInfo RedisModuleClusterInfo ;
151
177
typedef struct RedisModuleDict RedisModuleDict ;
152
178
typedef struct RedisModuleDictIter RedisModuleDictIter ;
179
+ typedef struct RedisModuleCommandFilterCtx RedisModuleCommandFilterCtx ;
180
+ typedef struct RedisModuleCommandFilter RedisModuleCommandFilter ;
153
181
154
182
typedef int (* RedisModuleCmdFunc )(RedisModuleCtx * ctx , RedisModuleString * * argv , int argc );
155
183
typedef void (* RedisModuleDisconnectFunc )(RedisModuleCtx * ctx , RedisModuleBlockedClient * bc );
156
184
typedef int (* RedisModuleNotificationFunc )(RedisModuleCtx * ctx , int type , const char * event , RedisModuleString * key );
157
185
typedef void * (* RedisModuleTypeLoadFunc )(RedisModuleIO * rdb , int encver );
158
186
typedef void (* RedisModuleTypeSaveFunc )(RedisModuleIO * rdb , void * value );
187
+ typedef int (* RedisModuleTypeAuxLoadFunc )(RedisModuleIO * rdb , int encver , int when );
188
+ typedef void (* RedisModuleTypeAuxSaveFunc )(RedisModuleIO * rdb , int when );
159
189
typedef void (* RedisModuleTypeRewriteFunc )(RedisModuleIO * aof , RedisModuleString * key , void * value );
160
190
typedef size_t (* RedisModuleTypeMemUsageFunc )(const void * value );
161
191
typedef void (* RedisModuleTypeDigestFunc )(RedisModuleDigest * digest , void * value );
162
192
typedef void (* RedisModuleTypeFreeFunc )(void * value );
163
193
typedef void (* RedisModuleClusterMessageReceiver )(RedisModuleCtx * ctx , const char * sender_id , uint8_t type , const unsigned char * payload , uint32_t len );
164
194
typedef void (* RedisModuleTimerProc )(RedisModuleCtx * ctx , void * data );
195
+ typedef void (* RedisModuleCommandFilterFunc ) (RedisModuleCommandFilterCtx * filter );
165
196
166
- #define REDISMODULE_TYPE_METHOD_VERSION 1
197
+ #define REDISMODULE_TYPE_METHOD_VERSION 2
167
198
typedef struct RedisModuleTypeMethods {
168
199
uint64_t version ;
169
200
RedisModuleTypeLoadFunc rdb_load ;
@@ -172,6 +203,9 @@ typedef struct RedisModuleTypeMethods {
172
203
RedisModuleTypeMemUsageFunc mem_usage ;
173
204
RedisModuleTypeDigestFunc digest ;
174
205
RedisModuleTypeFreeFunc free ;
206
+ RedisModuleTypeAuxLoadFunc aux_load ;
207
+ RedisModuleTypeAuxSaveFunc aux_save ;
208
+ int aux_save_triggers ;
175
209
} RedisModuleTypeMethods ;
176
210
177
211
#define REDISMODULE_GET_API (name ) \
@@ -217,6 +251,7 @@ int REDISMODULE_API_FUNC(RedisModule_ReplyWithSimpleString)(RedisModuleCtx *ctx,
217
251
int REDISMODULE_API_FUNC (RedisModule_ReplyWithArray )(RedisModuleCtx * ctx , long len );
218
252
void REDISMODULE_API_FUNC (RedisModule_ReplySetArrayLength )(RedisModuleCtx * ctx , long len );
219
253
int REDISMODULE_API_FUNC (RedisModule_ReplyWithStringBuffer )(RedisModuleCtx * ctx , const char * buf , size_t len );
254
+ int REDISMODULE_API_FUNC (RedisModule_ReplyWithCString )(RedisModuleCtx * ctx , const char * buf );
220
255
int REDISMODULE_API_FUNC (RedisModule_ReplyWithString )(RedisModuleCtx * ctx , RedisModuleString * str );
221
256
int REDISMODULE_API_FUNC (RedisModule_ReplyWithNull )(RedisModuleCtx * ctx );
222
257
int REDISMODULE_API_FUNC (RedisModule_ReplyWithDouble )(RedisModuleCtx * ctx , double d );
@@ -278,6 +313,7 @@ int REDISMODULE_API_FUNC(RedisModule_StringAppendBuffer)(RedisModuleCtx *ctx, Re
278
313
void REDISMODULE_API_FUNC (RedisModule_RetainString )(RedisModuleCtx * ctx , RedisModuleString * str );
279
314
int REDISMODULE_API_FUNC (RedisModule_StringCompare )(RedisModuleString * a , RedisModuleString * b );
280
315
RedisModuleCtx * REDISMODULE_API_FUNC (RedisModule_GetContextFromIO )(RedisModuleIO * io );
316
+ const RedisModuleString * REDISMODULE_API_FUNC (RedisModule_GetKeyNameFromIO )(RedisModuleIO * io );
281
317
long long REDISMODULE_API_FUNC (RedisModule_Milliseconds )(void );
282
318
void REDISMODULE_API_FUNC (RedisModule_DigestAddStringBuffer )(RedisModuleDigest * md , unsigned char * ele , size_t len );
283
319
void REDISMODULE_API_FUNC (RedisModule_DigestAddLongLong )(RedisModuleDigest * md , long long ele );
@@ -337,6 +373,13 @@ void REDISMODULE_API_FUNC(RedisModule_SetDisconnectCallback)(RedisModuleBlockedC
337
373
void REDISMODULE_API_FUNC (RedisModule_SetClusterFlags )(RedisModuleCtx * ctx , uint64_t flags );
338
374
int REDISMODULE_API_FUNC (RedisModule_ExportSharedAPI )(RedisModuleCtx * ctx , const char * apiname , void * func );
339
375
void * REDISMODULE_API_FUNC (RedisModule_GetSharedAPI )(RedisModuleCtx * ctx , const char * apiname );
376
+ RedisModuleCommandFilter * REDISMODULE_API_FUNC (RedisModule_RegisterCommandFilter )(RedisModuleCtx * ctx , RedisModuleCommandFilterFunc cb , int flags );
377
+ int REDISMODULE_API_FUNC (RedisModule_UnregisterCommandFilter )(RedisModuleCtx * ctx , RedisModuleCommandFilter * filter );
378
+ int REDISMODULE_API_FUNC (RedisModule_CommandFilterArgsCount )(RedisModuleCommandFilterCtx * fctx );
379
+ const RedisModuleString * REDISMODULE_API_FUNC (RedisModule_CommandFilterArgGet )(RedisModuleCommandFilterCtx * fctx , int pos );
380
+ int REDISMODULE_API_FUNC (RedisModule_CommandFilterArgInsert )(RedisModuleCommandFilterCtx * fctx , int pos , RedisModuleString * arg );
381
+ int REDISMODULE_API_FUNC (RedisModule_CommandFilterArgReplace )(RedisModuleCommandFilterCtx * fctx , int pos , RedisModuleString * arg );
382
+ int REDISMODULE_API_FUNC (RedisModule_CommandFilterArgDelete )(RedisModuleCommandFilterCtx * fctx , int pos );
340
383
#endif
341
384
342
385
/* This is included inline inside each Redis module. */
@@ -359,6 +402,7 @@ static int RedisModule_Init(RedisModuleCtx *ctx, const char *name, int ver, int
359
402
REDISMODULE_GET_API (ReplyWithArray );
360
403
REDISMODULE_GET_API (ReplySetArrayLength );
361
404
REDISMODULE_GET_API (ReplyWithStringBuffer );
405
+ REDISMODULE_GET_API (ReplyWithCString );
362
406
REDISMODULE_GET_API (ReplyWithString );
363
407
REDISMODULE_GET_API (ReplyWithNull );
364
408
REDISMODULE_GET_API (ReplyWithCallReply );
@@ -442,6 +486,7 @@ static int RedisModule_Init(RedisModuleCtx *ctx, const char *name, int ver, int
442
486
REDISMODULE_GET_API (RetainString );
443
487
REDISMODULE_GET_API (StringCompare );
444
488
REDISMODULE_GET_API (GetContextFromIO );
489
+ REDISMODULE_GET_API (GetKeyNameFromIO );
445
490
REDISMODULE_GET_API (Milliseconds );
446
491
REDISMODULE_GET_API (DigestAddStringBuffer );
447
492
REDISMODULE_GET_API (DigestAddLongLong );
@@ -499,6 +544,13 @@ static int RedisModule_Init(RedisModuleCtx *ctx, const char *name, int ver, int
499
544
REDISMODULE_GET_API (SetClusterFlags );
500
545
REDISMODULE_GET_API (ExportSharedAPI );
501
546
REDISMODULE_GET_API (GetSharedAPI );
547
+ REDISMODULE_GET_API (RegisterCommandFilter );
548
+ REDISMODULE_GET_API (UnregisterCommandFilter );
549
+ REDISMODULE_GET_API (CommandFilterArgsCount );
550
+ REDISMODULE_GET_API (CommandFilterArgGet );
551
+ REDISMODULE_GET_API (CommandFilterArgInsert );
552
+ REDISMODULE_GET_API (CommandFilterArgReplace );
553
+ REDISMODULE_GET_API (CommandFilterArgDelete );
502
554
#endif
503
555
504
556
if (RedisModule_IsModuleNameBusy && RedisModule_IsModuleNameBusy (name )) return REDISMODULE_ERR ;
0 commit comments