use serde::{Deserialize, Serialize};
use std::time::Duration;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub struct ShutdownPolicy {
pub graceful_timeout: Duration,
pub abort_wait: Duration,
pub abort_after_timeout: bool,
}
impl ShutdownPolicy {
pub fn new(
graceful_timeout: Duration,
abort_wait: Duration,
abort_after_timeout: bool,
) -> Self {
Self {
graceful_timeout,
abort_wait,
abort_after_timeout,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum ShutdownPhase {
Idle,
RequestStop,
GracefulDrain,
AbortStragglers,
Reconcile,
Completed,
}
impl ShutdownPhase {
pub fn next(self) -> Option<Self> {
match self {
Self::Idle => Some(Self::RequestStop),
Self::RequestStop => Some(Self::GracefulDrain),
Self::GracefulDrain => Some(Self::AbortStragglers),
Self::AbortStragglers => Some(Self::Reconcile),
Self::Reconcile => Some(Self::Completed),
Self::Completed => None,
}
}
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct ShutdownCause {
pub requested_by: String,
pub reason: String,
}
impl ShutdownCause {
pub fn new(requested_by: impl Into<String>, reason: impl Into<String>) -> Self {
Self {
requested_by: requested_by.into(),
reason: reason.into(),
}
}
}