mirror of
https://github.com/fluencelabs/redis
synced 2025-04-26 19:12:14 +00:00
CommandFilter API: Support Lua and RM_call() flows.
This commit is contained in:
parent
2a5aeef79f
commit
325fc1cb2e
20
src/module.c
20
src/module.c
@ -2741,12 +2741,6 @@ RedisModuleCallReply *RM_Call(RedisModuleCtx *ctx, const char *cmdname, const ch
|
|||||||
RedisModuleCallReply *reply = NULL;
|
RedisModuleCallReply *reply = NULL;
|
||||||
int replicate = 0; /* Replicate this command? */
|
int replicate = 0; /* Replicate this command? */
|
||||||
|
|
||||||
cmd = lookupCommandByCString((char*)cmdname);
|
|
||||||
if (!cmd) {
|
|
||||||
errno = EINVAL;
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Create the client and dispatch the command. */
|
/* Create the client and dispatch the command. */
|
||||||
va_start(ap, fmt);
|
va_start(ap, fmt);
|
||||||
c = createClient(-1);
|
c = createClient(-1);
|
||||||
@ -2760,11 +2754,23 @@ RedisModuleCallReply *RM_Call(RedisModuleCtx *ctx, const char *cmdname, const ch
|
|||||||
c->db = ctx->client->db;
|
c->db = ctx->client->db;
|
||||||
c->argv = argv;
|
c->argv = argv;
|
||||||
c->argc = argc;
|
c->argc = argc;
|
||||||
c->cmd = c->lastcmd = cmd;
|
|
||||||
/* We handle the above format error only when the client is setup so that
|
/* We handle the above format error only when the client is setup so that
|
||||||
* we can free it normally. */
|
* we can free it normally. */
|
||||||
if (argv == NULL) goto cleanup;
|
if (argv == NULL) goto cleanup;
|
||||||
|
|
||||||
|
/* Call command filters */
|
||||||
|
moduleCallCommandFilters(c);
|
||||||
|
|
||||||
|
/* Lookup command now, after filters had a chance to make modifications
|
||||||
|
* if necessary.
|
||||||
|
*/
|
||||||
|
cmd = lookupCommand(c->argv[0]->ptr);
|
||||||
|
if (!cmd) {
|
||||||
|
errno = EINVAL;
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
c->cmd = c->lastcmd = cmd;
|
||||||
|
|
||||||
/* Basic arity checks. */
|
/* Basic arity checks. */
|
||||||
if ((cmd->arity > 0 && cmd->arity != argc) || (argc < -cmd->arity)) {
|
if ((cmd->arity > 0 && cmd->arity != argc) || (argc < -cmd->arity)) {
|
||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
|
@ -462,6 +462,11 @@ int luaRedisGenericCommand(lua_State *lua, int raise_error) {
|
|||||||
c->argc = argc;
|
c->argc = argc;
|
||||||
c->user = server.lua_caller->user;
|
c->user = server.lua_caller->user;
|
||||||
|
|
||||||
|
/* Process module hooks */
|
||||||
|
moduleCallCommandFilters(c);
|
||||||
|
argv = c->argv;
|
||||||
|
argc = c->argc;
|
||||||
|
|
||||||
/* Log the command if debugging is active. */
|
/* Log the command if debugging is active. */
|
||||||
if (ldb.active && ldb.step) {
|
if (ldb.active && ldb.step) {
|
||||||
sds cmdlog = sdsnew("<redis>");
|
sds cmdlog = sdsnew("<redis>");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user