broker: add stopped-preserving upgrade without actor execution
ci / check (push) Failing after 1m47s
ci / check (push) Failing after 1m47s
This commit is contained in:
+19
-3
@@ -125,7 +125,7 @@ the request: the request's `type` in past tense (`spawned`, `upgraded`,
|
||||
| `type` | Fields | Effect |
|
||||
| --- | --- | --- |
|
||||
| `spawn` | `actor`, `wasm`, `source`?, `built_by`? | test, then start a new actor |
|
||||
| `upgrade` | `actor`, `wasm`, `source`?, `built_by`? | test, then swap the version |
|
||||
| `upgrade` | `actor`, `wasm`, `source`?, `built_by`?, `preserve_stopped`? (boolean, default `false`) | test, then swap the version; with `preserve_stopped: true`, a stopped actor is compiled and installed without execution and stays stopped |
|
||||
| `rollback` | `actor`, `version` | go back to an older version |
|
||||
| `stop`, `start` | `actor` | stop or start an actor |
|
||||
| `remove` | `actor` | stop the actor (normal shutdown), then delete its whole folder `/actor/<id>/` (all versions, `data/`, `public/`, logs); answer `{"type": "removed", "actor"}`. Messages to it are then undeliverable, and the ID can be spawned again. An unknown actor or a native one (`broker`, `console`, `cargo`, `fs`) is an `error` |
|
||||
@@ -182,10 +182,11 @@ change of `path` or a path under it (`/actor/a` covers `/actor/a/x`, not
|
||||
restarts and upgrades. `unwatch` with the same path ends it.
|
||||
|
||||
**Versions.** A new version (from `spawn`, `upgrade`, or a changed
|
||||
`actor.wasm` on disk) is tested first, while the old version keeps running.
|
||||
`actor.wasm` on disk) is tested first, while the old version keeps running
|
||||
(except the stopped-preserving upgrade described below).
|
||||
Only when its tests pass does the broker copy it to `versions/<n>/`
|
||||
(`actor.wasm`, `source/`, `meta.json`) and switch to it. So `versions/` holds
|
||||
exactly the versions that were installed, and instances always run from
|
||||
exactly the versions that were installed (including stopped installations), and instances always run from
|
||||
there. If the tests fail, nothing changes, and the sender gets an `error`
|
||||
with the reason. All versions share the actor's `data/` and `public/`: a
|
||||
new version must read the data of the old one.
|
||||
@@ -214,6 +215,21 @@ instance. A version without test files passes.
|
||||
top-level `actor.wasm` and `source/` a copy of the new version, and starts
|
||||
it. A rollback does the same with the older version.
|
||||
|
||||
**Stopped-preserving upgrade.** Send `upgrade` with `"preserve_stopped": true`
|
||||
to install a stopped actor's new program without starting it, running `main`
|
||||
(even as a candidate), or reading or sending any of its mail. The host compiles
|
||||
the WASM and copies the new version, source and metadata as usual, increments
|
||||
the version, and keeps `actor.json`'s `running: false`. Its mailbox, `data/`
|
||||
and `public/` stay untouched. Because candidate tests execute `main`, they are
|
||||
not run in this case: the `upgraded` reply contains
|
||||
`"tests": {"skipped": "preserve_stopped"}`. Test the build separately before
|
||||
installing it this way. An explicit `start` later runs the installed version
|
||||
and delivers the queued mail. No startup/crash probation runs for this stopped
|
||||
installation. Running actors still use the normal tested swap, even with this
|
||||
option. Omitting the option (or `false`) retains the existing behavior,
|
||||
including starting a stopped actor. Explicit stop/start requests serialize
|
||||
with upgrades of the same actor.
|
||||
|
||||
**Crashes.** The broker restarts a crashed actor after 0.5 s, then doubles
|
||||
the delay up to 30 s. A new version that crashes 3 times within 30 seconds
|
||||
after an upgrade goes back to the previous version. The actor that asked for
|
||||
|
||||
Reference in New Issue
Block a user