pub struct NotifyJob(/* private fields */);Expand description
Delivers queued notifications.
Holds the whole profile name -> dispatcher map rather than one dispatcher,
because there is exactly one handler for a kind and a job row names its own
profile. That is also why nothing deduplicates it at registration the way the
signer handlers are deduplicated: there is only ever one of these.
The map arrives as a Notifiers handle rather than a plain Arc because
this handler is registered once per generation but must see the current
configuration: a row queued by a reloaded router names a slot id only the new
map has, and an unknown one is retired rather than retried.
Implementations§
Trait Implementations§
Source§impl JobHandler for NotifyJob
impl JobHandler for NotifyJob
Source§fn run<'life0, 'life1, 'async_trait>(
&'life0 self,
job: &'life1 Job,
) -> Pin<Box<dyn Future<Output = JobOutcome> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn run<'life0, 'life1, 'async_trait>(
&'life0 self,
job: &'life1 Job,
) -> Pin<Box<dyn Future<Output = JobOutcome> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
One delivery attempt.
Three things retire the job immediately rather than retrying, and they share a shape: nothing about them can change between now and the fifth attempt. A payload that does not parse never will; a profile or a backend that is no longer configured is a configuration the operator changed under a queued row, and re-reading it every thirty seconds until the budget runs out would say nothing the first log line did not.
Source§fn abandon<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
job: &'life1 Job,
reason: &'life2 str,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn abandon<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
job: &'life1 Job,
reason: &'life2 str,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
The end of the line for one notification.
There is nobody to tell, which is the whole difference from
RelayJob::abandon: a relay’s subject is a client polling an order, and
this one’s subject is the operator whose only channel is what just
failed. So this is a log line and nothing else — but it is the log line
to alert on, because it is the moment a notification is genuinely lost.
Source§fn kind(&self) -> &'static str
fn kind(&self) -> &'static str
jobs.kind this handler answers for. One handler per kind — the
registry refuses a second, since two would each get half the rows.Source§fn lease(&self, _job: &Job) -> Option<Duration>
fn lease(&self, _job: &Job) -> Option<Duration>
Source§fn recover<'life0, 'life1, 'async_trait>(
&'life0 self,
_queue: &'life1 JobQueue,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn recover<'life0, 'life1, 'async_trait>(
&'life0 self,
_queue: &'life1 JobQueue,
) -> Pin<Box<dyn Future<Output = ()> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Auto Trait Implementations§
impl Freeze for NotifyJob
impl RefUnwindSafe for NotifyJob
impl Send for NotifyJob
impl Sync for NotifyJob
impl Unpin for NotifyJob
impl UnsafeUnpin for NotifyJob
impl UnwindSafe for NotifyJob
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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<A, B, T> HttpServerConnExec<A, B> for Twhere
B: Body,
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 more