Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
Willemt Raft
Commits
dc3d73e6
Commit
dc3d73e6
authored
May 01, 2015
by
Willem
Browse files
Merge pull request #6 from aleks-f/master
changes to compile as C++
parents
fbee81c1
a60c2bf6
Changes
4
Hide whitespace changes
Inline
Side-by-side
src/raft_log.c
View file @
dc3d73e6
...
...
@@ -45,7 +45,7 @@ static void __ensurecapacity(log_private_t * me)
if
(
me
->
count
<
me
->
size
)
return
;
temp
=
calloc
(
1
,
sizeof
(
raft_entry_t
)
*
me
->
size
*
2
);
temp
=
(
raft_entry_t
*
)
calloc
(
1
,
sizeof
(
raft_entry_t
)
*
me
->
size
*
2
);
for
(
i
=
0
,
j
=
me
->
front
;
i
<
me
->
count
;
i
++
,
j
++
)
{
...
...
@@ -65,17 +65,17 @@ static void __ensurecapacity(log_private_t * me)
log_t
*
log_new
()
{
log_private_t
*
me
=
calloc
(
1
,
sizeof
(
log_private_t
));
log_private_t
*
me
=
(
log_private_t
*
)
calloc
(
1
,
sizeof
(
log_private_t
));
me
->
size
=
INITIAL_CAPACITY
;
me
->
count
=
0
;
me
->
back
=
in
(
me
)
->
front
=
0
;
me
->
entries
=
calloc
(
1
,
sizeof
(
raft_entry_t
)
*
me
->
size
);
return
(
void
*
)
me
;
me
->
entries
=
(
raft_entry_t
*
)
calloc
(
1
,
sizeof
(
raft_entry_t
)
*
me
->
size
);
return
(
log_t
*
)
me
;
}
int
log_append_entry
(
log_t
*
me_
,
raft_entry_t
*
c
)
{
log_private_t
*
me
=
(
void
*
)
me_
;
log_private_t
*
me
=
(
log_private_t
*
)
me_
;
if
(
0
==
c
->
id
)
return
-
1
;
...
...
@@ -91,7 +91,7 @@ int log_append_entry(log_t* me_, raft_entry_t* c)
raft_entry_t
*
log_get_from_idx
(
log_t
*
me_
,
int
idx
)
{
log_private_t
*
me
=
(
void
*
)
me_
;
log_private_t
*
me
=
(
log_private_t
*
)
me_
;
int
i
;
if
(
me
->
base_log_idx
+
me
->
count
<
idx
||
idx
<
me
->
base_log_idx
)
...
...
@@ -110,7 +110,7 @@ int log_count(log_t* me_)
void
log_delete
(
log_t
*
me_
,
int
idx
)
{
log_private_t
*
me
=
(
void
*
)
me_
;
log_private_t
*
me
=
(
log_private_t
*
)
me_
;
int
end
;
/* idx starts at 1 */
...
...
@@ -126,7 +126,7 @@ void log_delete(log_t* me_, int idx)
void
*
log_poll
(
log_t
*
me_
)
{
log_private_t
*
me
=
(
void
*
)
me_
;
log_private_t
*
me
=
(
log_private_t
*
)
me_
;
if
(
0
==
log_count
(
me_
))
return
NULL
;
...
...
@@ -140,7 +140,7 @@ void *log_poll(log_t * me_)
raft_entry_t
*
log_peektail
(
log_t
*
me_
)
{
log_private_t
*
me
=
(
void
*
)
me_
;
log_private_t
*
me
=
(
log_private_t
*
)
me_
;
if
(
0
==
log_count
(
me_
))
return
NULL
;
...
...
@@ -153,7 +153,7 @@ raft_entry_t *log_peektail(log_t * me_)
void
log_empty
(
log_t
*
me_
)
{
log_private_t
*
me
=
(
void
*
)
me_
;
log_private_t
*
me
=
(
log_private_t
*
)
me_
;
me
->
front
=
0
;
me
->
back
=
0
;
...
...
@@ -162,7 +162,7 @@ void log_empty(log_t * me_)
void
log_free
(
log_t
*
me_
)
{
log_private_t
*
me
=
(
void
*
)
me_
;
log_private_t
*
me
=
(
log_private_t
*
)
me_
;
free
(
me
->
entries
);
free
(
me
);
...
...
src/raft_node.c
View file @
dc3d73e6
...
...
@@ -25,9 +25,9 @@ typedef struct
raft_node_t
*
raft_node_new
(
void
*
udata
)
{
raft_node_private_t
*
me
;
me
=
calloc
(
1
,
sizeof
(
raft_node_private_t
));
me
=
(
raft_node_private_t
*
)
calloc
(
1
,
sizeof
(
raft_node_private_t
));
me
->
udata
=
udata
;
return
(
void
*
)
me
;
return
(
raft_node_t
*
)
me
;
}
int
raft_node_is_leader
(
raft_node_t
*
me_
)
...
...
@@ -38,18 +38,18 @@ int raft_node_is_leader(raft_node_t* me_)
int
raft_node_get_next_idx
(
raft_node_t
*
me_
)
{
raft_node_private_t
*
me
=
(
void
*
)
me_
;
raft_node_private_t
*
me
=
(
raft_node_private_t
*
)
me_
;
return
me
->
next_idx
;
}
void
raft_node_set_next_idx
(
raft_node_t
*
me_
,
int
nextIdx
)
{
raft_node_private_t
*
me
=
(
void
*
)
me_
;
raft_node_private_t
*
me
=
(
raft_node_private_t
*
)
me_
;
me
->
next_idx
=
nextIdx
;
}
void
*
raft_node_get_udata
(
raft_node_t
*
me_
)
{
raft_node_private_t
*
me
=
(
void
*
)
me_
;
raft_node_private_t
*
me
=
(
raft_node_private_t
*
)
me_
;
return
me
->
udata
;
}
src/raft_server.c
View file @
dc3d73e6
...
...
@@ -30,7 +30,7 @@ static void __log(raft_server_t *me_, const char *fmt, ...)
vsprintf
(
buf
,
fmt
,
args
);
#if 0 /* debugging */
raft_server_private_t* me = (
void
*)me_;
raft_server_private_t* me = (
raft_server_private_t
*)me_;
printf("%d: %s\n", me->nodeid, buf);
__FUNC_log(bto, src, buf);
#endif
...
...
@@ -38,7 +38,7 @@ static void __log(raft_server_t *me_, const char *fmt, ...)
raft_server_t
*
raft_new
()
{
raft_server_private_t
*
me
=
calloc
(
1
,
sizeof
(
raft_server_private_t
));
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
calloc
(
1
,
sizeof
(
raft_server_private_t
));
if
(
!
me
)
return
NULL
;
me
->
current_term
=
0
;
...
...
@@ -48,14 +48,14 @@ raft_server_t* raft_new()
me
->
request_timeout
=
200
;
me
->
election_timeout
=
1000
;
me
->
log
=
log_new
();
raft_set_state
((
void
*
)
me
,
RAFT_STATE_FOLLOWER
);
return
(
void
*
)
me
;
raft_set_state
((
raft_server_t
*
)
me
,
RAFT_STATE_FOLLOWER
);
return
(
raft_server_t
*
)
me
;
}
void
raft_set_callbacks
(
raft_server_t
*
me_
,
raft_cbs_t
*
funcs
,
void
*
udata
)
{
raft_server_private_t
*
me
=
(
void
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
memcpy
(
&
me
->
cb
,
funcs
,
sizeof
(
raft_cbs_t
));
me
->
udata
=
udata
;
...
...
@@ -63,7 +63,7 @@ void raft_set_callbacks(raft_server_t* me_,
void
raft_free
(
raft_server_t
*
me_
)
{
raft_server_private_t
*
me
=
(
void
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
log_free
(
me
->
log
);
free
(
me_
);
...
...
@@ -71,7 +71,7 @@ void raft_free(raft_server_t* me_)
void
raft_election_start
(
raft_server_t
*
me_
)
{
raft_server_private_t
*
me
=
(
void
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
__log
(
me_
,
"election starting: %d %d, term: %d"
,
me
->
election_timeout
,
me
->
timeout_elapsed
,
me
->
current_term
);
...
...
@@ -81,7 +81,7 @@ void raft_election_start(raft_server_t* me_)
void
raft_become_leader
(
raft_server_t
*
me_
)
{
raft_server_private_t
*
me
=
(
void
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
int
i
;
__log
(
me_
,
"becoming leader"
);
...
...
@@ -101,7 +101,7 @@ void raft_become_leader(raft_server_t* me_)
void
raft_become_candidate
(
raft_server_t
*
me_
)
{
raft_server_private_t
*
me
=
(
void
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
int
i
;
__log
(
me_
,
"becoming candidate"
);
...
...
@@ -122,7 +122,7 @@ void raft_become_candidate(raft_server_t* me_)
void
raft_become_follower
(
raft_server_t
*
me_
)
{
raft_server_private_t
*
me
=
(
void
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
__log
(
me_
,
"becoming follower"
);
...
...
@@ -132,7 +132,7 @@ void raft_become_follower(raft_server_t* me_)
int
raft_periodic
(
raft_server_t
*
me_
,
int
msec_since_last_period
)
{
raft_server_private_t
*
me
=
(
void
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
__log
(
me_
,
"periodic elapsed time: %d"
,
me
->
timeout_elapsed
);
...
...
@@ -163,14 +163,14 @@ int raft_periodic(raft_server_t* me_, int msec_since_last_period)
raft_entry_t
*
raft_get_entry_from_idx
(
raft_server_t
*
me_
,
int
etyidx
)
{
raft_server_private_t
*
me
=
(
void
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
return
log_get_from_idx
(
me
->
log
,
etyidx
);
}
int
raft_recv_appendentries_response
(
raft_server_t
*
me_
,
int
node
,
msg_appendentries_response_t
*
r
)
{
raft_server_private_t
*
me
=
(
void
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
__log
(
me_
,
"received appendentries response from: %d"
,
node
);
...
...
@@ -220,7 +220,7 @@ int raft_recv_appendentries(
msg_appendentries_response_t
*
r
)
{
raft_server_private_t
*
me
=
(
void
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
me
->
timeout_elapsed
=
0
;
...
...
@@ -311,11 +311,11 @@ int raft_recv_appendentries(
msg_entry_t
*
cmd
=
&
ae
->
entries
[
i
];
/* TODO: replace malloc with mempoll/arena */
raft_entry_t
*
c
=
malloc
(
sizeof
(
raft_entry_t
));
raft_entry_t
*
c
=
(
raft_entry_t
*
)
malloc
(
sizeof
(
raft_entry_t
));
c
->
term
=
me
->
current_term
;
c
->
len
=
cmd
->
len
;
c
->
id
=
cmd
->
id
;
c
->
data
=
malloc
(
cmd
->
len
);
c
->
data
=
(
unsigned
char
*
)
malloc
(
cmd
->
len
);
memcpy
(
c
->
data
,
cmd
->
data
,
cmd
->
len
);
if
(
-
1
==
raft_append_entry
(
me_
,
c
))
{
...
...
@@ -334,7 +334,7 @@ int raft_recv_appendentries(
int
raft_recv_requestvote
(
raft_server_t
*
me_
,
int
node
,
msg_requestvote_t
*
vr
,
msg_requestvote_response_t
*
r
)
{
raft_server_private_t
*
me
=
(
void
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
if
(
raft_get_current_term
(
me_
)
<
vr
->
term
)
me
->
voted_for
=
-
1
;
...
...
@@ -369,7 +369,7 @@ int raft_votes_is_majority(const int num_nodes, const int nvotes)
int
raft_recv_requestvote_response
(
raft_server_t
*
me_
,
int
node
,
msg_requestvote_response_t
*
r
)
{
raft_server_private_t
*
me
=
(
void
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
__log
(
me_
,
"node responded to requestvote: %d status: %s"
,
node
,
r
->
vote_granted
==
1
?
"granted"
:
"not granted"
);
...
...
@@ -396,7 +396,7 @@ int raft_recv_requestvote_response(raft_server_t* me_, int node,
int
raft_recv_entry
(
raft_server_t
*
me_
,
int
node
,
msg_entry_t
*
e
,
msg_entry_response_t
*
r
)
{
raft_server_private_t
*
me
=
(
void
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
raft_entry_t
ety
;
int
res
,
i
;
...
...
@@ -418,7 +418,7 @@ int raft_recv_entry(raft_server_t* me_, int node, msg_entry_t* e,
int
raft_send_requestvote
(
raft_server_t
*
me_
,
int
node
)
{
raft_server_private_t
*
me
=
(
void
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
msg_requestvote_t
rv
;
__log
(
me_
,
"sending requestvote to: %d"
,
node
);
...
...
@@ -432,7 +432,7 @@ int raft_send_requestvote(raft_server_t* me_, int node)
int
raft_append_entry
(
raft_server_t
*
me_
,
raft_entry_t
*
c
)
{
raft_server_private_t
*
me
=
(
void
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
if
(
0
==
log_append_entry
(
me
->
log
,
c
))
{
...
...
@@ -444,7 +444,7 @@ int raft_append_entry(raft_server_t* me_, raft_entry_t* c)
int
raft_apply_entry
(
raft_server_t
*
me_
)
{
raft_server_private_t
*
me
=
(
void
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
raft_entry_t
*
e
;
if
(
!
(
e
=
log_get_from_idx
(
me
->
log
,
me
->
last_applied_idx
+
1
)))
...
...
@@ -462,7 +462,7 @@ int raft_apply_entry(raft_server_t* me_)
void
raft_send_appendentries
(
raft_server_t
*
me_
,
int
node
)
{
raft_server_private_t
*
me
=
(
void
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
__log
(
me_
,
"sending appendentries to: %d"
,
node
);
...
...
@@ -483,7 +483,7 @@ void raft_send_appendentries(raft_server_t* me_, int node)
void
raft_send_appendentries_all
(
raft_server_t
*
me_
)
{
raft_server_private_t
*
me
=
(
void
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
int
i
;
for
(
i
=
0
;
i
<
me
->
num_nodes
;
i
++
)
...
...
@@ -494,24 +494,24 @@ void raft_send_appendentries_all(raft_server_t* me_)
void
raft_set_configuration
(
raft_server_t
*
me_
,
raft_node_configuration_t
*
nodes
,
int
my_idx
)
{
raft_server_private_t
*
me
=
(
void
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
int
num_nodes
;
/* TODO: one memory allocation only please */
for
(
num_nodes
=
0
;
nodes
->
udata_address
;
nodes
++
)
{
num_nodes
++
;
me
->
nodes
=
realloc
(
me
->
nodes
,
sizeof
(
raft_node_t
*
)
*
num_nodes
);
me
->
nodes
=
(
raft_node_t
*
)
realloc
(
me
->
nodes
,
sizeof
(
raft_node_t
*
)
*
num_nodes
);
me
->
num_nodes
=
num_nodes
;
me
->
nodes
[
num_nodes
-
1
]
=
raft_node_new
(
nodes
->
udata_address
);
}
me
->
votes_for_me
=
calloc
(
num_nodes
,
sizeof
(
int
));
me
->
votes_for_me
=
(
int
*
)
calloc
(
num_nodes
,
sizeof
(
int
));
me
->
nodeid
=
my_idx
;
}
int
raft_get_nvotes_for_me
(
raft_server_t
*
me_
)
{
raft_server_private_t
*
me
=
(
void
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
int
i
,
votes
;
for
(
i
=
0
,
votes
=
0
;
i
<
me
->
num_nodes
;
i
++
)
...
...
@@ -527,6 +527,6 @@ int raft_get_nvotes_for_me(raft_server_t* me_)
void
raft_vote
(
raft_server_t
*
me_
,
int
node
)
{
raft_server_private_t
*
me
=
(
void
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
me
->
voted_for
=
node
;
}
src/raft_server_properties.c
View file @
dc3d73e6
...
...
@@ -22,13 +22,13 @@
void
raft_set_election_timeout
(
raft_server_t
*
me_
,
int
millisec
)
{
raft_server_private_t
*
me
=
(
void
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
me
->
election_timeout
=
millisec
;
}
void
raft_set_request_timeout
(
raft_server_t
*
me_
,
int
millisec
)
{
raft_server_private_t
*
me
=
(
void
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
me
->
request_timeout
=
millisec
;
}
...
...
@@ -59,7 +59,7 @@ int raft_get_timeout_elapsed(raft_server_t* me_)
int
raft_get_log_count
(
raft_server_t
*
me_
)
{
raft_server_private_t
*
me
=
(
void
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
return
log_count
(
me
->
log
);
}
...
...
@@ -70,7 +70,7 @@ int raft_get_voted_for(raft_server_t* me_)
void
raft_set_current_term
(
raft_server_t
*
me_
,
int
term
)
{
raft_server_private_t
*
me
=
(
void
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
me
->
current_term
=
term
;
}
...
...
@@ -81,7 +81,7 @@ int raft_get_current_term(raft_server_t* me_)
void
raft_set_current_idx
(
raft_server_t
*
me_
,
int
idx
)
{
raft_server_private_t
*
me
=
(
void
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
me
->
current_idx
=
idx
;
}
...
...
@@ -97,13 +97,13 @@ int raft_get_my_id(raft_server_t* me_)
void
raft_set_commit_idx
(
raft_server_t
*
me_
,
int
idx
)
{
raft_server_private_t
*
me
=
(
void
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
me
->
commit_idx
=
idx
;
}
void
raft_set_last_applied_idx
(
raft_server_t
*
me_
,
int
idx
)
{
raft_server_private_t
*
me
=
(
void
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
me
->
last_applied_idx
=
idx
;
}
...
...
@@ -119,7 +119,7 @@ int raft_get_commit_idx(raft_server_t* me_)
void
raft_set_state
(
raft_server_t
*
me_
,
int
state
)
{
raft_server_private_t
*
me
=
(
void
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
me
->
state
=
state
;
}
...
...
@@ -130,11 +130,11 @@ int raft_get_state(raft_server_t* me_)
raft_node_t
*
raft_get_node
(
raft_server_t
*
me_
,
int
nodeid
)
{
raft_server_private_t
*
me
=
(
void
*
)
me_
;
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
if
(
nodeid
<
0
||
me
->
num_nodes
<=
nodeid
)
return
NULL
;
return
me
->
nodes
[
nodeid
];
return
(
raft_node_t
*
)
me
->
nodes
[
nodeid
];
}
int
raft_is_follower
(
raft_server_t
*
me_
)
...
...
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