# mvirt 0.27.3

migrations: no
wire: unchanged
rev: ce5c64e08ed9e0e1a088622316cccfd42f9395d5

mvirt 0.27.3

The fixes from the 0.27.1 roll outage: one wedged pod-VM no longer stalls
a node, the repository GC no longer freezes every node's slice for
minutes at a time, and a node can always find a surviving control plane.

- vmm, node: every call into a pod-VM guest has a deadline, and each pod
  gets a bounded share of the node's reconcile pass, so one silent guest
  cannot hold back every other pod on the host (#388). On 0.27.1's roll a
  wedged guest on mvirt-1 kept 8 failed pulls from ever being retried.
- one: a pull token that cannot be fetched is reported as such (and
  retried by the restart policy), not as "Not authorized" (#388).
- cplane: every converger step is bounded to 120 s and skipped for that
  pass when it runs over; the repository GC reads manifests 16 at a time.
  Before, the GC held every node's slice for ~5 min of every 15 (#389).
- cplane, node: every control-plane replica registers its own tunnel
  endpoint, so nodes learn all of them, not only the leader's (#378).
  Additive heartbeat field; mixed versions degrade to the old behaviour.
- cplane, node, vmm: a VM is created with its vNICs in one transaction,
  and the node attaches a vNIC missing from a VM's definition in place
  (hot-plug when running) (#387).
- cplane, node: a node joining the control-plane group no longer restarts
  the running voters (#383).
- cplane, node: a join whose redeem response is lost resumes with the
  same key and token; any other key is still refused (#377).


## Upgrading

Point your flake's `mvirt` input at this release and redeploy the control-plane
host first, then each node in turn:

```
nix run .#colmena -- apply boot --reboot --on <control-plane host>
nix run .#colmena -- apply boot --reboot --on <node>   # one at a time
```

This release adds no migrations, so the control-plane host rolls back the same way
a node does: boot the previous NixOS generation.
