use crate::error::QueryError;
use crate::job::{InstanceId, JobDetails, JobSummary, MaxRetries, Schedule, TKJobId};
use crate::metrics::MetricsSnapshot;
use chrono::{DateTime, Utc};
use fibre::oneshot;
use tokio::task::JoinHandle;
#[derive(Debug, Clone)]
pub struct JobUpdateData {
pub schedule: Option<Schedule>,
pub max_retries: Option<MaxRetries>,
}
#[derive(Debug)]
pub(crate) enum CoordinatorCommand {
GetJobDetails {
job_id: TKJobId,
responder: oneshot::Sender<Result<JobDetails, QueryError>>,
},
ListAllJobs {
responder: oneshot::Sender<Vec<JobSummary>>, },
GetMetricsSnapshot {
responder: oneshot::Sender<MetricsSnapshot>, },
CancelJob {
job_id: TKJobId,
responder: oneshot::Sender<Result<(), QueryError>>,
},
UpdateJob {
job_id: TKJobId,
update_data: JobUpdateData,
responder: oneshot::Sender<Result<(), QueryError>>,
},
TriggerJobNow {
job_id: TKJobId,
responder: oneshot::Sender<Result<(), QueryError>>, },
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ShutdownMode {
Graceful,
Force,
}
#[derive(Debug)]
pub(crate) enum WorkerOutcome {
Reschedule {
lineage_id: TKJobId,
completed_instance_id: InstanceId,
completed_instance_scheduled_time: DateTime<Utc>,
next_run_time: DateTime<Utc>,
updated_retry_count: u32,
},
Complete {
lineage_id: TKJobId,
completed_instance_id: InstanceId,
is_permanent_failure: bool,
},
FetchFailed {
instance_id: InstanceId,
lineage_id: TKJobId,
},
Panic {
lineage_id: TKJobId,
completed_instance_id: InstanceId,
panic_info: String,
},
}