Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
ada20655
Unverified
Commit
ada20655
authored
Nov 23, 2017
by
Salvatore Sanfilippo
Committed by
GitHub
Nov 23, 2017
Browse files
Merge pull request #4467 from yossigo/fix-nested-multi
Nested MULTI/EXEC may replicate in different cases.
parents
57bd8feb
2c70d282
Changes
2
Hide whitespace changes
Inline
Side-by-side
src/module.c
View file @
ada20655
...
...
@@ -1164,6 +1164,8 @@ int RM_ReplyWithDouble(RedisModuleCtx *ctx, double d) {
* in the context of a command execution. EXEC will be handled by the
* RedisModuleCommandDispatcher() function. */
void
moduleReplicateMultiIfNeeded
(
RedisModuleCtx
*
ctx
)
{
/* Skip this if client explicitly wrap the command with MULTI */
if
(
ctx
->
client
->
flags
&
CLIENT_MULTI
)
return
;
/* If we already emitted MULTI return ASAP. */
if
(
ctx
->
flags
&
REDISMODULE_CTX_MULTI_EMITTED
)
return
;
/* If this is a thread safe context, we do not want to wrap commands
...
...
src/scripting.c
View file @
ada20655
...
...
@@ -358,6 +358,13 @@ int luaRedisGenericCommand(lua_State *lua, int raise_error) {
static
size_t
cached_objects_len
[
LUA_CMD_OBJCACHE_SIZE
];
static
int
inuse
=
0
;
/* Recursive calls detection. */
/* Reflect MULTI state */
if
(
server
.
lua_multi_emitted
||
(
server
.
lua_caller
->
flags
&
CLIENT_MULTI
))
{
c
->
flags
|=
CLIENT_MULTI
;
}
else
{
c
->
flags
&=
~
CLIENT_MULTI
;
}
/* By using Lua debug hooks it is possible to trigger a recursive call
* to luaRedisGenericCommand(), which normally should never happen.
* To make this function reentrant is futile and makes it slower, but
...
...
@@ -535,6 +542,7 @@ int luaRedisGenericCommand(lua_State *lua, int raise_error) {
* a Lua script in the context of AOF and slaves. */
if
(
server
.
lua_replicate_commands
&&
!
server
.
lua_multi_emitted
&&
!
(
server
.
lua_caller
->
flags
&
CLIENT_MULTI
)
&&
server
.
lua_write_dirty
&&
server
.
lua_repl
!=
PROPAGATE_NONE
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment