pub struct ClientHandler { /* private fields */ }Expand description
cdn/client/v1 paid-delivery handler.
Implementations§
Source§impl ClientHandler
impl ClientHandler
Sourcepub fn lane_activity_clock(&self) -> LaneActivityClock
pub fn lane_activity_clock(&self) -> LaneActivityClock
A read handle over this handler’s live lane registry for the admin
lanes surface (issue #1733): the last-voucher clock the operator’s
“seconds since last voucher” readout reads. Shares the registry Arc, so
it observes every stamp the voucher-accept path writes without a separate
shared structure.
Source§impl ClientHandler
impl ClientHandler
Sourcepub const ALPN: &'static [u8] = ALPN_CLIENT
pub const ALPN: &'static [u8] = ALPN_CLIENT
The ALPN this handler answers on: cdn/client/v1, the single paid
delivery protocol for both client-to-node and node-to-node transfers.
Sourcepub fn new(deps: ClientHandlerDeps) -> Result<Self>
pub fn new(deps: ClientHandlerDeps) -> Result<Self>
Construct the handler from ClientHandlerDeps, hydrating per-channel
state from the deps’ channel_state_store.
All optional runtime wiring (settlement redeem hints, pull-through
deadlines, the window/leech providers, …) is supplied on deps as
Some/None at construction — there is no post-construction attach step,
so a handler’s full wiring is one reviewable literal at its call site.
§Errors
Propagates a decdn_incentive::StoreError if the persisted channel
state cannot be loaded — the node must not serve paid delivery without
knowing prior voucher state (the #527 replay guard).
Sourcepub fn register_lane(&self, state: LaneState) -> Result<(), StoreError>
pub fn register_lane(&self, state: LaneState) -> Result<(), StoreError>
Register a lane so the voucher path accepts vouchers for it — its
capability handle is registered on-chain and its LaneState recorded
in the lane store, then inserted into the live map. Called both from the
on-chain capability-registration consumer (#327) and from the
seller-side capability intake on the first voucher of a new lane.
Idempotent: a re-observed registration for an already-tracked lane is a no-op — it MUST NOT reset the accepted-voucher watermark and reopen the #527 replay window. The live map (hydrated from the store at construction, updated here) is the authority.
§Errors
Propagates a StoreError if the store record fails.
Sourcepub async fn forget_lane(&self, key: LaneKey) -> Result<(), StoreError>
pub async fn forget_lane(&self, key: LaneKey) -> Result<(), StoreError>
Drop a settled lane from the live map and the lane store, where the removal is a buffered tombstone that the next flush applies to disk. Idempotent — forgetting an unknown lane is a no-op.
§Errors
Propagates a StoreError if the store cannot take the tombstone (its
buffer mutex is poisoned), or if the blocking store task fails to join —
a panic inside the store, or the runtime shutting down mid-call.
Trait Implementations§
Auto Trait Implementations§
impl !Freeze for ClientHandler
impl !RefUnwindSafe for ClientHandler
impl !UnwindSafe for ClientHandler
impl Send for ClientHandler
impl Sync for ClientHandler
impl Unpin for ClientHandler
impl UnsafeUnpin for ClientHandler
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
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> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§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