Remove non semantical spaces from module.c.
This commit is contained in:
parent
7830f8492f
commit
aa57481d8c
77
src/module.c
77
src/module.c
@ -220,22 +220,25 @@ static pthread_mutex_t moduleGIL = PTHREAD_MUTEX_INITIALIZER;
|
|||||||
/* Function pointer type for keyspace event notification subscriptions from modules. */
|
/* Function pointer type for keyspace event notification subscriptions from modules. */
|
||||||
typedef int (*RedisModuleNotificationFunc) (RedisModuleCtx *ctx, int type, const char *event, RedisModuleString *key);
|
typedef int (*RedisModuleNotificationFunc) (RedisModuleCtx *ctx, int type, const char *event, RedisModuleString *key);
|
||||||
|
|
||||||
/* Keyspace notification subscriber information. See RM_SubscribeToKeyspaceEvents */
|
/* Keyspace notification subscriber information.
|
||||||
|
* See RM_SubscribeToKeyspaceEvents() for more information. */
|
||||||
typedef struct RedisModuleKeyspaceSubscriber {
|
typedef struct RedisModuleKeyspaceSubscriber {
|
||||||
/* The module subscribed to the event */
|
/* The module subscribed to the event */
|
||||||
RedisModule *module;
|
RedisModule *module;
|
||||||
/* Notification callback in the module*/
|
/* Notification callback in the module*/
|
||||||
RedisModuleNotificationFunc notify_callback;
|
RedisModuleNotificationFunc notify_callback;
|
||||||
/* A bit mask of the events the module is interested in */
|
/* A bit mask of the events the module is interested in */
|
||||||
int event_mask;
|
int event_mask;
|
||||||
/* Active flag set on entry, to avoid reentrant subscribers calling themselves */
|
/* Active flag set on entry, to avoid reentrant subscribers
|
||||||
int active;
|
* calling themselves */
|
||||||
|
int active;
|
||||||
} RedisModuleKeyspaceSubscriber;
|
} RedisModuleKeyspaceSubscriber;
|
||||||
|
|
||||||
/* The module keyspace notification subscribers list */
|
/* The module keyspace notification subscribers list */
|
||||||
static list *moduleKeyspaceSubscribers;
|
static list *moduleKeyspaceSubscribers;
|
||||||
|
|
||||||
/* Static client recycled for all notification clients, to avoid allocating per round. */
|
/* Static client recycled for all notification clients, to avoid allocating
|
||||||
|
* per round. */
|
||||||
static client *moduleKeyspaceSubscribersClient;
|
static client *moduleKeyspaceSubscribersClient;
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------
|
||||||
@ -3696,18 +3699,18 @@ void moduleReleaseGIL(void) {
|
|||||||
* Module Keyspace Notifications API
|
* Module Keyspace Notifications API
|
||||||
* -------------------------------------------------------------------------- */
|
* -------------------------------------------------------------------------- */
|
||||||
|
|
||||||
/* Subscribe to keyspace notifications. This is a low-level version of the
|
/* Subscribe to keyspace notifications. This is a low-level version of the
|
||||||
* keyspace-notifications API. A module cand register callbacks to be notified
|
* keyspace-notifications API. A module cand register callbacks to be notified
|
||||||
* when keyspce events occur.
|
* when keyspce events occur.
|
||||||
*
|
*
|
||||||
* Notification events are filtered by their type (string events, set events,
|
* Notification events are filtered by their type (string events, set events,
|
||||||
* etc), and the subsriber callback receives only events that match a specific
|
* etc), and the subsriber callback receives only events that match a specific
|
||||||
* mask of event types.
|
* mask of event types.
|
||||||
*
|
*
|
||||||
* When subscribing to notifications with RedisModule_SubscribeToKeyspaceEvents
|
* When subscribing to notifications with RedisModule_SubscribeToKeyspaceEvents
|
||||||
* the module must provide an event type-mask, denoting the events the subscriber
|
* the module must provide an event type-mask, denoting the events the subscriber
|
||||||
* is interested in. This can be an ORed mask of any of the following flags:
|
* is interested in. This can be an ORed mask of any of the following flags:
|
||||||
*
|
*
|
||||||
* - REDISMODULE_NOTIFY_GENERIC: Generic commands like DEL, EXPIRE, RENAME
|
* - REDISMODULE_NOTIFY_GENERIC: Generic commands like DEL, EXPIRE, RENAME
|
||||||
* - REDISMODULE_NOTIFY_STRING: String events
|
* - REDISMODULE_NOTIFY_STRING: String events
|
||||||
* - REDISMODULE_NOTIFY_LIST: List events
|
* - REDISMODULE_NOTIFY_LIST: List events
|
||||||
@ -3718,32 +3721,32 @@ void moduleReleaseGIL(void) {
|
|||||||
* - REDISMODULE_NOTIFY_EVICTED: Eviction events
|
* - REDISMODULE_NOTIFY_EVICTED: Eviction events
|
||||||
* - REDISMODULE_NOTIFY_STREAM: Stream events
|
* - REDISMODULE_NOTIFY_STREAM: Stream events
|
||||||
* - REDISMODULE_NOTIFY_ALL: All events
|
* - REDISMODULE_NOTIFY_ALL: All events
|
||||||
*
|
*
|
||||||
* We do not distinguish between key events and keyspace events, and it is up
|
* We do not distinguish between key events and keyspace events, and it is up
|
||||||
* to the module to filter the actions taken based on the key.
|
* to the module to filter the actions taken based on the key.
|
||||||
*
|
*
|
||||||
* The subscriber signature is:
|
* The subscriber signature is:
|
||||||
*
|
*
|
||||||
* int (*RedisModuleNotificationFunc) (RedisModuleCtx *ctx, int type,
|
* int (*RedisModuleNotificationFunc) (RedisModuleCtx *ctx, int type,
|
||||||
* const char *event,
|
* const char *event,
|
||||||
* RedisModuleString *key);
|
* RedisModuleString *key);
|
||||||
*
|
*
|
||||||
* `type` is the event type bit, that must match the mask given at registration
|
* `type` is the event type bit, that must match the mask given at registration
|
||||||
* time. The event string is the actual command being executed, and key is the
|
* time. The event string is the actual command being executed, and key is the
|
||||||
* relevant Redis key.
|
* relevant Redis key.
|
||||||
*
|
*
|
||||||
* Notification callback gets executed with a redis context that can not be
|
* Notification callback gets executed with a redis context that can not be
|
||||||
* used to send anything to the client, and has the db number where the event
|
* used to send anything to the client, and has the db number where the event
|
||||||
* occured as its selected db number.
|
* occured as its selected db number.
|
||||||
*
|
*
|
||||||
* Notice that it is not necessary to enable norifications in redis.conf for
|
* Notice that it is not necessary to enable norifications in redis.conf for
|
||||||
* module notifications to work.
|
* module notifications to work.
|
||||||
*
|
*
|
||||||
* Warning: the notification callbacks are performed in a synchronous manner,
|
* Warning: the notification callbacks are performed in a synchronous manner,
|
||||||
* so notification callbacks must to be fast, or they would slow Redis down.
|
* so notification callbacks must to be fast, or they would slow Redis down.
|
||||||
* If you need to take long actions, use threads to offload them.
|
* If you need to take long actions, use threads to offload them.
|
||||||
*
|
*
|
||||||
* See https://redis.io/topics/notifications for more information.
|
* See https://redis.io/topics/notifications for more information.
|
||||||
*/
|
*/
|
||||||
int RM_SubscribeToKeyspaceEvents(RedisModuleCtx *ctx, int types, RedisModuleNotificationFunc callback) {
|
int RM_SubscribeToKeyspaceEvents(RedisModuleCtx *ctx, int types, RedisModuleNotificationFunc callback) {
|
||||||
RedisModuleKeyspaceSubscriber *sub = zmalloc(sizeof(*sub));
|
RedisModuleKeyspaceSubscriber *sub = zmalloc(sizeof(*sub));
|
||||||
@ -3754,26 +3757,22 @@ int RM_SubscribeToKeyspaceEvents(RedisModuleCtx *ctx, int types, RedisModuleNoti
|
|||||||
|
|
||||||
listAddNodeTail(moduleKeyspaceSubscribers, sub);
|
listAddNodeTail(moduleKeyspaceSubscribers, sub);
|
||||||
return REDISMODULE_OK;
|
return REDISMODULE_OK;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Dispatcher for keyspace notifications to module subscriber functions.
|
/* Dispatcher for keyspace notifications to module subscriber functions.
|
||||||
* This gets called only if at least one module requested to be notified on
|
* This gets called only if at least one module requested to be notified on
|
||||||
* keyspace notifications */
|
* keyspace notifications */
|
||||||
void moduleNotifyKeyspaceEvent(int type, const char *event, robj *key, int dbid) {
|
void moduleNotifyKeyspaceEvent(int type, const char *event, robj *key, int dbid) {
|
||||||
|
|
||||||
/* Don't do anything if there aren't any subscribers */
|
/* Don't do anything if there aren't any subscribers */
|
||||||
if (listLength(moduleKeyspaceSubscribers) == 0) return;
|
if (listLength(moduleKeyspaceSubscribers) == 0) return;
|
||||||
|
|
||||||
listIter li;
|
listIter li;
|
||||||
listNode *ln;
|
listNode *ln;
|
||||||
|
|
||||||
listRewind(moduleKeyspaceSubscribers,&li);
|
listRewind(moduleKeyspaceSubscribers,&li);
|
||||||
|
|
||||||
/* Remove irrelevant flags from the type mask */
|
/* Remove irrelevant flags from the type mask */
|
||||||
type &= ~(NOTIFY_KEYEVENT | NOTIFY_KEYSPACE);
|
type &= ~(NOTIFY_KEYEVENT | NOTIFY_KEYSPACE);
|
||||||
|
|
||||||
|
|
||||||
while((ln = listNext(&li))) {
|
while((ln = listNext(&li))) {
|
||||||
RedisModuleKeyspaceSubscriber *sub = ln->value;
|
RedisModuleKeyspaceSubscriber *sub = ln->value;
|
||||||
/* Only notify subscribers on events matching they registration,
|
/* Only notify subscribers on events matching they registration,
|
||||||
@ -3784,7 +3783,7 @@ void moduleNotifyKeyspaceEvent(int type, const char *event, robj *key, int dbid)
|
|||||||
ctx.client = moduleKeyspaceSubscribersClient;
|
ctx.client = moduleKeyspaceSubscribersClient;
|
||||||
selectDb(ctx.client, dbid);
|
selectDb(ctx.client, dbid);
|
||||||
|
|
||||||
/* mark the handler as activer to avoid reentrant loops.
|
/* mark the handler as activer to avoid reentrant loops.
|
||||||
* If the subscriber performs an action triggering itself,
|
* If the subscriber performs an action triggering itself,
|
||||||
* it will not be notified about it. */
|
* it will not be notified about it. */
|
||||||
sub->active = 1;
|
sub->active = 1;
|
||||||
@ -3793,7 +3792,6 @@ void moduleNotifyKeyspaceEvent(int type, const char *event, robj *key, int dbid)
|
|||||||
moduleFreeContext(&ctx);
|
moduleFreeContext(&ctx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Unsubscribe any notification subscirbers this module has upon unloading */
|
/* Unsubscribe any notification subscirbers this module has upon unloading */
|
||||||
@ -3810,7 +3808,6 @@ void moduleUnsubscribeNotifications(RedisModule *module) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------
|
/* --------------------------------------------------------------------------
|
||||||
* Modules API internals
|
* Modules API internals
|
||||||
* -------------------------------------------------------------------------- */
|
* -------------------------------------------------------------------------- */
|
||||||
@ -3848,10 +3845,9 @@ void moduleRegisterCoreAPI(void);
|
|||||||
|
|
||||||
void moduleInitModulesSystem(void) {
|
void moduleInitModulesSystem(void) {
|
||||||
moduleUnblockedClients = listCreate();
|
moduleUnblockedClients = listCreate();
|
||||||
|
|
||||||
server.loadmodule_queue = listCreate();
|
server.loadmodule_queue = listCreate();
|
||||||
modules = dictCreate(&modulesDictType,NULL);
|
modules = dictCreate(&modulesDictType,NULL);
|
||||||
|
|
||||||
/* Set up the keyspace notification susbscriber list and static client */
|
/* Set up the keyspace notification susbscriber list and static client */
|
||||||
moduleKeyspaceSubscribers = listCreate();
|
moduleKeyspaceSubscribers = listCreate();
|
||||||
moduleKeyspaceSubscribersClient = createClient(-1);
|
moduleKeyspaceSubscribersClient = createClient(-1);
|
||||||
@ -3907,7 +3903,6 @@ void moduleFreeModuleStructure(struct RedisModule *module) {
|
|||||||
zfree(module);
|
zfree(module);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void moduleUnregisterCommands(struct RedisModule *module) {
|
void moduleUnregisterCommands(struct RedisModule *module) {
|
||||||
/* Unregister all the commands registered by this module. */
|
/* Unregister all the commands registered by this module. */
|
||||||
dictIterator *di = dictGetSafeIterator(server.commands);
|
dictIterator *di = dictGetSafeIterator(server.commands);
|
||||||
|
Loading…
Reference in New Issue
Block a user