提交 aaaff8bd 编写于 作者: D Dvir Volk 提交者: antirez

Remove the NOTIFY_MODULE flag and simplify the module notification flow if there aren't subscribers

上级 0be51b8f
......@@ -3748,8 +3748,6 @@ int RM_SubscribeToKeyspaceEvents(RedisModuleCtx *ctx, int types, RedisModuleNoti
sub->notify_callback = callback;
sub->active = 0;
/* Let the notification system know that modules are interested in notifications */
server.notify_keyspace_events |= NOTIFY_MODULE;
listAddNodeTail(moduleKeyspaceSubscribers, sub);
return REDISMODULE_OK;
......@@ -3759,6 +3757,10 @@ int RM_SubscribeToKeyspaceEvents(RedisModuleCtx *ctx, int types, RedisModuleNoti
* This gets called only if at least one module requested to be notified on
* keyspace notifications */
void moduleNotifyKeyspaceEvent(int type, const char *event, robj *key, int dbid) {
/* Don't do anything if there aren't any subscribers */
if (listLength(moduleKeyspaceSubscribers) == 0) return;
listIter li;
listNode *ln;
......@@ -3805,10 +3807,6 @@ void moduleUnsubscribeNotifications(RedisModule *module) {
zfree(sub);
}
}
/* If no subscribers are left - do not call the module norification function */
if (listLength(moduleKeyspaceSubscribers) == 0) {
server.notify_keyspace_events &= ~NOTIFY_MODULE;
}
}
......
......@@ -102,8 +102,7 @@ void notifyKeyspaceEvent(int type, char *event, robj *key, int dbid) {
* This bypasses the notifications configuration, but the module engine
* will only call event subscribers if the event type matches the types
* they are interested in. */
if (server.notify_keyspace_events & NOTIFY_MODULE)
moduleNotifyKeyspaceEvent(type, event, key, dbid);
moduleNotifyKeyspaceEvent(type, event, key, dbid);
/* If notifications for this class of events are off, return ASAP. */
if (!(server.notify_keyspace_events & type)) return;
......
......@@ -425,7 +425,6 @@ typedef long long mstime_t; /* millisecond time type. */
#define NOTIFY_ZSET (1<<7) /* z */
#define NOTIFY_EXPIRED (1<<8) /* x */
#define NOTIFY_EVICTED (1<<9) /* e */
#define NOTIFY_MODULE (1<<11) /* modules are interested in notifications */
#define NOTIFY_ALL (NOTIFY_GENERIC | NOTIFY_STRING | NOTIFY_LIST | NOTIFY_SET | NOTIFY_HASH | NOTIFY_ZSET | NOTIFY_EXPIRED | NOTIFY_EVICTED) /* A flag */
/* Get the first bind addr or NULL */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册