The registry is addressed the way every other machine is

novox/hq 04-ISSUES/024. The registry machine had its address set with
`ip addr add`; every other machine gets a systemd-networkd unit. That
one difference stalled the lab indefinitely.

An address set by hand leaves networkd waiting to configure a link it
was never told about, so the link sits at `configuring` for ever.
`systemd-networkd-wait-online` has TimeoutStartUSec=infinity, so
`network-online.target` is never reached — and Docker is ordered after
it. `docker load` then blocked on a socket whose daemon was queued
behind a target that would never come.

Measured before and after on the same scenario: stuck with five pending
systemd jobs and `docker` inactive; now `enp5s0 configured`, `docker`
active, no jobs, and the whole raise completes in 87.5s.

The guess in the issue was wrong, and it was wrong in the usual way —
stocking had just been changed, so stocking looked guilty. Stocking
takes 34s and always did.

Two things that made this cost hours rather than minutes are fixed with
it. Placing an image now waits for the container runtime to answer and
refuses after 120s naming what systemd is waiting on, so a stall becomes
a failure that says why instead of three stacked timeouts totalling 35
minutes. And the end-to-end test passes `onProgress`, so a raise says
what step it is on — it printed nothing at all until it finished, which
is why 35 minutes of nothing read as a slow test.
This commit is contained in:
2026-09-01 09:37:16 +02:00
parent c30d71e249
commit 3503ad990b
4 changed files with 100 additions and 10 deletions
+7 -1
View File
@@ -170,7 +170,13 @@ before(async () => {
console.log(`warm: raising fresh — ${said.why}`);
}
const raised = await raise(loadScenario(`scenarios/${SCENARIO}.yml`), {});
// **Progress is printed, and that is not decoration** (novox/hq 04-ISSUES/024). A raise takes
// minutes and said nothing until it finished, so a stall and ordinary work were the same
// thing to look at — and the one time it mattered, thirty-five minutes of nothing was read as
// a slow test until somebody went and looked inside the machine.
const raised = await raise(loadScenario(`scenarios/${SCENARIO}.yml`), {
onProgress: (m) => console.log(`raise: ${m}`),
});
instanceId = raised.instanceId;
// The first node raises everything from a file rather than from a bundle built into the binary,