kona_engine/task_queue/tasks/insert/
error.rs

1//! Contains the error types for the [InsertTask].
2//!
3//! [InsertTask]: crate::InsertTask
4
5use crate::{
6    EngineTaskError, SynchronizeTaskError, task_queue::tasks::task::EngineTaskErrorSeverity,
7};
8use alloy_rpc_types_engine::PayloadStatusEnum;
9use alloy_transport::{RpcError, TransportErrorKind};
10use kona_protocol::FromBlockError;
11use op_alloy_rpc_types_engine::OpPayloadError;
12
13/// An error that occurs when running the [InsertTask].
14///
15/// [InsertTask]: crate::InsertTask
16#[derive(Debug, thiserror::Error)]
17pub enum InsertTaskError {
18    /// Error converting a payload into a block.
19    #[error(transparent)]
20    FromBlockError(#[from] OpPayloadError),
21    /// Failed to insert new payload.
22    #[error("Failed to insert new payload: {0}")]
23    InsertFailed(RpcError<TransportErrorKind>),
24    /// Unexpected payload status
25    #[error("Unexpected payload status: {0}")]
26    UnexpectedPayloadStatus(PayloadStatusEnum),
27    /// Inconsistent forchoice state.
28    #[error("Inconsistent forkchoice state; Pipeline reset required")]
29    InconsistentForkchoiceState,
30    /// Error converting the payload + chain genesis into an L2 block info.
31    #[error(transparent)]
32    L2BlockInfoConstruction(#[from] FromBlockError),
33    /// The forkchoice update call to consolidate the block into the engine state failed.
34    #[error(transparent)]
35    ForkchoiceUpdateFailed(#[from] SynchronizeTaskError),
36}
37
38impl EngineTaskError for InsertTaskError {
39    fn severity(&self) -> EngineTaskErrorSeverity {
40        match self {
41            Self::FromBlockError(_) => EngineTaskErrorSeverity::Critical,
42            Self::InsertFailed(_) => EngineTaskErrorSeverity::Temporary,
43            Self::UnexpectedPayloadStatus(_) => EngineTaskErrorSeverity::Critical,
44            Self::L2BlockInfoConstruction(_) => EngineTaskErrorSeverity::Critical,
45            Self::InconsistentForkchoiceState => EngineTaskErrorSeverity::Reset,
46            Self::ForkchoiceUpdateFailed(inner) => inner.severity(),
47        }
48    }
49}