@@ -46,35 +46,39 @@ impl RawNode<Candidate> {
46
46
Ok ( ( ) )
47
47
}
48
48
49
- /// Transforms the node into a follower. We either lost the election
50
- /// and follow the winner, or we discovered a new term in which case
51
- /// we step into it as a leaderless follower.
52
- fn become_follower ( mut self , term : Term , leader : Option < NodeID > ) -> Result < RawNode < Follower > > {
49
+ /// Transitions the candidate to a follower. We either lost the election and
50
+ /// follow the winner, or we discovered a new term in which case we step
51
+ /// into it as a leaderless follower.
52
+ pub ( super ) fn into_follower (
53
+ mut self ,
54
+ term : Term ,
55
+ leader : Option < NodeID > ,
56
+ ) -> Result < RawNode < Follower > > {
53
57
assert ! ( term >= self . term, "Term regression {} -> {}" , self . term, term) ;
54
58
55
59
if let Some ( leader) = leader {
56
60
// We lost the election, follow the winner.
57
61
assert_eq ! ( term, self . term, "Can't follow leader in different term" ) ;
58
62
info ! ( "Lost election, following leader {} in term {}" , leader, term) ;
59
63
let voted_for = Some ( self . id ) ; // by definition
60
- Ok ( self . become_role ( Follower :: new ( Some ( leader) , voted_for) ) )
64
+ Ok ( self . into_role ( Follower :: new ( Some ( leader) , voted_for) ) )
61
65
} else {
62
66
// We found a new term, but we don't necessarily know who the leader
63
67
// is yet. We'll find out when we step a message from it.
64
68
assert_ne ! ( term, self . term, "Can't become leaderless follower in current term" ) ;
65
69
info ! ( "Discovered new term {}" , term) ;
66
70
self . term = term;
67
71
self . log . set_term ( term, None ) ?;
68
- Ok ( self . become_role ( Follower :: new ( None , None ) ) )
72
+ Ok ( self . into_role ( Follower :: new ( None , None ) ) )
69
73
}
70
74
}
71
75
72
- /// Transition to leader role .
73
- pub ( super ) fn become_leader ( self ) -> Result < RawNode < Leader > > {
76
+ /// Transitions the candidate to a leader. We won the election .
77
+ pub ( super ) fn into_leader ( self ) -> Result < RawNode < Leader > > {
74
78
info ! ( "Won election for term {}, becoming leader" , self . term) ;
75
79
let peers = self . peers . clone ( ) ;
76
80
let ( last_index, _) = self . log . get_last_index ( ) ;
77
- let mut node = self . become_role ( Leader :: new ( peers, last_index) ) ;
81
+ let mut node = self . into_role ( Leader :: new ( peers, last_index) ) ;
78
82
node. heartbeat ( ) ?;
79
83
80
84
// Propose an empty command when assuming leadership, to disambiguate
@@ -98,7 +102,7 @@ impl RawNode<Candidate> {
98
102
// follower in it and step the message. If the message is a Heartbeat or
99
103
// AppendEntries from the leader, stepping it will follow the leader.
100
104
if msg. term > self . term {
101
- return self . become_follower ( msg. term , None ) ?. step ( msg) ;
105
+ return self . into_follower ( msg. term , None ) ?. step ( msg) ;
102
106
}
103
107
104
108
match msg. event {
@@ -110,14 +114,14 @@ impl RawNode<Candidate> {
110
114
Event :: GrantVote => {
111
115
self . role . votes . insert ( msg. from . unwrap ( ) ) ;
112
116
if self . role . votes . len ( ) as u64 >= self . quorum ( ) {
113
- return Ok ( self . become_leader ( ) ?. into ( ) ) ;
117
+ return Ok ( self . into_leader ( ) ?. into ( ) ) ;
114
118
}
115
119
}
116
120
117
121
// If we receive a heartbeat or entries in this term, we lost the
118
122
// election and have a new leader. Follow it and step the message.
119
123
Event :: Heartbeat { .. } | Event :: AppendEntries { .. } => {
120
- return self . become_follower ( msg. term , Some ( msg. from . unwrap ( ) ) ) ?. step ( msg) ;
124
+ return self . into_follower ( msg. term , Some ( msg. from . unwrap ( ) ) ) ?. step ( msg) ;
121
125
}
122
126
123
127
// Abort any inbound client requests while candidate.
0 commit comments