diff options
author | Oran Agra <oran@redislabs.com> | 2023-02-16 08:07:35 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-16 08:07:35 +0200 |
commit | 233abbbe03211ca700e10f827d289da24d9bd7e3 (patch) | |
tree | 8c258ab7e81d883efb7b684ef8841bd70f705e9e /src/script.c | |
parent | a35e08370ac467736328ee5ceed1292cbb2e05db (diff) | |
download | redis-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/script.c')
-rw-r--r-- | src/script.c | 10 |
1 files changed, 0 insertions, 10 deletions
diff --git a/src/script.c b/src/script.c index fd47e390e..f7b70bcae 100644 --- a/src/script.c +++ b/src/script.c @@ -212,7 +212,6 @@ int scriptPrepareForRun(scriptRunCtx *run_ctx, client *engine_client, client *ca client *script_client = run_ctx->c; client *curr_client = run_ctx->original_client; - server.script_caller = curr_client; /* Select the right DB in the context of the Lua client */ selectDb(script_client, curr_client->db->id); @@ -224,7 +223,6 @@ int scriptPrepareForRun(scriptRunCtx *run_ctx, client *engine_client, client *ca } run_ctx->start_time = getMonotonicUs(); - run_ctx->snapshot_time = mstime(); run_ctx->flags = 0; run_ctx->repl_flags = PROPAGATE_AOF | PROPAGATE_REPL; @@ -257,8 +255,6 @@ void scriptResetRun(scriptRunCtx *run_ctx) { /* After the script done, remove the MULTI state. */ run_ctx->c->flags &= ~CLIENT_MULTI; - server.script_caller = NULL; - if (scriptIsTimedout()) { exitScriptTimedoutMode(run_ctx); /* Restore the client that was protected when the script timeout @@ -575,12 +571,6 @@ error: incrCommandStatsOnError(cmd, ERROR_COMMAND_REJECTED); } -/* Returns the time when the script invocation started */ -mstime_t scriptTimeSnapshot() { - serverAssert(curr_run_ctx); - return curr_run_ctx->snapshot_time; -} - long long scriptRunDuration() { serverAssert(scriptIsRunning()); return elapsedMs(curr_run_ctx->start_time); |