pub struct Context {Show 17 fields
pub inputs: Vec<Option<Packet>>,
pub input_batches: Vec<Vec<Packet>>,
pub staging: Vec<Vec<Packet>>,
pub next_bounds: Vec<Option<Timestamp>>,
pub input_ts: Timestamp,
pub node_name: String,
pub kernel_name: String,
pub in_ports: Arc<PortTable>,
pub out_ports: Arc<PortTable>,
pub options: Arc<Options>,
pub side_packets: Arc<BTreeMap<String, Packet>>,
pub shared: Arc<GraphShared>,
pub inputs_done: Vec<bool>,
pub error_msg: Option<String>,
pub close_reason: i32,
pub source_done: bool,
pub source_yield: Option<Duration>,
/* private fields */
}Expand description
一次算子调用的上下文。
Fields§
§inputs: Vec<Option<Packet>>本次的输入。None 表示已被 take_input 取走(CoW 省拷贝的前提)。
input_batches: Vec<Vec<Packet>>批处理(batch 策略)时本口的多个包;单包策略下恒空、走 inputs。见 input_count/input_at。
staging: Vec<Vec<Packet>>每个输出口的暂存队列;process 返回后由引擎分发。
next_bounds: Vec<Option<Timestamp>>算子显式推进的时间戳边界(不产出时用它告知下游)。
input_ts: Timestamp§node_name: String§kernel_name: String§in_ports: Arc<PortTable>§out_ports: Arc<PortTable>§options: Arc<Options>§side_packets: Arc<BTreeMap<String, Packet>>§inputs_done: Vec<bool>输入口是否已终结(上游关闭且排空)。
error_msg: Option<String>算子经 set_error 提供的失败原因。
close_reason: i32供 lmflow_ctx_close_reason 返回;进入 close 前由引擎写入。
source_done: bool源算子经 source_done() 自报「已产完」;引擎在 process 返回后读取。
source_yield: Option<Duration>源算子协作式让出 worker,并请求引擎在指定延迟后再次调度。
Implementations§
Source§impl Context
impl Context
pub fn new( node_name: String, kernel_name: String, in_ports: Arc<PortTable>, out_ports: Arc<PortTable>, options: Arc<Options>, side_packets: Arc<BTreeMap<String, Packet>>, shared: Arc<GraphShared>, ) -> Self
Sourcepub fn clear_inputs(&mut self)
pub fn clear_inputs(&mut self)
处理结束后立即释放本次输入的引用。
这条至关重要:若把输入留到下次 reset 才清,上游节点就会一直持有已处理完的包,
于是下游 take_input 看到的引用数 ≥ 2,CoW 必然复制 —— 「线性管线零拷贝」
这条不变量(docs/design.md §3.4)会对任何多节点管线静默失效。
顺带也避免大帧被无谓地多留一个周期。
Sourcepub fn discard_staging(&mut self)
pub fn discard_staging(&mut self)
失败时丢弃暂存,不把半成品输出传播下去(docs/design.md §7.7)。
pub fn node_name_cstr(&self) -> *const c_char
pub fn kernel_name_cstr(&self) -> *const c_char
pub fn intern(&self, s: &str) -> *const c_char
pub fn input(&self, idx: usize) -> Option<&Packet>
Sourcepub fn input_count(&self, idx: usize) -> usize
pub fn input_count(&self, idx: usize) -> usize
本次调用某输入口的包数(单包策略恒 0/1;batch 策略为该批实际大小)。
Sourcepub fn input_at(&self, idx: usize, k: usize) -> Option<&Packet>
pub fn input_at(&self, idx: usize, k: usize) -> Option<&Packet>
借用某输入口的第 k 个包(单包策略仅 k==0 有效)。统一单包 / 批两种交付。
Sourcepub fn take_input(&mut self, idx: usize) -> Packet
pub fn take_input(&mut self, idx: usize) -> Packet
取走输入包:所有权移交算子,槽位变空。这是 CoW 零拷贝的前提 ——
不取走的话上下文仍持一份引用,make_mutable 必然复制。
pub fn emit(&mut self, out_idx: usize, pkt: Packet) -> Result<()>
pub fn set_next_bound(&mut self, out_idx: usize, bound: Timestamp)
pub fn log(&self, level: i32, msg: &str)
pub fn set_error(&mut self, msg: &str)
Sourcepub fn take_error(&mut self, code: i32) -> Error
pub fn take_error(&mut self, code: i32) -> Error
组合出带节点名前缀的错误。
Auto Trait Implementations§
impl !Freeze for Context
impl !RefUnwindSafe for Context
impl !UnwindSafe for Context
impl Send for Context
impl Sync for Context
impl Unpin for Context
impl UnsafeUnpin for Context
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more