File tree 3 files changed +13
-13
lines changed
3 files changed +13
-13
lines changed Original file line number Diff line number Diff line change @@ -59,7 +59,7 @@ impl RoleNode<Follower> {
59
59
60
60
/// Transforms the node into a candidate, by campaigning for leadership in a
61
61
/// new term.
62
- fn become_candidate ( mut self ) -> Result < RoleNode < Candidate > > {
62
+ pub ( super ) fn become_candidate ( mut self ) -> Result < RoleNode < Candidate > > {
63
63
// Abort any forwarded requests. These must be retried with new leader.
64
64
self . abort_forwarded ( ) ?;
65
65
@@ -232,11 +232,6 @@ impl RoleNode<Follower> {
232
232
pub fn tick ( mut self ) -> Result < Node > {
233
233
self . assert ( ) ?;
234
234
235
- // If there are no peers, transition to leader immediately.
236
- if self . peers . is_empty ( ) {
237
- return Ok ( self . become_candidate ( ) ?. become_leader ( ) ?. into ( ) ) ;
238
- }
239
-
240
235
self . role . leader_seen += 1 ;
241
236
if self . role . leader_seen >= self . role . election_timeout {
242
237
return Ok ( self . become_candidate ( ) ?. into ( ) ) ;
Original file line number Diff line number Diff line change @@ -70,15 +70,20 @@ impl Node {
70
70
tokio:: spawn ( driver. drive ( state) ) ;
71
71
72
72
let ( term, voted_for) = log. get_term ( ) ?;
73
- Ok ( Node :: Follower ( RoleNode {
73
+ let node = RoleNode {
74
74
id,
75
75
peers,
76
76
term,
77
77
log,
78
78
node_tx,
79
79
state_tx,
80
80
role : Follower :: new ( None , voted_for) ,
81
- } ) )
81
+ } ;
82
+ if node. peers . is_empty ( ) {
83
+ // If there are no peers, become leader immediately.
84
+ return Ok ( node. become_candidate ( ) ?. become_leader ( ) ?. into ( ) ) ;
85
+ }
86
+ Ok ( node. into ( ) )
82
87
}
83
88
84
89
/// Returns the node ID.
@@ -460,7 +465,7 @@ mod tests {
460
465
461
466
#[ tokio:: test]
462
467
async fn new_single ( ) -> Result < ( ) > {
463
- let ( node_tx, _ ) = mpsc:: unbounded_channel ( ) ;
468
+ let ( node_tx, _node_rx ) = mpsc:: unbounded_channel ( ) ;
464
469
let node = Node :: new (
465
470
1 ,
466
471
HashSet :: new ( ) ,
Original file line number Diff line number Diff line change @@ -125,11 +125,11 @@ async fn status() -> Result<()> {
125
125
server: 1 ,
126
126
leader: 1 ,
127
127
term: 1 ,
128
- node_last_index: vec! [ ( 1 , 26 ) ] . into_iter ( ) . collect ( ) ,
129
- commit_index: 26 ,
130
- apply_index: 26 ,
128
+ node_last_index: [ ( 1 , 27 ) ] . into ( ) ,
129
+ commit_index: 27 ,
130
+ apply_index: 27 ,
131
131
storage: "bitcask" . into( ) ,
132
- storage_size: 1313 ,
132
+ storage_size: 1324 ,
133
133
} ,
134
134
mvcc: mvcc:: Status {
135
135
versions: 1 ,
You can’t perform that action at this time.
0 commit comments