Unverified Commit af5c1187 authored by Salvatore Sanfilippo's avatar Salvatore Sanfilippo Committed by GitHub
Browse files

Merge pull request #6797 from patpatbear/issue_#6565_memory_borderline

Check OOM at script start to get stable lua OOM state.
parents 4bc4d2c7 38f6207f
...@@ -657,12 +657,11 @@ int luaRedisGenericCommand(lua_State *lua, int raise_error) { ...@@ -657,12 +657,11 @@ 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;
......
...@@ -3441,6 +3441,13 @@ int processCommand(client *c) { ...@@ -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 { ...@@ -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;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment