pub struct IngressQueue { /* private fields */ }Expand description
Lock-free MPMC ingress queue + waker. Multiple external
producers may push concurrently; the engine’s single consumer
drains via drain_all on each poll cycle.
Implementations§
Source§impl IngressQueue
impl IngressQueue
Sourcepub fn new() -> Self
pub fn new() -> Self
Construct a fresh ingress queue with the default capacity
(DEFAULT_INGRESS_CAPACITY).
Sourcepub fn with_capacity(capacity: usize) -> Self
pub fn with_capacity(capacity: usize) -> Self
Construct a fresh ingress queue with the supplied bounded
capacity. Per ENGINE.md §2.2 the canonical sizing is
bus_capacity * 4; pass the host’s chosen bus_capacity
multiplied by 4 to match.
Sourcepub fn completion_result_cap(&self) -> usize
pub fn completion_result_cap(&self) -> usize
Per-complete() result-byte cap. Defaults to usize::MAX
when not configured; apply_config_caps reseeds it from
NodeConfig::max_completion_result_bytes.
Sourcepub fn push(&self, event: IngressEvent) -> Result<(), IngressEvent>
pub fn push(&self, event: IngressEvent) -> Result<(), IngressEvent>
Push an event. On success returns Ok(()) and wakes the
engine if it’s sleeping. On a full queue the event comes
back in Err(_) and the dropped_overflow counter is
incremented; transport adapters decide whether to retry,
drop with a metric, or escalate as back-pressure. The
IngressEvent Err variant is large (carries a
WireEnvelope with multihash PeerIds); transport adapters
already box or re-queue, so the cost lives at the boundary.
Sourcepub fn drain_all(&self) -> Vec<IngressEvent>
pub fn drain_all(&self) -> Vec<IngressEvent>
Drain all available events. Called by the engine on each poll cycle’s ingress drain.
Pre-reserves capacity for the bounded queue’s full length so the
drain Vec grows once at construction, not in O(log n)
reallocations as events pop. The queue itself caps inflight at
self.capacity(); the drain is bounded by the same cap, so the
upfront reservation is the exact-fit answer.
Sourcepub fn register_waker(&self, waker: &Waker)
pub fn register_waker(&self, waker: &Waker)
Register the engine’s waker so future pushes can wake it.
Sourcepub fn len(&self) -> usize
pub fn len(&self) -> usize
Approximate current queue depth. The underlying
concurrent-queue returns an approximate len for the
MPMC case; introspection callers should treat
this as a snapshot, not a real-time invariant.
Sourcepub fn capacity(&self) -> usize
pub fn capacity(&self) -> usize
Bounded capacity supplied at construction. concurrent-queue
guarantees Some(cap) for bounded queues, so unwrapping is
safe for the framework’s path that never builds an unbounded
ingress queue.
Sourcepub fn dropped_overflow(&self) -> u64
pub fn dropped_overflow(&self) -> u64
Total events dropped due to the queue being full since this queue was constructed. Telemetry hook for transport adapters
- Node introspection.
Trait Implementations§
Source§impl CompletionSink for IngressQueue
impl CompletionSink for IngressQueue
Auto Trait Implementations§
impl !Freeze for IngressQueue
impl !RefUnwindSafe for IngressQueue
impl Send for IngressQueue
impl Sync for IngressQueue
impl Unpin for IngressQueue
impl UnsafeUnpin for IngressQueue
impl UnwindSafe for IngressQueue
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
impl<T> ErasedComponent for T
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request