Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
ruanhaishen
redis
Commits
726a39c1
Commit
726a39c1
authored
Apr 07, 2011
by
antirez
Browse files
initial cluster config load code
parent
0b7f6d09
Changes
3
Hide whitespace changes
Inline
Side-by-side
src/cluster.c
View file @
726a39c1
...
...
@@ -34,11 +34,32 @@ void clusterGetRandomName(char *p) {
int
clusterLoadConfig
(
char
*
filename
)
{
FILE
*
fp
=
fopen
(
filename
,
"r"
);
char
*
line
;
int
maxline
;
return
REDIS_ERR
;
if
(
fp
==
NULL
)
return
REDIS_ERR
;
/* Parse the file. Note that single liens of the cluster config file can
* be really long as they include all the hash slots of the node.
* This means in the worst possible case REDIS_CLUSTER_SLOTS/2 integers.
* To simplify we allocate 1024+REDIS_CLUSTER_SLOTS*16 bytes per line. */
maxline
=
1024
+
REDIS_CLUSTER_SLOTS
*
16
;
line
=
zmalloc
(
maxline
);
while
(
fgets
(
line
,
maxline
,
fp
)
!=
NULL
)
{
int
argc
;
sds
*
argv
=
sdssplitargs
(
line
,
&
argc
);
printf
(
"Node: %s
\n
"
,
argv
[
0
]);
sdssplitargs_free
(
argv
,
argc
);
}
zfree
(
line
);
fclose
(
fp
);
/* Config sanity check */
/* TODO: check that myself is set. */
return
REDIS_ERR
;
redisLog
(
REDIS_NOTICE
,
"Node configuration loaded, I'm %.40s"
,
server
.
cluster
.
myself
->
name
);
return
REDIS_OK
;
...
...
@@ -57,8 +78,8 @@ int clusterSaveConfig(void) {
sds
ci
=
clusterGenNodesDescription
();
int
fd
;
if
((
fd
=
open
(
server
.
cluster
.
configfile
,
O_WRONLY
|
O_CREAT
,
0644
))
==
-
1
)
goto
err
;
if
((
fd
=
open
(
server
.
cluster
.
configfile
,
O_WRONLY
|
O_CREAT
|
O_TRUNC
,
0644
)
)
==
-
1
)
goto
err
;
if
(
write
(
fd
,
ci
,
sdslen
(
ci
))
!=
(
ssize_t
)
sdslen
(
ci
))
goto
err
;
close
(
fd
);
sdsfree
(
ci
);
...
...
@@ -337,6 +358,7 @@ void clusterProcessGossipSection(clusterMsg *hdr, clusterLink *link) {
/* Broadcast the failing node name to everybody */
clusterSendFail
(
node
->
name
);
clusterUpdateState
();
clusterSaveConfigOrDie
();
}
}
else
{
/* If it's not in NOADDR state and we don't have it, we
...
...
@@ -522,7 +544,10 @@ int clusterProcessPacket(clusterLink *link) {
clusterProcessGossipSection
(
hdr
,
link
);
/* Update the cluster state if needed */
if
(
update
)
clusterUpdateState
();
if
(
update
)
{
clusterUpdateState
();
clusterSaveConfigOrDie
();
}
}
else
if
(
type
==
CLUSTERMSG_TYPE_FAIL
&&
sender
)
{
clusterNode
*
failing
;
...
...
@@ -534,6 +559,7 @@ int clusterProcessPacket(clusterLink *link) {
failing
->
flags
|=
REDIS_NODE_FAIL
;
failing
->
flags
&=
~
REDIS_NODE_PFAIL
;
clusterUpdateState
();
clusterSaveConfigOrDie
();
}
}
else
{
redisLog
(
REDIS_NOTICE
,
"Received unknown packet type: %d"
,
type
);
...
...
@@ -1047,6 +1073,7 @@ void clusterCommand(redisClient *c) {
}
zfree
(
slots
);
clusterUpdateState
();
clusterSaveConfigOrDie
();
addReply
(
c
,
shared
.
ok
);
}
else
if
(
!
strcasecmp
(
c
->
argv
[
1
]
->
ptr
,
"info"
)
&&
c
->
argc
==
2
)
{
char
*
statestr
[]
=
{
"ok"
,
"fail"
,
"needhelp"
};
...
...
src/sds.c
View file @
726a39c1
...
...
@@ -554,6 +554,13 @@ err:
return
NULL
;
}
void
sdssplitargs_free
(
sds
*
argv
,
int
argc
)
{
int
j
;
for
(
j
=
0
;
j
<
argc
;
j
++
)
sdsfree
(
argv
[
j
]);
zfree
(
argv
);
}
#ifdef SDS_TEST_MAIN
#include <stdio.h>
#include "testhelp.h"
...
...
src/sds.h
View file @
726a39c1
...
...
@@ -74,5 +74,6 @@ void sdstoupper(sds s);
sds
sdsfromlonglong
(
long
long
value
);
sds
sdscatrepr
(
sds
s
,
char
*
p
,
size_t
len
);
sds
*
sdssplitargs
(
char
*
line
,
int
*
argc
);
void
sdssplitargs_free
(
sds
*
argv
,
int
argc
);
#endif
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment