summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDvir Volk <dvirsky@gmail.com>2017-12-07 16:55:46 +0200
committerDvir Volk <dvirsky@gmail.com>2018-02-14 21:40:10 +0200
commit3aab12414f27685bf8e9dc9fd4693c8c9ecf9ccb (patch)
treea185dbdc7309e85a73fed7ced399b918a8b1e4f9
parenta8e2e99a88968a22cdbfdac404a812e80b5dd0d7 (diff)
downloadredis-3aab12414f27685bf8e9dc9fd4693c8c9ecf9ccb.tar.gz
Remove the NOTIFY_MODULE flag and simplify the module notification flow if there aren't subscribers
-rw-r--r--src/module.c10
-rw-r--r--src/notify.c3
-rw-r--r--src/server.h1
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 */