Check if poh recorder has over stepped the leader slot
This commit is contained in:
		@@ -92,9 +92,10 @@ impl PohRecorder {
 | 
				
			|||||||
                let leader_ideal_start_tick =
 | 
					                let leader_ideal_start_tick =
 | 
				
			||||||
                    target_tick.saturating_sub(self.max_last_leader_grace_ticks);
 | 
					                    target_tick.saturating_sub(self.max_last_leader_grace_ticks);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if self.tick_height() >= target_tick
 | 
					                if self.tick_height().saturating_sub(target_tick) < self.max_last_leader_grace_ticks
 | 
				
			||||||
                    || self.max_last_leader_grace_ticks
 | 
					                    && (self.tick_height() >= target_tick
 | 
				
			||||||
                        >= target_tick.saturating_sub(self.start_tick)
 | 
					                        || self.max_last_leader_grace_ticks
 | 
				
			||||||
 | 
					                            >= target_tick.saturating_sub(self.start_tick))
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                    return (
 | 
					                    return (
 | 
				
			||||||
                        true,
 | 
					                        true,
 | 
				
			||||||
@@ -763,5 +764,24 @@ mod tests {
 | 
				
			|||||||
        // without sending more ticks, we should be leader now
 | 
					        // without sending more ticks, we should be leader now
 | 
				
			||||||
        assert_eq!(poh_recorder.reached_leader_tick().0, true);
 | 
					        assert_eq!(poh_recorder.reached_leader_tick().0, true);
 | 
				
			||||||
        assert_eq!(poh_recorder.reached_leader_tick().1, 1);
 | 
					        assert_eq!(poh_recorder.reached_leader_tick().1, 1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Let's test that if a node overshoots the ticks for its target
 | 
				
			||||||
 | 
					        // leader slot, reached_leader_tick() will return false
 | 
				
			||||||
 | 
					        // Set the leader slot 1 slot down
 | 
				
			||||||
 | 
					        poh_recorder.reset(
 | 
				
			||||||
 | 
					            poh_recorder.tick_height(),
 | 
				
			||||||
 | 
					            bank.last_blockhash(),
 | 
				
			||||||
 | 
					            4,
 | 
				
			||||||
 | 
					            Some(5),
 | 
				
			||||||
 | 
					            bank.ticks_per_slot(),
 | 
				
			||||||
 | 
					        );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // Send remaining ticks for the slot (remember we sent extra ticks in the previous part of the test)
 | 
				
			||||||
 | 
					        for _ in 0..4 * bank.ticks_per_slot() {
 | 
				
			||||||
 | 
					            poh_recorder.tick();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // We are not the leader, as expected
 | 
				
			||||||
 | 
					        assert_eq!(poh_recorder.reached_leader_tick().0, false);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user