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 (
* For safety reasons this callback MUST flush the change to disk.
* @param[in] raft The Raft server making this callback
* @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 */
typedef int (
*func_persist_int_f
*func_persist_vote_f
) (
raft_server_t* raft,
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.
......@@ -278,11 +295,12 @@ typedef struct
/** Callback for persisting vote data
* 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
* For safety reasons this callback MUST flush the change to disk. */
func_persist_int_f persist_term;
/** Callback for persisting term (and nil vote) data
* For safety reasons this callback MUST flush the term and vote changes to
* disk atomically. */
func_persist_term_f persist_term;
/** Callback for adding an entry to the log
* 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)
{
me->current_term = term;
me->voted_for = -1;
assert(me->cb.persist_term);
me->cb.persist_term(me_, me->udata, term);
if (me->cb.persist_term)
me->cb.persist_term(me_, me->udata, term, me->voted_for);
}
}
......
......@@ -14,7 +14,8 @@
static int __raft_persist_term(
raft_server_t* raft,
void *udata,
const int val
int term,
int vote
)
{
return 0;
......@@ -23,7 +24,7 @@ static int __raft_persist_term(
static int __raft_persist_vote(
raft_server_t* raft,
void *udata,
const int val
int vote
)
{
return 0;
......
......@@ -18,7 +18,8 @@
static int __raft_persist_term(
raft_server_t* raft,
void *udata,
const int val
int term,
int vote
)
{
return 0;
......@@ -27,7 +28,7 @@ static int __raft_persist_term(
static int __raft_persist_vote(
raft_server_t* raft,
void *udata,
const int val
int vote
)
{
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