From 3aab12414f27685bf8e9dc9fd4693c8c9ecf9ccb Mon Sep 17 00:00:00 2001 From: Dvir Volk Date: Thu, 7 Dec 2017 16:55:46 +0200 Subject: [PATCH] Remove the NOTIFY_MODULE flag and simplify the module notification flow if there aren't subscribers --- src/module.c | 10 ++++------ src/notify.c | 3 +-- src/server.h | 1 - 3 files changed, 5 insertions(+), 9 deletions(-) diff --git a/src/module.c b/src/module.c index deb2b5055..e2c878ea5 100644 --- a/src/module.c +++ b/src/module.c @@ -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; - } } diff --git a/src/notify.c b/src/notify.c index 23789804f..3473a125e 100644 --- a/src/notify.c +++ b/src/notify.c @@ -104,8 +104,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; diff --git a/src/server.h b/src/server.h index f4cb7cde3..5b6074a8c 100644 --- a/src/server.h +++ b/src/server.h @@ -429,7 +429,6 @@ typedef long long mstime_t; /* millisecond time type. */ #define NOTIFY_EXPIRED (1<<8) /* x */ #define NOTIFY_EVICTED (1<<9) /* e */ #define NOTIFY_STREAM (1<<10) /* t */ -#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 | NOTIFY_STREAM) /* A flag */ /* Get the first bind addr or NULL */