Repository navigation
NAS-144436 / 28.0.0-BETA.1 / truenas-appliance-runner: skip GRUB's menu, and show where a boot's time goes - #22
Conversation
…e clock, and boot-report for where its time went
…ng ten seconds for it; boot-report shows this boot's middleware log and the journal's pauses
…he appliance and on the runner, and the guest's clocksource
| mark("system.ready") | ||
| if t0 is not None: | ||
| try: | ||
| uptime = float(c.call("system.info")["uptime_seconds"]) |
There was a problem hiding this comment.
LOW: The except here catches RPCError, KeyError, TypeError, ValueError, but RPC.call can also raise Closed or TimeoutError (lines 102/137/179). By this point system.ready has already succeeded. If the socket drops or system.info doesn't answer within 120 s, the exception escapes cmd_wait, start reports "the appliance's API never came up", and the boot fails because a diagnostic line failed. I can't name a realistic trigger, since the same socket has just answered, so this is LOW. Catching Exception (or adding Closed, OSError) would keep the uptime line from ever failing the boot.
|
One finding: one LOW. No human review is needed.
What else I checked and found sound:
|
|
This PR has been merged and conversations have been locked. |
A follow-up to #21. The appliance took 80+ s to answer its API; this makes the boot say where its time goes and takes 10 s off it.
What it found, across three image builds: there is no steal at either level. The appliance uses about one core for the whole boot, so the time is serial work made slower by nested virtualization. The details are in iXsystems/github-truenas-runner's `docs/e2e-appliances.md`, whose boot test runs `boot-report`.
Tested: `test_tnctl.py` and shellcheck in CI. Three appliance image builds ran these scripts from this branch: 38293612187, 38296400372 and 38298978367.