summaryrefslogtreecommitdiff
path: root/src/aof.c
diff options
context:
space:
mode:
authorOran Agra <oran@redislabs.com>2023-02-16 08:07:35 +0200
committerGitHub <noreply@github.com>2023-02-16 08:07:35 +0200
commit233abbbe03211ca700e10f827d289da24d9bd7e3 (patch)
tree8c258ab7e81d883efb7b684ef8841bd70f705e9e /src/aof.c
parenta35e08370ac467736328ee5ceed1292cbb2e05db (diff)
downloadredis-233abbbe03211ca700e10f827d289da24d9bd7e3.tar.gz
Cleanup around script_caller, fix tracking of scripts and ACL logging for RM_Call (#11770)
* Make it clear that current_client is the root client that was called by external connection * add executing_client which is the client that runs the current command (can be a module or a script) * Remove script_caller that was used for commands that have CLIENT_SCRIPT to get the client that called the script. in most cases, that's the current_client, and in others (when being called from a module), it could be an intermediate client when we actually want the original one used by the external connection. bugfixes: * RM_Call with C flag should log ACL errors with the requested user rather than the one used by the original client, this also solves a crash when RM_Call is used with C flag from a detached thread safe context. * addACLLogEntry would have logged info about the script_caller, but in case the script was issued by a module command we actually want the current_client. the exception is when RM_Call is called from a timer event, in which case we don't have a current_client. behavior changes: * client side tracking for scripts now tracks the keys that are read by the script instead of the keys that are declared by the caller for EVAL other changes: * Log both current_client and executing_client in the crash log. * remove prepareLuaClient and resetLuaClient, being dead code that was forgotten. * remove scriptTimeSnapshot and snapshot_time and instead add cmd_time_snapshot that serves all commands and is reset only when execution nesting starts. * remove code to propagate CLIENT_FORCE_REPL from the executed command to the script caller since scripts aren't propagated anyway these days and anyway this flag wouldn't have had an effect since CLIENT_PREVENT_PROP is added by scriptResetRun. * fix a module GIL violation issue in afterSleep that was introduced in #10300 (unreleased)
Diffstat (limited to 'src/aof.c')
-rw-r--r--src/aof.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/aof.c b/src/aof.c
index 77ffe70ad..7c8955e0e 100644
--- a/src/aof.c
+++ b/src/aof.c
@@ -1413,8 +1413,10 @@ int loadSingleAppendOnlyFile(char *filename) {
* to the same file we're about to read. */
server.aof_state = AOF_OFF;
- client *old_client = server.current_client;
- fakeClient = server.current_client = createAOFClient();
+ client *old_cur_client = server.current_client;
+ client *old_exec_client = server.executing_client;
+ fakeClient = createAOFClient();
+ server.current_client = server.executing_client = fakeClient;
/* Check if the AOF file is in RDB format (it may be RDB encoded base AOF
* or old style RDB-preamble AOF). In that case we need to load the RDB file
@@ -1622,7 +1624,8 @@ fmterr: /* Format error. */
cleanup:
if (fakeClient) freeClient(fakeClient);
- server.current_client = old_client;
+ server.current_client = old_cur_client;
+ server.executing_client = old_exec_client;
fclose(fp);
sdsfree(aof_filepath);
return ret;