diff --git a/src/functions.c b/src/functions.c index f51aa62d0..a91c60ddb 100644 --- a/src/functions.c +++ b/src/functions.c @@ -616,6 +616,9 @@ uint64_t fcallGetCommandFlags(client *c, uint64_t cmd_flags) { } static void fcallCommandGeneric(client *c, int ro) { + /* Functions need to be fed to monitors before the commands they execute. */ + replicationFeedMonitors(c,server.monitors,c->db->id,c->argv,c->argc); + robj *function_name = c->argv[1]; functionInfo *fi = dictFetchValue(curr_functions_lib_ctx->functions, function_name->ptr); if (!fi) { diff --git a/tests/unit/introspection.tcl b/tests/unit/introspection.tcl index 1e994ab5a..aceec3cca 100644 --- a/tests/unit/introspection.tcl +++ b/tests/unit/introspection.tcl @@ -115,6 +115,19 @@ start_server {tags {"introspection"}} { $rd close } + test {MONITOR can log commands issued by functions} { + r function load replace {#!lua name=test + redis.register_function('test', function() return redis.call('set', 'foo', 'bar') end) + } + set rd [redis_deferring_client] + $rd monitor + $rd read ;# Discard the OK + r fcall test 0 + assert_match {*fcall*test*} [$rd read] + assert_match {*lua*"set"*"foo"*"bar"*} [$rd read] + $rd close + } + test {MONITOR supports redacting command arguments} { set rd [redis_deferring_client] $rd monitor