@@ -15,17 +15,25 @@ impl VerifiedVotePackets {
1515 & mut self ,
1616 vote_packets_receiver : & VerifiedLabelVotePacketsReceiver ,
1717 last_update_version : & mut u64 ,
18+ would_be_leader : bool ,
1819 ) -> Result < ( ) > {
1920 let timer = Duration :: from_millis ( 200 ) ;
2021 let vote_packets = vote_packets_receiver. recv_timeout ( timer) ?;
2122 * last_update_version += 1 ;
22- for ( label, slot, packet) in vote_packets {
23- self . 0 . insert ( label, ( * last_update_version, slot, packet) ) ;
24- }
25- while let Ok ( vote_packets) = vote_packets_receiver. try_recv ( ) {
23+ if would_be_leader {
2624 for ( label, slot, packet) in vote_packets {
2725 self . 0 . insert ( label, ( * last_update_version, slot, packet) ) ;
2826 }
27+ } else {
28+ self . 0 . clear ( ) ;
29+ self . 0 . shrink_to_fit ( ) ;
30+ }
31+ while let Ok ( vote_packets) = vote_packets_receiver. try_recv ( ) {
32+ if would_be_leader {
33+ for ( label, slot, packet) in vote_packets {
34+ self . 0 . insert ( label, ( * last_update_version, slot, packet) ) ;
35+ }
36+ }
2937 }
3038 Ok ( ( ) )
3139 }
@@ -137,7 +145,7 @@ mod tests {
137145 s. send ( vec ! [ ( label1. clone( ) , 42 , later_packets) ] ) . unwrap ( ) ;
138146 let mut verified_vote_packets = VerifiedVotePackets ( HashMap :: new ( ) ) ;
139147 verified_vote_packets
140- . receive_and_process_vote_packets ( & r, & mut update_version)
148+ . receive_and_process_vote_packets ( & r, & mut update_version, true )
141149 . unwrap ( ) ;
142150
143151 // Test timestamps for same batch are the same
@@ -171,15 +179,15 @@ mod tests {
171179 s. send ( vec ! [ ( label2. clone( ) , 51 , Packets :: default ( ) ) ] )
172180 . unwrap ( ) ;
173181 verified_vote_packets
174- . receive_and_process_vote_packets ( & r, & mut update_version)
182+ . receive_and_process_vote_packets ( & r, & mut update_version, true )
175183 . unwrap ( ) ;
176184 let update_version2 = verified_vote_packets. get_vote_packets ( & label2) . unwrap ( ) . 0 ;
177185 assert ! ( update_version2 > update_version1) ;
178186
179187 // Test empty doesn't bump the version
180188 let before = update_version;
181189 assert_matches ! (
182- verified_vote_packets. receive_and_process_vote_packets( & r, & mut update_version) ,
190+ verified_vote_packets. receive_and_process_vote_packets( & r, & mut update_version, true ) ,
183191 Err ( Error :: CrossbeamRecvTimeoutError ( RecvTimeoutError :: Timeout ) )
184192 ) ;
185193 assert_eq ! ( before, update_version) ;
0 commit comments