Supervise crashed boot service lifetimes with a latched crash limit
Keep one registration and restart owner across process cleanup and upgrades. Restart on failed process exit before or after readiness; give up after more than five crashes in a sliding ten-second window. Respect explicit stop and shutdown, and suppress boot-service fallbacks from retired hooks. Cover deterministic lifetime, boundary, give-up and admission races, plus real WASI failures on both sides of readiness. Document the host contract. Card: SAU-358
This commit is contained in:
@@ -85,7 +85,22 @@ fn main() {
|
||||
json!({"retired":version})
|
||||
}
|
||||
"serve" | "hold" => {
|
||||
// One genuine process failure, followed by a healthy service, without
|
||||
// timers or liveness polling in either the fixture or supervisor.
|
||||
let crash = request["params"]["crash_once"].as_str();
|
||||
let first = crash.is_some()
|
||||
&& std::fs::OpenOptions::new()
|
||||
.write(true)
|
||||
.create_new(true)
|
||||
.open(format!("/state/{plugin}/crashed-once"))
|
||||
.is_ok();
|
||||
if first && crash == Some("before") {
|
||||
std::process::exit(1);
|
||||
}
|
||||
send(json!({"jsonrpc":"2.0","id":request["id"],"result":{"version":version}}));
|
||||
if first && crash == Some("after") {
|
||||
std::process::exit(1);
|
||||
}
|
||||
if request["method"] == "serve" {
|
||||
std::fs::write(format!("/state/{plugin}/service"), version).unwrap();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user