proper calculation of remaining step time

This commit is contained in:
keorn 2016-11-02 12:13:47 +00:00
parent da3253133c
commit 26155f51d5

View File

@ -103,8 +103,8 @@ impl AuthorityRound {
self.step.load(AtomicOrdering::SeqCst) self.step.load(AtomicOrdering::SeqCst)
} }
fn remaining_step_millis(&self) -> u64 { fn remaining_step_duration(&self) -> Duration {
unix_now().as_millis() % self.our_params.step_duration.as_millis() self.our_params.step_duration * (self.step() as u32 + 1) - unix_now()
} }
fn step_proposer(&self, step: usize) -> &Address { fn step_proposer(&self, step: usize) -> &Address {
@ -133,7 +133,7 @@ const ENGINE_TIMEOUT_TOKEN: TimerToken = 23;
impl IoHandler<BlockArrived> for TransitionHandler { impl IoHandler<BlockArrived> for TransitionHandler {
fn initialize(&self, io: &IoContext<BlockArrived>) { fn initialize(&self, io: &IoContext<BlockArrived>) {
if let Some(engine) = self.engine.upgrade() { if let Some(engine) = self.engine.upgrade() {
io.register_timer_once(ENGINE_TIMEOUT_TOKEN, engine.remaining_step_millis()).expect("Error registering engine timeout"); io.register_timer_once(ENGINE_TIMEOUT_TOKEN, engine.remaining_step_duration().as_millis()).expect("Error registering engine timeout");
} }
} }
@ -147,7 +147,7 @@ impl IoHandler<BlockArrived> for TransitionHandler {
Err(err) => trace!(target: "poa", "timeout: Could not send a sealing message {} for step {}.", err, engine.step.load(AtomicOrdering::Relaxed)), Err(err) => trace!(target: "poa", "timeout: Could not send a sealing message {} for step {}.", err, engine.step.load(AtomicOrdering::Relaxed)),
} }
} }
io.register_timer_once(ENGINE_TIMEOUT_TOKEN, engine.remaining_step_millis()).expect("Failed to restart consensus step timer.") io.register_timer_once(ENGINE_TIMEOUT_TOKEN, engine.remaining_step_duration().as_millis()).expect("Failed to restart consensus step timer.")
} }
} }
} }