summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYossi Gottlieb <yossigo@gmail.com>2019-06-06 20:08:26 +0300
committerYossi Gottlieb <yossigo@gmail.com>2019-12-23 19:43:51 +0200
commit0c898bdb07e7d5716db7a3b311a1d7586ffbdca0 (patch)
treeaddb6ea45141ae6dcd187bb113c7eeec3231960d
parent324e22accf457edc996971bc97f5474349cd7c4c (diff)
downloadredis-0c898bdb07e7d5716db7a3b311a1d7586ffbdca0.tar.gz
Add REDISMODULE_CTX_FLAGS_MULTI_DIRTY.
-rw-r--r--src/module.c6
-rw-r--r--src/redismodule.h2
2 files changed, 8 insertions, 0 deletions
diff --git a/src/module.c b/src/module.c
index 705ffec2c..965bb4460 100644
--- a/src/module.c
+++ b/src/module.c
@@ -1842,6 +1842,12 @@ int RM_GetContextFlags(RedisModuleCtx *ctx) {
flags |= REDISMODULE_CTX_FLAGS_REPLICATED;
}
+ /* For DIRTY flags, we need the blocked client if used */
+ client *c = ctx->blocked_client ? ctx->blocked_client->client : ctx->client;
+ if (c && (c->flags & (CLIENT_DIRTY_CAS|CLIENT_DIRTY_EXEC))) {
+ flags |= REDISMODULE_CTX_FLAGS_MULTI_DIRTY;
+ }
+
if (server.cluster_enabled)
flags |= REDISMODULE_CTX_FLAGS_CLUSTER;
diff --git a/src/redismodule.h b/src/redismodule.h
index 57f98fb93..637078f2b 100644
--- a/src/redismodule.h
+++ b/src/redismodule.h
@@ -110,6 +110,8 @@
#define REDISMODULE_CTX_FLAGS_REPLICA_IS_ONLINE (1<<17)
/* There is currently some background process active. */
#define REDISMODULE_CTX_FLAGS_ACTIVE_CHILD (1<<18)
+/* The next EXEC will fail due to dirty CAS (touched keys). */
+#define REDISMODULE_CTX_FLAGS_MULTI_DIRTY (1<<19)
/* Keyspace changes notification classes. Every class is associated with a
* character for configuration purposes.