Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
别团等shy哥发育
redis
提交
0a3edcbe
R
redis
项目概览
别团等shy哥发育
/
redis
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
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,发现更多精彩内容 >>
提交
0a3edcbe
编写于
1月 21, 2015
作者:
A
antirez
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Cluster: node deletion cleanup / centralization.
上级
5130c253
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
20 addition
and
13 deletion
+20
-13
src/cluster.c
src/cluster.c
+20
-13
未找到文件。
src/cluster.c
浏览文件 @
0a3edcbe
...
...
@@ -819,6 +819,7 @@ int clusterCountNonFailingSlaves(clusterNode *n) {
return
okslaves
;
}
/* Low level cleanup of the node structure. Only called by clusterDelNode(). */
void
freeClusterNode
(
clusterNode
*
n
)
{
sds
nodename
;
int
j
;
...
...
@@ -830,10 +831,15 @@ void freeClusterNode(clusterNode *n) {
n
->
slaves
[
j
]
->
slaveof
=
NULL
;
}
/* Remove this node from the list of slaves of its master. */
if
(
nodeIsSlave
(
n
)
&&
n
->
slaveof
)
clusterNodeRemoveSlave
(
n
->
slaveof
,
n
);
/* Unlink from the set of nodes. */
nodename
=
sdsnewlen
(
n
->
name
,
REDIS_CLUSTER_NAMELEN
);
redisAssert
(
dictDelete
(
server
.
cluster
->
nodes
,
nodename
)
==
DICT_OK
);
sdsfree
(
nodename
);
if
(
n
->
slaveof
)
clusterNodeRemoveSlave
(
n
->
slaveof
,
n
);
/* Release link and associated data structures. */
if
(
n
->
link
)
freeClusterLink
(
n
->
link
);
listRelease
(
n
->
fail_reports
);
zfree
(
n
);
...
...
@@ -848,11 +854,16 @@ int clusterAddNode(clusterNode *node) {
return
(
retval
==
DICT_OK
)
?
REDIS_OK
:
REDIS_ERR
;
}
/* Remove a node from the cluster:
* 1) Mark all the nodes handled by it as unassigned.
* 2) Remove all the failure reports sent by this node.
* 3) Free the node, that will in turn remove it from the hash table
* and from the list of slaves of its master, if it is a slave node.
/* Remove a node from the cluster. The functio performs the high level
* cleanup, calling freeClusterNode() for the low level cleanup.
* Here we do the following:
*
* 1) Mark all the slots handled by it as unassigned.
* 2) Remove all the failure reports sent by this node and referenced by
* other nodes.
* 3) Free the node with freeClusterNode() that will in turn remove it
* from the hash table and from the list of slaves of its master, if
* it is a slave node.
*/
void
clusterDelNode
(
clusterNode
*
delnode
)
{
int
j
;
...
...
@@ -879,11 +890,7 @@ void clusterDelNode(clusterNode *delnode) {
}
dictReleaseIterator
(
di
);
/* 3) Remove this node from its master's slaves if needed. */
if
(
nodeIsSlave
(
delnode
)
&&
delnode
->
slaveof
)
clusterNodeRemoveSlave
(
delnode
->
slaveof
,
delnode
);
/* 4) Free the node, unlinking it from the cluster. */
/* 3) Free the node, unlinking it from the cluster. */
freeClusterNode
(
delnode
);
}
...
...
@@ -1619,7 +1626,7 @@ int clusterProcessPacket(clusterLink *link) {
}
/* Free this node as we already have it. This will
* cause the link to be freed as well. */
freeCluster
Node
(
link
->
node
);
clusterDel
Node
(
link
->
node
);
return
0
;
}
...
...
@@ -2913,7 +2920,7 @@ void clusterCron(void) {
/* A Node in HANDSHAKE state has a limited lifespan equal to the
* configured node timeout. */
if
(
nodeInHandshake
(
node
)
&&
now
-
node
->
ctime
>
handshake_timeout
)
{
freeCluster
Node
(
node
);
clusterDel
Node
(
node
);
continue
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录