Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
xindoo
redis
提交
befcf625
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,发现更多精彩内容 >>
提交
befcf625
编写于
1月 28, 2014
作者:
A
antirez
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Cluster: broadcast master/slave replication offset in bus header.
上级
8b32bd48
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
25 addition
and
10 deletion
+25
-10
src/cluster.c
src/cluster.c
+23
-10
src/cluster.h
src/cluster.h
+2
-0
未找到文件。
src/cluster.c
浏览文件 @
befcf625
...
...
@@ -1615,34 +1615,47 @@ void clusterBroadcastMessage(void *buf, size_t len) {
/* Build the message header */
void
clusterBuildMessageHdr
(
clusterMsg
*
hdr
,
int
type
)
{
int
totlen
=
0
;
clusterNode
*
master
;
uint64_t
offset
;
clusterNode
*
master
,
*
myself
=
server
.
cluster
->
myself
;
/* If this node is a master, we send its slots bitmap and configEpoch.
* If this node is a slave we send the master's information instead (the
* node is flagged as slave so the receiver knows that it is NOT really
* in charge for this slots. */
master
=
(
server
.
cluster
->
myself
->
flags
&
REDIS_NODE_SLAVE
&&
server
.
cluster
->
myself
->
slaveof
)
?
server
.
cluster
->
myself
->
slaveof
:
server
.
cluster
->
myself
;
master
=
(
myself
->
flags
&
REDIS_NODE_SLAVE
&&
myself
->
slaveof
)
?
myself
->
slaveof
:
myself
;
memset
(
hdr
,
0
,
sizeof
(
*
hdr
));
hdr
->
type
=
htons
(
type
);
memcpy
(
hdr
->
sender
,
server
.
cluster
->
myself
->
name
,
REDIS_CLUSTER_NAMELEN
);
memcpy
(
hdr
->
sender
,
myself
->
name
,
REDIS_CLUSTER_NAMELEN
);
memcpy
(
hdr
->
myslots
,
master
->
slots
,
sizeof
(
hdr
->
myslots
));
memset
(
hdr
->
slaveof
,
0
,
REDIS_CLUSTER_NAMELEN
);
if
(
server
.
cluster
->
myself
->
slaveof
!=
NULL
)
{
memcpy
(
hdr
->
slaveof
,
server
.
cluster
->
myself
->
slaveof
->
name
,
REDIS_CLUSTER_NAMELEN
);
}
if
(
myself
->
slaveof
!=
NULL
)
memcpy
(
hdr
->
slaveof
,
myself
->
slaveof
->
name
,
REDIS_CLUSTER_NAMELEN
);
hdr
->
port
=
htons
(
server
.
port
);
hdr
->
flags
=
htons
(
server
.
cluster
->
myself
->
flags
);
hdr
->
flags
=
htons
(
myself
->
flags
);
hdr
->
state
=
server
.
cluster
->
state
;
/* Set the currentEpoch and configEpochs. */
hdr
->
currentEpoch
=
htonu64
(
server
.
cluster
->
currentEpoch
);
hdr
->
configEpoch
=
htonu64
(
master
->
configEpoch
);
/* Set the replication offset. */
if
(
myself
->
flags
&
REDIS_NODE_SLAVE
)
{
if
(
server
.
master
)
offset
=
server
.
master
->
reploff
;
else
if
(
server
.
cached_master
)
offset
=
server
.
cached_master
->
reploff
;
else
offset
=
0
;
}
else
{
offset
=
server
.
master_repl_offset
;
}
hdr
->
offset
=
htonu64
(
offset
);
/* Compute the message length for certain messages. For other messages
* this is up to the caller. */
if
(
type
==
CLUSTERMSG_TYPE_FAIL
)
{
totlen
=
sizeof
(
clusterMsg
)
-
sizeof
(
union
clusterMsgData
);
totlen
+=
sizeof
(
clusterMsgDataFail
);
...
...
src/cluster.h
浏览文件 @
befcf625
...
...
@@ -178,6 +178,8 @@ typedef struct {
uint64_t
configEpoch
;
/* The config epoch if it's a master, or the last
epoch advertised by its master if it is a
slave. */
uint64_t
offset
;
/* Master replication offset if node is a master or
processed replication offset if node is a slave. */
char
sender
[
REDIS_CLUSTER_NAMELEN
];
/* Name of the sender node */
unsigned
char
myslots
[
REDIS_CLUSTER_SLOTS
/
8
];
char
slaveof
[
REDIS_CLUSTER_NAMELEN
];
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录