# mvirt 0.24.18

migrations: no
wire: unchanged
rev: d69fbd544df2db348a1ed097b1e4ccb0bcb7e295

mvirt 0.24.18

A migration can no longer be applied while an older control-plane
replica can still be elected, and a replica whose store has moved past
its code steps aside at runtime instead of serving. Per-flow and per-VIP
datapath state is scoped to its vNIC, so two networks on one overlay
prefix can no longer share a conntrack or SNAT entry. Large rows
replicate in seconds instead of minutes.

- cplane: the schema gate holds a pending migration until a majority of
  voters reports the new version (named as schemaHeld on /v1/version),
  and a replica that finds unknown migration ids parks on any pass, not
  only at boot (#334, #323). Rolls stay in the usual order; see the
  runbook C1a for what this changes for the next migrating release.
- ebpf: CONN_TRACK, NAT_CT, ENDPOINT_CT and VIP_SNAT_V4 are keyed by the
  owning vNIC's tap; endpoint forward state by its NAT VNI (#315). The
  pinned map layout changes, so mvirt-ebpf starts with empty conntrack
  on the upgrade restart.
- mvdb: replicated byte fields are encoded as byte strings, which is
  byte-identical on the wire and on disk; a 6 MiB row now commits in
  under a second in a debug build (#353). The remaining single-entry
  ceiling is tracked in #368.


## 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.
