Commit 854a06d2 authored by Li Wei's avatar Li Wei Committed by Willem Thiart
Browse files

DAOS-333 server: Persist term and vote atomically



Remind users' persist_term implementations to persist currentTerm and
nil votedFor atomically.
Signed-off-by: default avatarLi Wei <wei.g.li@intel.com>
parent 5bad59c1
...@@ -224,14 +224,31 @@ typedef void ( ...@@ -224,14 +224,31 @@ typedef void (
* For safety reasons this callback MUST flush the change to disk. * For safety reasons this callback MUST flush the change to disk.
* @param[in] raft The Raft server making this callback * @param[in] raft The Raft server making this callback
* @param[in] user_data User data that is passed from Raft server * @param[in] user_data User data that is passed from Raft server
* @param[in] voted_for The node we voted for * @param[in] vote The node we voted for
* @return 0 on success */ * @return 0 on success */
typedef int ( typedef int (
*func_persist_int_f *func_persist_vote_f
) ( ) (
raft_server_t* raft, raft_server_t* raft,
void *user_data, void *user_data,
int node int vote
);
/** Callback for saving current term (and nil vote) to disk.
* For safety reasons this callback MUST flush the term and vote changes to
* disk atomically.
* @param[in] raft The Raft server making this callback
* @param[in] user_data User data that is passed from Raft server
* @param[in] term Current term
* @param[in] vote The node value dicating we haven't voted for anybody
* @return 0 on success */
typedef int (
*func_persist_term_f
) (
raft_server_t* raft,
void *user_data,
int term,
int vote
); );
/** Callback for saving log entry changes. /** Callback for saving log entry changes.
...@@ -278,11 +295,12 @@ typedef struct ...@@ -278,11 +295,12 @@ typedef struct
/** Callback for persisting vote data /** Callback for persisting vote data
* For safety reasons this callback MUST flush the change to disk. */ * For safety reasons this callback MUST flush the change to disk. */
func_persist_int_f persist_vote; func_persist_vote_f persist_vote;
/** Callback for persisting term data /** Callback for persisting term (and nil vote) data
* For safety reasons this callback MUST flush the change to disk. */ * For safety reasons this callback MUST flush the term and vote changes to
func_persist_int_f persist_term; * disk atomically. */
func_persist_term_f persist_term;
/** Callback for adding an entry to the log /** Callback for adding an entry to the log
* For safety reasons this callback MUST flush the change to disk. * For safety reasons this callback MUST flush the change to disk.
......
...@@ -88,8 +88,8 @@ void raft_set_current_term(raft_server_t* me_, const int term) ...@@ -88,8 +88,8 @@ void raft_set_current_term(raft_server_t* me_, const int term)
{ {
me->current_term = term; me->current_term = term;
me->voted_for = -1; me->voted_for = -1;
assert(me->cb.persist_term); if (me->cb.persist_term)
me->cb.persist_term(me_, me->udata, term); me->cb.persist_term(me_, me->udata, term, me->voted_for);
} }
} }
......
...@@ -14,7 +14,8 @@ ...@@ -14,7 +14,8 @@
static int __raft_persist_term( static int __raft_persist_term(
raft_server_t* raft, raft_server_t* raft,
void *udata, void *udata,
const int val int term,
int vote
) )
{ {
return 0; return 0;
...@@ -23,7 +24,7 @@ static int __raft_persist_term( ...@@ -23,7 +24,7 @@ static int __raft_persist_term(
static int __raft_persist_vote( static int __raft_persist_vote(
raft_server_t* raft, raft_server_t* raft,
void *udata, void *udata,
const int val int vote
) )
{ {
return 0; return 0;
......
...@@ -18,7 +18,8 @@ ...@@ -18,7 +18,8 @@
static int __raft_persist_term( static int __raft_persist_term(
raft_server_t* raft, raft_server_t* raft,
void *udata, void *udata,
const int val int term,
int vote
) )
{ {
return 0; return 0;
...@@ -27,7 +28,7 @@ static int __raft_persist_term( ...@@ -27,7 +28,7 @@ static int __raft_persist_term(
static int __raft_persist_vote( static int __raft_persist_vote(
raft_server_t* raft, raft_server_t* raft,
void *udata, void *udata,
const int val int vote
) )
{ {
return 0; return 0;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment