pub fn boom() -> ChunkExpand description
Immediate Trap ÔÇö used to show crate::Supervisor restart.
Examples found in repository?
examples/crash_and_restart.rs (line 17)
15fn main() {
16 let rt = match Runtime::with_config(
17 samples::boom(),
18 RuntimeConfig {
19 workers: 1,
20 quantum: 1_000,
21 },
22 ) {
23 Ok(rt) => rt,
24 Err(e) => {
25 eprintln!("runtime: {e}");
26 std::process::exit(1);
27 }
28 };
29 let Some(boom) = rt.function_index("boom") else {
30 eprintln!("missing boom");
31 std::process::exit(1);
32 };
33 let sup = match Supervisor::with_config(
34 rt.spawner(),
35 SupervisorConfig {
36 max_restarts: 2,
37 max_period: Duration::from_secs(5),
38 },
39 ) {
40 Ok(s) => s,
41 Err(e) => {
42 eprintln!("supervisor: {e}");
43 std::process::exit(1);
44 }
45 };
46 if let Err(e) = sup.start_child(ChildSpec::new("boom", boom).restart(RestartPolicy::OnFailure))
47 {
48 eprintln!("start_child: {e}");
49 std::process::exit(1);
50 }
51
52 let start = std::time::Instant::now();
53 while !sup.intensity_exceeded() {
54 if start.elapsed() > Duration::from_secs(2) {
55 eprintln!("supervisor did not hit intensity in time");
56 std::process::exit(1);
57 }
58 thread::sleep(Duration::from_millis(5));
59 }
60
61 let metrics = rt.metrics();
62 println!("intensity exceeded after {} failures", metrics.processes_failed);
63 println!("{metrics}");
64 sup.shutdown();
65 rt.shutdown();
66}