#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct SourceTaskMemoryModel {
source_read_slots: u64,
source_adjacent_operator_slots: u64,
downstream_operator_slots: u64,
retained_output_slots: u64,
source_read_preflight_slack_slots: u64,
}
impl SourceTaskMemoryModel {
pub const fn aggregate_pipeline(has_source_adjacent_stages: bool) -> Self {
Self {
source_read_slots: 1,
source_adjacent_operator_slots: if has_source_adjacent_stages { 3 } else { 0 },
downstream_operator_slots: 1,
retained_output_slots: 1,
source_read_preflight_slack_slots: 1,
}
}
pub const fn shared_join_aggregate_stream(has_source_adjacent_stages: bool) -> Self {
Self {
source_read_slots: 1,
source_adjacent_operator_slots: if has_source_adjacent_stages { 3 } else { 0 },
downstream_operator_slots: 1,
retained_output_slots: 2,
source_read_preflight_slack_slots: 1,
}
}
pub const fn join_leaf_stream(has_source_adjacent_stages: bool) -> Self {
Self {
source_read_slots: 1,
source_adjacent_operator_slots: if has_source_adjacent_stages { 1 } else { 0 },
downstream_operator_slots: 1,
retained_output_slots: 2,
source_read_preflight_slack_slots: 1,
}
}
pub const fn unary_chain_frame() -> Self {
Self {
source_read_slots: 1,
source_adjacent_operator_slots: 1,
downstream_operator_slots: 1,
retained_output_slots: 1,
source_read_preflight_slack_slots: 1,
}
}
pub const fn source_read_slots(self) -> u64 {
self.source_read_slots
}
pub const fn source_adjacent_operator_slots(self) -> u64 {
self.source_adjacent_operator_slots
}
pub const fn downstream_operator_slots(self) -> u64 {
self.downstream_operator_slots
}
pub const fn retained_output_slots(self) -> u64 {
self.retained_output_slots
}
pub const fn source_read_preflight_slack_slots(self) -> u64 {
self.source_read_preflight_slack_slots
}
pub const fn live_slot_count(self) -> u64 {
self.source_read_slots
+ self.source_adjacent_operator_slots
+ self.downstream_operator_slots
+ self.retained_output_slots
+ self.source_read_preflight_slack_slots
}
}