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
RedisLabs Raft
Commits
0990cf7b
Commit
0990cf7b
authored
Apr 16, 2020
by
Yossi Gottlieb
Browse files
Add state change callbacks.
parent
02fda63f
Changes
2
Hide whitespace changes
Inline
Side-by-side
include/raft.h
View file @
0990cf7b
...
...
@@ -376,6 +376,22 @@ typedef void (
raft_membership_e
type
);
/** Callback for being notified of state changes.
*
* Implementing this callback is optional.
*
* @param[in] raft The Raft server making this callback
* @param[in] user_data User data that is passed from Raft server
* @param[in] state The new cluster state. */
typedef
void
(
*
func_state_event_f
)
(
raft_server_t
*
raft
,
void
*
user_data
,
raft_state_e
state
);
typedef
struct
{
/** Callback for sending request vote messages */
...
...
@@ -412,6 +428,9 @@ typedef struct
/** Callback for being notified of membership changes (optional). */
func_membership_event_f
notify_membership_event
;
/** Callback for being notified of state changes (optional). */
func_state_event_f
notify_state_event
;
/** Callback for catching debugging log messages
* This callback is optional */
func_log_f
log
;
...
...
src/raft_server.c
View file @
0990cf7b
...
...
@@ -166,6 +166,8 @@ int raft_become_leader(raft_server_t* me_)
int
i
;
__log
(
me_
,
NULL
,
"becoming leader term:%d"
,
raft_get_current_term
(
me_
));
if
(
me
->
cb
.
notify_state_event
)
me
->
cb
.
notify_state_event
(
me_
,
raft_get_udata
(
me_
),
RAFT_STATE_LEADER
);
raft_index_t
next_idx
=
raft_get_current_idx
(
me_
)
+
1
;
...
...
@@ -202,6 +204,8 @@ int raft_become_candidate(raft_server_t* me_)
int
i
;
__log
(
me_
,
NULL
,
"becoming candidate"
);
if
(
me
->
cb
.
notify_state_event
)
me
->
cb
.
notify_state_event
(
me_
,
raft_get_udata
(
me_
),
RAFT_STATE_CANDIDATE
);
int
e
=
raft_set_current_term
(
me_
,
raft_get_current_term
(
me_
)
+
1
);
if
(
0
!=
e
)
...
...
@@ -234,6 +238,9 @@ void raft_become_follower(raft_server_t* me_)
raft_server_private_t
*
me
=
(
raft_server_private_t
*
)
me_
;
__log
(
me_
,
NULL
,
"becoming follower"
);
if
(
me
->
cb
.
notify_state_event
)
me
->
cb
.
notify_state_event
(
me_
,
raft_get_udata
(
me_
),
RAFT_STATE_FOLLOWER
);
raft_set_state
(
me_
,
RAFT_STATE_FOLLOWER
);
raft_randomize_election_timeout
(
me_
);
me
->
timeout_elapsed
=
0
;
...
...
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