Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Turbo码先生
redis
提交
92690d29
R
redis
项目概览
Turbo码先生
/
redis
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
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,发现更多精彩内容 >>
提交
92690d29
编写于
4月 07, 2011
作者:
A
antirez
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
first version of cluster config loading code
上级
726a39c1
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
72 addition
and
6 deletion
+72
-6
src/cluster.c
src/cluster.c
+72
-6
未找到文件。
src/cluster.c
浏览文件 @
92690d29
...
...
@@ -11,6 +11,8 @@ void clusterSendFail(char *nodename);
void
clusterUpdateState
(
void
);
int
clusterNodeGetSlotBit
(
clusterNode
*
n
,
int
slot
);
sds
clusterGenNodesDescription
(
void
);
clusterNode
*
clusterLookupNode
(
char
*
name
);
int
clusterNodeAddSlave
(
clusterNode
*
master
,
clusterNode
*
slave
);
/* -----------------------------------------------------------------------------
* Initialization
...
...
@@ -35,7 +37,7 @@ void clusterGetRandomName(char *p) {
int
clusterLoadConfig
(
char
*
filename
)
{
FILE
*
fp
=
fopen
(
filename
,
"r"
);
char
*
line
;
int
maxline
;
int
maxline
,
j
;
if
(
fp
==
NULL
)
return
REDIS_ERR
;
...
...
@@ -48,8 +50,73 @@ int clusterLoadConfig(char *filename) {
while
(
fgets
(
line
,
maxline
,
fp
)
!=
NULL
)
{
int
argc
;
sds
*
argv
=
sdssplitargs
(
line
,
&
argc
);
clusterNode
*
n
,
*
master
;
char
*
p
,
*
s
;
/* Create this node if it does not exist */
n
=
clusterLookupNode
(
argv
[
0
]);
if
(
!
n
)
{
n
=
createClusterNode
(
argv
[
0
],
0
);
clusterAddNode
(
n
);
}
/* Address and port */
if
((
p
=
strchr
(
argv
[
1
],
':'
))
==
NULL
)
goto
fmterr
;
*
p
=
'\0'
;
memcpy
(
n
->
ip
,
argv
[
1
],
strlen
(
argv
[
1
])
+
1
);
n
->
port
=
atoi
(
p
+
1
);
/* Parse flags */
p
=
s
=
argv
[
2
];
while
(
p
)
{
p
=
strchr
(
s
,
','
);
if
(
p
)
*
p
=
'\0'
;
if
(
!
strcasecmp
(
s
,
"myself"
))
{
redisAssert
(
server
.
cluster
.
myself
==
NULL
);
server
.
cluster
.
myself
=
n
;
n
->
flags
|=
REDIS_NODE_MYSELF
;
}
else
if
(
!
strcasecmp
(
s
,
"master"
))
{
n
->
flags
|=
REDIS_NODE_MASTER
;
}
else
if
(
!
strcasecmp
(
s
,
"slave"
))
{
n
->
flags
|=
REDIS_NODE_SLAVE
;
}
else
if
(
!
strcasecmp
(
s
,
"fail?"
))
{
n
->
flags
|=
REDIS_NODE_PFAIL
;
}
else
if
(
!
strcasecmp
(
s
,
"fail"
))
{
n
->
flags
|=
REDIS_NODE_FAIL
;
}
else
if
(
!
strcasecmp
(
s
,
"handshake"
))
{
n
->
flags
|=
REDIS_NODE_HANDSHAKE
;
}
else
if
(
!
strcasecmp
(
s
,
"noaddr"
))
{
n
->
flags
|=
REDIS_NODE_NOADDR
;
}
else
{
redisPanic
(
"Unknown flag in redis cluster config file"
);
}
if
(
p
)
s
=
p
+
1
;
}
/* Get master if any. Set the master and populate master's
* slave list. */
if
(
argv
[
3
][
0
]
!=
'-'
)
{
master
=
clusterLookupNode
(
argv
[
3
]);
if
(
!
master
)
{
master
=
createClusterNode
(
argv
[
3
],
0
);
clusterAddNode
(
master
);
}
n
->
slaveof
=
master
;
clusterNodeAddSlave
(
master
,
n
);
}
printf
(
"Node: %s
\n
"
,
argv
[
0
]);
/* Populate hash slots served by this instance. */
for
(
j
=
7
;
j
<
argc
;
j
++
)
{
int
start
,
stop
;
if
((
p
=
strchr
(
argv
[
j
],
'-'
))
!=
NULL
)
{
*
p
=
'\0'
;
start
=
atoi
(
argv
[
j
]);
stop
=
atoi
(
p
+
1
);
}
else
{
start
=
stop
=
atoi
(
argv
[
j
]);
}
while
(
start
<=
stop
)
clusterAddSlot
(
n
,
start
++
);
}
sdssplitargs_free
(
argv
,
argc
);
}
...
...
@@ -57,9 +124,7 @@ int clusterLoadConfig(char *filename) {
fclose
(
fp
);
/* Config sanity check */
/* TODO: check that myself is set. */
return
REDIS_ERR
;
redisAssert
(
server
.
cluster
.
myself
!=
NULL
);
redisLog
(
REDIS_NOTICE
,
"Node configuration loaded, I'm %.40s"
,
server
.
cluster
.
myself
->
name
);
return
REDIS_OK
;
...
...
@@ -100,7 +165,7 @@ void clusterSaveConfigOrDie(void) {
void
clusterInit
(
void
)
{
int
saveconf
=
0
;
server
.
cluster
.
myself
=
createClusterNode
(
NULL
,
REDIS_NODE_MYSELF
)
;
server
.
cluster
.
myself
=
NULL
;
server
.
cluster
.
state
=
REDIS_CLUSTER_FAIL
;
server
.
cluster
.
nodes
=
dictCreate
(
&
clusterNodesDictType
,
NULL
);
server
.
cluster
.
node_timeout
=
15
;
...
...
@@ -113,6 +178,7 @@ void clusterInit(void) {
if
(
clusterLoadConfig
(
server
.
cluster
.
configfile
)
==
REDIS_ERR
)
{
/* No configuration found. We will just use the random name provided
* by the createClusterNode() function. */
server
.
cluster
.
myself
=
createClusterNode
(
NULL
,
REDIS_NODE_MYSELF
);
redisLog
(
REDIS_NOTICE
,
"No cluster configuration found, I'm %.40s"
,
server
.
cluster
.
myself
->
name
);
clusterAddNode
(
server
.
cluster
.
myself
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录