Merge pull request #6797 from patpatbear/issue_#6565_memory_borderline
Check OOM at script start to get stable lua OOM state.
This commit is contained in:
commit
af5c11874c
@ -657,13 +657,12 @@ int luaRedisGenericCommand(lua_State *lua, int raise_error) {
|
|||||||
!server.loading && /* Don't care about mem if loading. */
|
!server.loading && /* Don't care about mem if loading. */
|
||||||
!server.masterhost && /* Slave must execute the script. */
|
!server.masterhost && /* Slave must execute the script. */
|
||||||
server.lua_write_dirty == 0 && /* Script had no side effects so far. */
|
server.lua_write_dirty == 0 && /* Script had no side effects so far. */
|
||||||
|
server.lua_oom && /* Detected OOM when script start. */
|
||||||
(cmd->flags & CMD_DENYOOM))
|
(cmd->flags & CMD_DENYOOM))
|
||||||
{
|
{
|
||||||
if (getMaxmemoryState(NULL,NULL,NULL,NULL) != C_OK) {
|
|
||||||
luaPushError(lua, shared.oomerr->ptr);
|
luaPushError(lua, shared.oomerr->ptr);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (cmd->flags & CMD_RANDOM) server.lua_random_dirty = 1;
|
if (cmd->flags & CMD_RANDOM) server.lua_random_dirty = 1;
|
||||||
if (cmd->flags & CMD_WRITE) server.lua_write_dirty = 1;
|
if (cmd->flags & CMD_WRITE) server.lua_write_dirty = 1;
|
||||||
|
@ -3441,6 +3441,13 @@ int processCommand(client *c) {
|
|||||||
addReply(c, shared.oomerr);
|
addReply(c, shared.oomerr);
|
||||||
return C_OK;
|
return C_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Save out_of_memory result at script start, otherwise if we check OOM
|
||||||
|
* untill first write within script, memory used by lua stack and
|
||||||
|
* arguments might interfere. */
|
||||||
|
if (c->cmd->proc == evalCommand || c->cmd->proc == evalShaCommand) {
|
||||||
|
server.lua_oom = out_of_memory;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Make sure to use a reasonable amount of memory for client side
|
/* Make sure to use a reasonable amount of memory for client side
|
||||||
|
@ -1392,6 +1392,7 @@ struct redisServer {
|
|||||||
execution. */
|
execution. */
|
||||||
int lua_kill; /* Kill the script if true. */
|
int lua_kill; /* Kill the script if true. */
|
||||||
int lua_always_replicate_commands; /* Default replication type. */
|
int lua_always_replicate_commands; /* Default replication type. */
|
||||||
|
int lua_oom; /* OOM detected when script start? */
|
||||||
/* Lazy free */
|
/* Lazy free */
|
||||||
int lazyfree_lazy_eviction;
|
int lazyfree_lazy_eviction;
|
||||||
int lazyfree_lazy_expire;
|
int lazyfree_lazy_expire;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user