use std::{net::SocketAddr, path::PathBuf};
use dora_core::{
config::{DataId, NodeId, NodeRunConfig, OperatorId},
descriptor::{Descriptor, OperatorDefinition},
};
use crate::{metadata::Metadata, DataflowId};
pub use crate::common::{DataMessage, DropToken, SharedMemoryId, Timestamped};
#[derive(Debug, serde::Serialize, serde::Deserialize)]
pub struct RuntimeConfig {
pub node: NodeConfig,
pub operators: Vec<OperatorDefinition>,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct NodeConfig {
pub dataflow_id: DataflowId,
pub node_id: NodeId,
pub run_config: NodeRunConfig,
pub daemon_communication: DaemonCommunication,
pub dataflow_descriptor: Descriptor,
pub dynamic: bool,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub enum DaemonCommunication {
Shmem {
daemon_control_region_id: SharedMemoryId,
daemon_drop_region_id: SharedMemoryId,
daemon_events_region_id: SharedMemoryId,
daemon_events_close_region_id: SharedMemoryId,
},
Tcp {
socket_addr: SocketAddr,
},
#[cfg(unix)]
UnixDomain {
socket_file: PathBuf,
},
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
#[must_use]
pub enum DaemonReply {
Result(Result<(), String>),
PreparedMessage { shared_memory_id: SharedMemoryId },
NextEvents(Vec<Timestamped<NodeEvent>>),
NextDropEvents(Vec<Timestamped<NodeDropEvent>>),
NodeConfig { result: Result<NodeConfig, String> },
Empty,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub enum NodeEvent {
Stop,
Reload {
operator_id: Option<OperatorId>,
},
Input {
id: DataId,
metadata: Metadata,
data: Option<DataMessage>,
},
InputClosed {
id: DataId,
},
AllInputsClosed,
}
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub enum NodeDropEvent {
OutputDropped { drop_token: DropToken },
}