From cae991a6885111e8e6c1df55b1e639635815f0da Mon Sep 17 00:00:00 2001 From: 0x5459 <0x5459@protonmail.com> Date: Fri, 4 Aug 2023 17:46:36 +0800 Subject: [PATCH] fix(worker): fix sealing Event::Setate --- .../src/sealing/sealing_thread/planner/common.rs | 12 ++++++++---- .../src/sealing/sealing_thread/planner/wdpost.rs | 13 +++++++++---- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/damocles-worker/src/sealing/sealing_thread/planner/common.rs b/damocles-worker/src/sealing/sealing_thread/planner/common.rs index 60ccb47e2..bf98a90cf 100644 --- a/damocles-worker/src/sealing/sealing_thread/planner/common.rs +++ b/damocles-worker/src/sealing/sealing_thread/planner/common.rs @@ -187,7 +187,7 @@ where let prev = self.job.sector.state; if let Some(evt) = event { - match evt { + match &evt { Event::Idle | Event::Retry => { tracing::debug!( prev = ?self.job.sector.state, @@ -200,9 +200,13 @@ where .wait_or_interrupted(self.job.sealing_ctrl.config().recover_interval)?; } - _ => { - let state = self.planner.plan(&evt, &self.job.sector.state).crit()?; - self.planner.apply(evt, state, &mut self.job).context("event apply").crit()?; + other => { + let next = if let Event::SetState(s) = other { + *s + } else { + self.planner.plan(other, &self.job.sector.state).crit()? + }; + self.planner.apply(evt, next, &mut self.job).context("event apply").crit()?; self.job.sector.sync().context("sync sector").crit()?; } }; diff --git a/damocles-worker/src/sealing/sealing_thread/planner/wdpost.rs b/damocles-worker/src/sealing/sealing_thread/planner/wdpost.rs index 6558257ab..c326ce77c 100644 --- a/damocles-worker/src/sealing/sealing_thread/planner/wdpost.rs +++ b/damocles-worker/src/sealing/sealing_thread/planner/wdpost.rs @@ -109,7 +109,7 @@ impl Sealer for WdPostSealer { } if let Some(evt) = event.take() { - match evt { + match &evt { WdPostEvent::Idle | WdPostEvent::Retry => { let recover_interval = self.job.sealing_ctrl.config().recover_interval; tracing::debug!( @@ -120,9 +120,14 @@ impl Sealer for WdPostSealer { self.job.sealing_ctrl.wait_or_interrupted(recover_interval)?; } - _ => { - let state = self.planner.plan(&evt, &self.job.state).crit()?; - self.planner.apply(evt, state, &mut self.job).context("event apply").crit()?; + other => { + let next = if let WdPostEvent::SetState(s) = other { + *s + } else { + self.planner.plan(other, &self.job.state).crit()? + }; + + self.planner.apply(evt, next, &mut self.job).context("event apply").crit()?; } }; };