update timeouts
This commit is contained in:
parent
55a5402bf5
commit
dd8ed42270
@ -26,12 +26,6 @@ pub struct TimerHandler {
|
|||||||
engine: Weak<Tendermint>,
|
engine: Weak<Tendermint>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TimerHandler {
|
|
||||||
pub fn new(engine: Weak<Tendermint>) -> Self {
|
|
||||||
TimerHandler { engine: engine }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Base timeout of each step in ms.
|
/// Base timeout of each step in ms.
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub struct DefaultTimeouts {
|
pub struct DefaultTimeouts {
|
||||||
@ -61,31 +55,36 @@ pub struct NextStep;
|
|||||||
pub const ENGINE_TIMEOUT_TOKEN: TimerToken = 0;
|
pub const ENGINE_TIMEOUT_TOKEN: TimerToken = 0;
|
||||||
|
|
||||||
impl IoHandler<NextStep> for TimerHandler {
|
impl IoHandler<NextStep> for TimerHandler {
|
||||||
fn initialize(&self, io: &IoContext<NextStep>) {
|
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.next_timeout()).expect("Error registering engine timeout");
|
io.register_timer_once(ENGINE_TIMEOUT_TOKEN, engine.remaining_step_duration().as_millis())
|
||||||
|
.unwrap_or_else(|e| warn!(target: "poa", "Failed to start consensus step timer: {}.", e))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn timeout(&self, io: &IoContext<NextStep>, timer: TimerToken) {
|
fn timeout(&self, io: &IoContext<BlockArrived>, timer: TimerToken) {
|
||||||
if timer == ENGINE_TIMEOUT_TOKEN {
|
if timer == ENGINE_TIMEOUT_TOKEN {
|
||||||
if let Some(engine) = self.engine.upgrade() {
|
if let Some(engine) = self.engine.upgrade() {
|
||||||
println!("Timeout: {:?}", get_time());
|
engine.step.fetch_add(1, AtomicOrdering::SeqCst);
|
||||||
// Can you release entering a clause?
|
engine.proposed.store(false, AtomicOrdering::SeqCst);
|
||||||
let next_step = match *engine.s.try_read().unwrap() {
|
let next_step = match *engine.step.try_read().unwrap() {
|
||||||
Step::Propose => Step::Propose,
|
Step::Propose => Step::Prevote,
|
||||||
Step::Prevote(_) => Step::Propose,
|
Step::Prevote => Step::Precommit,
|
||||||
Step::Precommit(_, _) => Step::Propose,
|
Step::Precommit => Step::Propose,
|
||||||
Step::Commit(_, _) => {
|
Step::Commit => {
|
||||||
engine.r.fetch_add(1, AtomicOrdering::Relaxed);
|
engine.round.fetch_add(1, AtomicOrdering::Relaxed);
|
||||||
Step::Propose
|
Step::Propose
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
match next_step {
|
|
||||||
Step::Propose => engine.to_propose(),
|
if let Some(ref channel) = *engine.message_channel.lock() {
|
||||||
_ => (),
|
match channel.send(ClientIoMessage::UpdateSealing) {
|
||||||
|
Ok(_) => trace!(target: "poa", "timeout: UpdateSealing message sent for step {}.", 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.next_timeout()).expect("Failed to restart consensus step timer.")
|
}
|
||||||
|
io.register_timer_once(ENGINE_TIMEOUT_TOKEN, engine.next_timeout().as_millis())
|
||||||
|
.unwrap_or_else(|e| warn!(target: "poa", "Failed to restart consensus step timer: {}.", e))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user