apalis_workflow/dag/
error.rs

1use apalis_core::error::BoxDynError;
2use petgraph::{algo::Cycle, graph::NodeIndex};
3use std::fmt::Debug;
4use thiserror::Error;
5
6/// Errors that can occur during DAG workflow execution.
7#[derive(Error, Debug)]
8pub enum DagFlowError {
9    /// An error originating from the actual node execution.
10    #[error("Node execution error: {0}")]
11    Node(#[source] BoxDynError),
12    /// An error originating from the backend.
13    #[error("Backend error: {0}")]
14    Backend(#[source] BoxDynError),
15
16    /// An error originating from the service.
17    #[error("MissingService error: {0:?}")]
18    MissingService(petgraph::graph::NodeIndex),
19
20    /// An error originating from the service.
21    #[error("Service error: {0}")]
22    Service(#[source] BoxDynError),
23
24    /// An error related to codec operations.
25    #[error("Codec error: {0}")]
26    Codec(#[source] BoxDynError),
27
28    /// An error related to metadata operations.
29    #[error("Metadata error: {0}")]
30    Metadata(#[source] BoxDynError),
31
32    /// An error indicating that dependencies are not ready.
33    #[error("Dependencies not ready")]
34    DependenciesNotReady,
35
36    /// An error indicating a missing task ID for a dependency node.
37    #[error("Missing task ID for dependency node {0:?}")]
38    MissingDependencyTaskId(petgraph::graph::NodeIndex),
39
40    /// An error indicating that a task result was not found for a node.
41    #[error("Task result not found for node {0:?}")]
42    TaskResultNotFound(petgraph::graph::NodeIndex),
43
44    /// An error indicating that a dependency task has failed.
45    #[error("Dependency task failed: {0}")]
46    DependencyTaskFailed(String),
47
48    /// An error indicating an unexpected response type during fan-in.
49    #[error("Unexpected response type during fan-in")]
50    UnexpectedResponseType,
51
52    /// An error indicating a mismatch in the number of inputs during fan-in.
53    #[error("Input count mismatch: expected {expected} inputs for fan-in, got {actual}")]
54    InputCountMismatch {
55        /// The expected number of inputs.
56        expected: usize,
57        /// The actual number of inputs received.
58        actual: usize,
59    },
60    /// An error indicating that entry fan-out is not completed.
61    #[error("Entry fan-out not completed")]
62    EntryFanOutIncomplete,
63
64    /// DAG contains cycles.
65    #[error("DAG contains cycles involving nodes: {0:?}")]
66    CyclicDAG(Cycle<NodeIndex>),
67}