power: every reboot, poweroff and halt is bounded at 10 minutes (group fix/shutdown-bound, issue 1126) #547

Merged
mesh-tools merged 1 commits from fix/shutdown-bound into main 2026-10-28 15:05:06 +00:00
Member

Delivery group fix/shutdown-bound (mesh-host, mesh-catalog, mesh-tools). Issue 1126 notes 86, 89.

ace's reboot hung 29 minutes on units started again during the shutdown, until reboot.target's 30-minute job timeout. The power module (the node-power seat, on every node) now writes reboot.target.d, poweroff.target.d and halt.target.d/mesh-power.conf with JobTimeoutSec=10min, keeping each target's own forcing action (reboot-force, poweroff-force, halt-force), so the last phase still ends every process, unmounts and syncs. Ten minutes stays above the longest declared stop chain (mesh-power-before-shutdown 120 s plus 90 s defaults).

Quick vs thorough: this is the bound for any unit that comes back; the cause is fixed in mesh-tools (node-tools starts no bundle once stopping), and mesh-host loads the drop-ins.
Tests: TestEveryShutdownIsBoundedAtTenMinutes (failed first). power has 27 unit tests. The 22 catalog checks pass.
Not fixed (note 86): docker's live-restore leaves data-holding containers to the final kill.

Reviewed-by: rev-shutdown@shanks at 6724dab0cf

Delivery group fix/shutdown-bound (mesh-host, mesh-catalog, mesh-tools). Issue 1126 notes 86, 89. ace's reboot hung 29 minutes on units started again during the shutdown, until reboot.target's 30-minute job timeout. The power module (the node-power seat, on every node) now writes reboot.target.d, poweroff.target.d and halt.target.d/mesh-power.conf with JobTimeoutSec=10min, keeping each target's own forcing action (reboot-force, poweroff-force, halt-force), so the last phase still ends every process, unmounts and syncs. Ten minutes stays above the longest declared stop chain (mesh-power-before-shutdown 120 s plus 90 s defaults). Quick vs thorough: this is the bound for any unit that comes back; the cause is fixed in mesh-tools (node-tools starts no bundle once stopping), and mesh-host loads the drop-ins. Tests: TestEveryShutdownIsBoundedAtTenMinutes (failed first). power has 27 unit tests. The 22 catalog checks pass. Not fixed (note 86): docker's live-restore leaves data-holding containers to the final kill. Reviewed-by: rev-shutdown@shanks at 6724dab0cf96ab2de446e28eebd742be24b72d61
mesh-tools added 1 commit 2026-10-28 14:51:41 +00:00
power: bound every shutdown at ten minutes, not systemd's thirty (issue 1126)
mesh/delivery merged: source.main moved to novox/mesh-catalog@58309a972945
mesh/delivery-group group fix/shutdown-bound merged: every member is merged
mesh/check pass 6724dab0cf96 on 387ee59140c4 | unit 2192 run, 3794 kept, 57 skipped | integration 2208 run, 3829 kept, 57 skipped | over bound: unit, …
6724dab0cf
On ace's reboot of 2026-10-28 every unit had stopped within 17 s, yet the bus and
polkit were started again during the shutdown, nothing stopped them a second
time, and the reboot waited on reboot.target's 30-minute job timeout, silent,
until the operator forced it. node-power owns the shutdown on every machine, so
its drop-ins on reboot, poweroff and halt shorten the bound; each target keeps
its own forcing action, so the last phase still ends every process, unmounts
and syncs. The cause, node-tools starting bundles again while it stops, is
fixed in mesh-tools.
Author
Member

Delivery novox/mesh-catalog@6724dab0cf96 — merged since 2026-10-28T15:05:09Z

Source — source.main moved to novox/mesh-catalog@58309a9729. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.

Group fix/shutdown-bound: novox/mesh-catalog@6724dab0cf, novox/mesh-host@bc28606d45, novox/mesh-tools@a9b02bc676

  • composed together: pass — the checker's verdict at the members' heads (420d9ef1bdb7)

Transitions

  • 2026-10-28 14:51 (new) → proposed (announced): novox/mesh-catalog#547's head announced
  • 2026-10-28 14:51 proposed → ready (accepted): a verdict names this commit and the trunk's head as its trunk commit, the gate passed or warned, and the repository's own check did not fail; or the check gates no merge (check-gates-merge false)
  • 2026-10-28 15:05 ready → merged (merged): on the trunk its modules follow: merged there

The commit's note under refs/notes/mesh-plan keeps every transition of this change up to its merge: git log --notes=mesh-plan.

<!-- mesh-delivery:view --> **Delivery** `novox/mesh-catalog@6724dab0cf96` — **merged** since 2026-10-28T15:05:09Z **Source** — source.main moved to novox/mesh-catalog@58309a972945. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves. **Group** `fix/shutdown-bound`: novox/mesh-catalog@6724dab0cf96, novox/mesh-host@bc28606d4566, novox/mesh-tools@a9b02bc67604 - composed together: pass — the checker's verdict at the members' heads (420d9ef1bdb7) **Transitions** - 2026-10-28 14:51 (new) → proposed (announced): novox/mesh-catalog#547's head announced - 2026-10-28 14:51 proposed → ready (accepted): a verdict names this commit and the trunk's head as its trunk commit, the gate passed or warned, and the repository's own check did not fail; or the check gates no merge (check-gates-merge false) - 2026-10-28 15:05 ready → merged (merged): on the trunk its modules follow: merged there The commit's note under `refs/notes/mesh-plan` keeps every transition of this change up to its merge: `git log --notes=mesh-plan`.
mesh-tools merged commit 58309a9729 into main 2026-10-28 15:05:06 +00:00
mesh-tools deleted branch fix/shutdown-bound 2026-10-28 15:05:07 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-catalog#547