pub struct ManagedClientHandle { /* private fields */ }Expand description
Cloneable control and observation capability for a managed task.
Implementations§
Source§impl ManagedClientHandle
impl ManagedClientHandle
Sourcepub fn status(&self) -> Arc<ManagedStatus> ⓘ
pub fn status(&self) -> Arc<ManagedStatus> ⓘ
Return the latest durable immutable status snapshot.
Sourcepub fn subscribe_status(&self) -> ManagedStatusSubscription
pub fn subscribe_status(&self) -> ManagedStatusSubscription
Subscribe to authoritative durable latest-state observation.
The current snapshot is marked as seen when subscribing.
The current snapshot is immediately available through borrow(). Updates
may coalesce; this is not a lossless event log. After the task terminates,
the sender closes but the final snapshot remains readable. Use
Self::subscribe for the lossy presentation-event stream.
Sourcepub fn subscribe(
&self,
) -> Result<ManagedEventSubscription, ManagedSubscribeError>
pub fn subscribe( &self, ) -> Result<ManagedEventSubscription, ManagedSubscribeError>
Subscribe to future lossy presentation events.
Sourcepub fn stop(&self) -> ManagedStopReceipt ⓘ
pub fn stop(&self) -> ManagedStopReceipt ⓘ
Request idempotent graceful stop and return a durable-status receipt.
Examples found in repository?
27fn main() {
28 let config = ManagedClientConfig {
29 client: ClientConfig {
30 open: OpenPolicy {
31 timeouts: vec![Duration::from_millis(300)],
32 ..Default::default()
33 },
34 request: SessionRequest {
35 duration: None,
36 interval: Duration::from_millis(200),
37 ..Default::default()
38 },
39 ..Default::default()
40 },
41 completion: ManagedCompletionPolicy::ExplicitStop,
42 ..Default::default()
43 };
44 let targets = vec![ManagedTargetConfig::new("local", "127.0.0.1:2112")];
45
46 let (owner, mut events) = match BlockingManagedClient::start_with_subscription(config, targets)
47 {
48 Ok(started) => started,
49 Err(err) => {
50 eprintln!("failed to start managed client: {err}");
51 return;
52 }
53 };
54
55 let stop_after = Duration::from_secs(1);
56 let deadline = std::time::Instant::now() + stop_after;
57 while std::time::Instant::now() < deadline {
58 match events.try_recv() {
59 Ok(event) => print_event(&event),
60 Err(_) => std::thread::sleep(Duration::from_millis(50)),
61 }
62 }
63
64 // `stop()` requests the stop synchronously; the returned receipt is only
65 // useful for awaiting durable acknowledgement, which this blocking
66 // example does not need.
67 std::mem::drop(owner.handle().stop());
68 match owner.join() {
69 Ok(outcome) => println!("managed run ended: {:?}", outcome.end_reason),
70 Err(err) => eprintln!("managed worker did not join cleanly: {err}"),
71 }
72}Sourcepub fn update_targets(
&self,
targets: Vec<ManagedTargetConfig>,
) -> Result<ManagedCommandReceipt, ManagedCommandError>
pub fn update_targets( &self, targets: Vec<ManagedTargetConfig>, ) -> Result<ManagedCommandReceipt, ManagedCommandError>
Submit the complete desired target set, replacing any previous one.
targets is not a delta: any live target whose id is missing from
targets is stopped and removed. A target that is still present with an
unchanged configuration continues undisturbed — it is not restarted and
does not get a new generation. A target present with a changed
configuration, or whose current generation already reached a terminal
state (e.g. failed, completed, or was closed by the peer), is treated as
a fresh start: it is retired and a new generation is created for it, even
if the configuration is byte-for-byte identical to the one that just
finished.
This call enqueues the update without waiting for queue capacity; await
the returned ManagedCommandReceipt to observe whether — and how — it
was applied.