mirror of https://mirror.osredm.com/root/redis.git
add check good slaves to write when execute script (#10249)
There was no check min-slave-* config when evaluating Lua script.
Add check enough good slaves for write command when evaluating scripts.
Co-authored-by: Phuc. Vo Trong <phucvt@vng.com.vn>
(cherry picked from commit 34505d26f7
)
This commit is contained in:
parent
5895d119b1
commit
2adbbbcdc0
|
@ -676,6 +676,13 @@ int luaRedisGenericCommand(lua_State *lua, int raise_error) {
|
|||
sdsfree(aof_write_err);
|
||||
}
|
||||
goto cleanup;
|
||||
} else if (server.masterhost == NULL &&
|
||||
server.repl_min_slaves_max_lag &&
|
||||
server.repl_min_slaves_to_write &&
|
||||
server.repl_good_slaves_count < server.repl_min_slaves_to_write)
|
||||
{
|
||||
luaPushError(lua, shared.noreplicaserr->ptr);
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -65,26 +65,37 @@ start_server {tags {"repl"}} {
|
|||
test {With min-slaves-to-write (1,3): master should be writable} {
|
||||
$master config set min-slaves-max-lag 3
|
||||
$master config set min-slaves-to-write 1
|
||||
$master set foo bar
|
||||
} {OK}
|
||||
assert_equal OK [$master set foo 123]
|
||||
assert_equal OK [$master eval "return redis.call('set','foo',12345)" 0]
|
||||
}
|
||||
|
||||
test {With min-slaves-to-write (2,3): master should not be writable} {
|
||||
$master config set min-slaves-max-lag 3
|
||||
$master config set min-slaves-to-write 2
|
||||
catch {$master set foo bar} e
|
||||
set e
|
||||
} {NOREPLICAS*}
|
||||
assert_error "*NOREPLICAS*" {$master set foo bar}
|
||||
assert_error "*NOREPLICAS*" {$master eval "redis.call('set','foo','bar')" 0}
|
||||
}
|
||||
|
||||
test {With not enough good slaves, read in Lua script is still accepted} {
|
||||
$master config set min-slaves-max-lag 3
|
||||
$master config set min-slaves-to-write 1
|
||||
$master eval "redis.call('set','foo','bar')" 0
|
||||
|
||||
$master config set min-slaves-to-write 2
|
||||
$master eval "return redis.call('get','foo')" 0
|
||||
} {bar}
|
||||
|
||||
test {With min-slaves-to-write: master not writable with lagged slave} {
|
||||
$master config set min-slaves-max-lag 2
|
||||
$master config set min-slaves-to-write 1
|
||||
assert {[$master set foo bar] eq {OK}}
|
||||
assert_equal OK [$master set foo 123]
|
||||
assert_equal OK [$master eval "return redis.call('set','foo',12345)" 0]
|
||||
$slave deferred 1
|
||||
$slave debug sleep 6
|
||||
after 4000
|
||||
catch {$master set foo bar} e
|
||||
set e
|
||||
} {NOREPLICAS*}
|
||||
assert_error "*NOREPLICAS*" {$master set foo 123}
|
||||
assert_error "*NOREPLICAS*" {$master eval "return redis.call('set','foo',12345)" 0}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue