Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xindoo
redis
提交
192361b5
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 搜索 >>
提交
192361b5
编写于
3月 30, 2018
作者:
A
antirez
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Modules Cluster API: node API exported, example improved.
上级
16178b69
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
42 addition
and
3 deletion
+42
-3
src/module.c
src/module.c
+6
-1
src/modules/hellocluster.c
src/modules/hellocluster.c
+30
-2
src/redismodule.h
src/redismodule.h
+6
-0
未找到文件。
src/module.c
浏览文件 @
192361b5
...
...
@@ -3983,7 +3983,9 @@ void RM_FreeClusterNodesList(char **ids) {
clusterNode
*
clusterLookupNode
(
const
char
*
name
);
/* We need access to internals */
int
RM_GetClusterNodeInfo
(
const
char
*
id
,
char
*
ip
,
char
*
master_id
,
int
*
port
,
int
*
flags
)
{
int
RM_GetClusterNodeInfo
(
RedisModuleCtx
*
ctx
,
const
char
*
id
,
char
*
ip
,
char
*
master_id
,
int
*
port
,
int
*
flags
)
{
UNUSED
(
ctx
);
clusterNode
*
node
=
clusterLookupNode
(
id
);
if
(
node
->
flags
&
(
CLUSTER_NODE_NOADDR
|
CLUSTER_NODE_HANDSHAKE
))
return
REDISMODULE_ERR
;
...
...
@@ -4396,4 +4398,7 @@ void moduleRegisterCoreAPI(void) {
REGISTER_API
(
SubscribeToKeyspaceEvents
);
REGISTER_API
(
RegisterClusterMessageReceiver
);
REGISTER_API
(
SendClusterMessage
);
REGISTER_API
(
GetClusterNodeInfo
);
REGISTER_API
(
GetClusterNodesList
);
REGISTER_API
(
FreeClusterNodesList
);
}
src/modules/hellocluster.c
浏览文件 @
192361b5
...
...
@@ -39,6 +39,7 @@
#define MSGTYPE_PING 1
#define MSGTYPE_PONG 2
/* HELLOCLUSTER.PINGALL */
int
PingallCommand_RedisCommand
(
RedisModuleCtx
*
ctx
,
RedisModuleString
**
argv
,
int
argc
)
{
REDISMODULE_NOT_USED
(
argv
);
REDISMODULE_NOT_USED
(
argc
);
...
...
@@ -47,15 +48,38 @@ int PingallCommand_RedisCommand(RedisModuleCtx *ctx, RedisModuleString **argv, i
return
RedisModule_ReplyWithSimpleString
(
ctx
,
"OK"
);
}
/* HELLOCLUSTER.LIST */
int
ListCommand_RedisCommand
(
RedisModuleCtx
*
ctx
,
RedisModuleString
**
argv
,
int
argc
)
{
REDISMODULE_NOT_USED
(
argv
);
REDISMODULE_NOT_USED
(
argc
);
size_t
numnodes
;
char
**
ids
=
RedisModule_GetClusterNodesList
(
ctx
,
&
numnodes
);
if
(
ids
==
NULL
)
{
return
RedisModule_ReplyWithError
(
ctx
,
"Cluster not enabled"
);
}
RedisModule_ReplyWithArray
(
ctx
,
numnodes
);
for
(
size_t
j
=
0
;
j
<
numnodes
;
j
++
)
{
int
port
;
RedisModule_GetClusterNodeInfo
(
ctx
,
ids
[
j
],
NULL
,
NULL
,
&
port
,
NULL
);
RedisModule_ReplyWithArray
(
ctx
,
2
);
RedisModule_ReplyWithStringBuffer
(
ctx
,
ids
[
j
],
REDISMODULE_NODE_ID_LEN
);
RedisModule_ReplyWithLongLong
(
ctx
,
port
);
}
RedisModule_FreeClusterNodesList
(
ids
);
return
RedisModule_ReplyWithSimpleString
(
ctx
,
"OK"
);
}
/* Callback for message MSGTYPE_PING */
void
PingReceiver
(
RedisModuleCtx
*
ctx
,
char
*
sender_id
,
uint8_t
type
,
const
unsigned
char
*
payload
,
uint32_t
len
)
{
void
PingReceiver
(
RedisModuleCtx
*
ctx
,
c
onst
c
har
*
sender_id
,
uint8_t
type
,
const
unsigned
char
*
payload
,
uint32_t
len
)
{
RedisModule_Log
(
ctx
,
"notice"
,
"PING (type %d) RECEIVED from %.*s: '%.*s'"
,
type
,
REDISMODULE_NODE_ID_LEN
,
sender_id
,(
int
)
len
,
payload
);
RedisModule_SendClusterMessage
(
ctx
,
NULL
,
MSGTYPE_PONG
,(
unsigned
char
*
)
"Ohi!"
,
4
);
}
/* Callback for message MSGTYPE_PONG. */
void
PongReceiver
(
RedisModuleCtx
*
ctx
,
char
*
sender_id
,
uint8_t
type
,
const
unsigned
char
*
payload
,
uint32_t
len
)
{
void
PongReceiver
(
RedisModuleCtx
*
ctx
,
c
onst
c
har
*
sender_id
,
uint8_t
type
,
const
unsigned
char
*
payload
,
uint32_t
len
)
{
RedisModule_Log
(
ctx
,
"notice"
,
"PONG (type %d) RECEIVED from %.*s: '%.*s'"
,
type
,
REDISMODULE_NODE_ID_LEN
,
sender_id
,(
int
)
len
,
payload
);
}
...
...
@@ -73,6 +97,10 @@ int RedisModule_OnLoad(RedisModuleCtx *ctx, RedisModuleString **argv, int argc)
PingallCommand_RedisCommand
,
"readonly"
,
0
,
0
,
0
)
==
REDISMODULE_ERR
)
return
REDISMODULE_ERR
;
if
(
RedisModule_CreateCommand
(
ctx
,
"hellocluster.list"
,
ListCommand_RedisCommand
,
"readonly"
,
0
,
0
,
0
)
==
REDISMODULE_ERR
)
return
REDISMODULE_ERR
;
RedisModule_RegisterClusterMessageReceiver
(
ctx
,
MSGTYPE_PING
,
PingReceiver
);
RedisModule_RegisterClusterMessageReceiver
(
ctx
,
MSGTYPE_PONG
,
PongReceiver
);
return
REDISMODULE_OK
;
...
...
src/redismodule.h
浏览文件 @
192361b5
...
...
@@ -263,6 +263,9 @@ void REDISMODULE_API_FUNC(RedisModule_DigestAddLongLong)(RedisModuleDigest *md,
void
REDISMODULE_API_FUNC
(
RedisModule_DigestEndSequence
)(
RedisModuleDigest
*
md
);
void
REDISMODULE_API_FUNC
(
RedisModule_RegisterClusterMessageReceiver
)(
RedisModuleCtx
*
ctx
,
uint8_t
type
,
RedisModuleClusterMessageReceiver
callback
);
int
REDISMODULE_API_FUNC
(
RedisModule_SendClusterMessage
)(
RedisModuleCtx
*
ctx
,
char
*
target_id
,
uint8_t
type
,
unsigned
char
*
msg
,
uint32_t
len
);
int
REDISMODULE_API_FUNC
(
RedisModule_GetClusterNodeInfo
)(
RedisModuleCtx
*
ctx
,
const
char
*
id
,
char
*
ip
,
char
*
master_id
,
int
*
port
,
int
*
flags
);
char
**
REDISMODULE_API_FUNC
(
RedisModule_GetClusterNodesList
)(
RedisModuleCtx
*
ctx
,
size_t
*
numnodes
);
void
REDISMODULE_API_FUNC
(
RedisModule_FreeClusterNodesList
)(
char
**
ids
);
/* Experimental APIs */
#ifdef REDISMODULE_EXPERIMENTAL_API
...
...
@@ -388,6 +391,9 @@ static int RedisModule_Init(RedisModuleCtx *ctx, const char *name, int ver, int
REDISMODULE_GET_API
(
DigestEndSequence
);
REDISMODULE_GET_API
(
RegisterClusterMessageReceiver
);
REDISMODULE_GET_API
(
SendClusterMessage
);
REDISMODULE_GET_API
(
GetClusterNodeInfo
);
REDISMODULE_GET_API
(
GetClusterNodesList
);
REDISMODULE_GET_API
(
FreeClusterNodesList
);
#ifdef REDISMODULE_EXPERIMENTAL_API
REDISMODULE_GET_API
(
GetThreadSafeContext
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录