Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xindoo
redis
提交
d5194daf
R
redis
项目概览
xindoo
/
redis
通知
2
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
redis
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
d5194daf
编写于
3月 18, 2019
作者:
Y
Yossi Gottlieb
提交者:
antirez
5月 13, 2019
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
CommandFilter API: hellofilter and tests.
上级
8897c154
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
47 addition
and
5 deletion
+47
-5
src/modules/hellofilter.c
src/modules/hellofilter.c
+28
-4
tests/modules/commandfilter.tcl
tests/modules/commandfilter.tcl
+19
-1
未找到文件。
src/modules/hellofilter.c
浏览文件 @
d5194daf
...
...
@@ -6,17 +6,32 @@
static
RedisModuleString
*
log_key_name
;
static
const
char
log_command_name
[]
=
"hellofilter.log"
;
static
const
char
ping_command_name
[]
=
"hellofilter.ping"
;
static
int
in_module
=
0
;
int
HelloFilter_PingCommand
(
RedisModuleCtx
*
ctx
,
RedisModuleString
**
argv
,
int
argc
)
{
RedisModuleCallReply
*
reply
=
RedisModule_Call
(
ctx
,
"ping"
,
"c"
,
"@log"
);
if
(
reply
)
{
RedisModule_ReplyWithCallReply
(
ctx
,
reply
);
RedisModule_FreeCallReply
(
reply
);
}
else
{
RedisModule_ReplyWithSimpleString
(
ctx
,
"Unknown command or invalid arguments"
);
}
return
REDISMODULE_OK
;
}
int
HelloFilter_LogCommand
(
RedisModuleCtx
*
ctx
,
RedisModuleString
**
argv
,
int
argc
)
{
RedisModuleString
*
s
=
RedisModule_CreateString
FromString
(
ctx
,
argv
[
0
]
);
RedisModuleString
*
s
=
RedisModule_CreateString
(
ctx
,
""
,
0
);
int
i
;
for
(
i
=
1
;
i
<
argc
;
i
++
)
{
size_t
arglen
;
const
char
*
arg
=
RedisModule_StringPtrLen
(
argv
[
i
],
&
arglen
);
RedisModule_StringAppendBuffer
(
ctx
,
s
,
" "
,
1
);
if
(
i
>
1
)
RedisModule_StringAppendBuffer
(
ctx
,
s
,
" "
,
1
);
RedisModule_StringAppendBuffer
(
ctx
,
s
,
arg
,
arglen
);
}
...
...
@@ -25,6 +40,8 @@ int HelloFilter_LogCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int ar
RedisModule_CloseKey
(
log
);
RedisModule_FreeString
(
ctx
,
s
);
in_module
=
1
;
size_t
cmdlen
;
const
char
*
cmdname
=
RedisModule_StringPtrLen
(
argv
[
1
],
&
cmdlen
);
RedisModuleCallReply
*
reply
=
RedisModule_Call
(
ctx
,
cmdname
,
"v"
,
&
argv
[
2
],
argc
-
2
);
...
...
@@ -34,12 +51,15 @@ int HelloFilter_LogCommand(RedisModuleCtx *ctx, RedisModuleString **argv, int ar
}
else
{
RedisModule_ReplyWithSimpleString
(
ctx
,
"Unknown command or invalid arguments"
);
}
in_module
=
0
;
return
REDISMODULE_OK
;
}
void
HelloFilter_CommandFilter
(
RedisModuleC
tx
*
ctx
,
RedisModuleC
ommandFilterCtx
*
filter
)
void
HelloFilter_CommandFilter
(
RedisModuleCommandFilterCtx
*
filter
)
{
(
void
)
ctx
;
if
(
in_module
)
return
;
/* don't process our own RM_Call() */
/* Fun manipulations:
* - Remove @delme
...
...
@@ -94,6 +114,10 @@ int RedisModule_OnLoad(RedisModuleCtx *ctx, RedisModuleString **argv, int argc)
HelloFilter_LogCommand
,
"write deny-oom"
,
1
,
1
,
1
)
==
REDISMODULE_ERR
)
return
REDISMODULE_ERR
;
if
(
RedisModule_CreateCommand
(
ctx
,
ping_command_name
,
HelloFilter_PingCommand
,
"write deny-oom"
,
1
,
1
,
1
)
==
REDISMODULE_ERR
)
return
REDISMODULE_ERR
;
if
(
RedisModule_RegisterCommandFilter
(
ctx
,
HelloFilter_CommandFilter
)
==
REDISMODULE_ERR
)
return
REDISMODULE_ERR
;
...
...
tests/modules/commandfilter.tcl
浏览文件 @
d5194daf
...
...
@@ -6,7 +6,7 @@ start_server {tags {"modules"}} {
test
{
Command Filter handles redirected commands
}
{
r set mykey @log
r lrange log-key 0 -1
}
"{
hellofilter.log
set mykey @log}"
}
"{set mykey @log}"
test
{
Command Filter can call RedisModule_CommandFilterArgDelete
}
{
r rpush mylist elem1 @delme elem2
...
...
@@ -24,4 +24,22 @@ start_server {tags {"modules"}} {
r rpush mylist elem1 @replaceme elem2
r lrange mylist 0 -1
}
{
elem1 --replaced-- elem2
}
test
{
Command Filter applies on RM_Call
()
commands
}
{
r del log-key
r hellofilter.ping
r lrange log-key 0 -1
}
"{ping @log}"
test
{
Command Filter applies on Lua redis.call
()}
{
r del log-key
r eval
"redis.call('ping', '@log')"
0
r lrange log-key 0 -1
}
"{ping @log}"
test
{
Command Filter applies on Lua redis.call
()
that calls a module
}
{
r del log-key
r eval
"redis.call('hellofilter.ping')"
0
r lrange log-key 0 -1
}
"{ping @log}"
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录