make bao readers want swarm-bao-pki and drop its start limit
A pki start refused by its start limit failed every reader that Requires= it with `dependency`. That leaves a unit inactive, not failed, so Restart=on-failure never fired and readers without a refresh timer never ran again (#5381: grafana 502 for ~43 min). Readers and granting units now Wants= + After= pki; one whose leaf is still missing fails its login with exit 1 into its existing retry. pki gets StartLimitIntervalSec=0: it is deliberately not RemainAfterExit, so each reader's start re-runs it.
This commit is contained in:
parent
141be16c6d
commit
265f8a47cc
12 changed files with 95 additions and 46 deletions
|
|
@ -1,18 +1,23 @@
|
|||
# Glue: where the store and one of its readers share a host, the reader waits
|
||||
# for the store's container and requires `swarm-bao-pki`, which mints the leaf
|
||||
# the reader logs in with.
|
||||
# for the store's container and `swarm-bao-pki`, which mints the leaf the
|
||||
# reader logs in with.
|
||||
#
|
||||
# ONE PAIRING PER FILE — the store's container and PKI unit ← the readers that
|
||||
# log in to it, and nothing else. The waits on the store's policy units are
|
||||
# ./glue-bao-readers-policy-order.nix's.
|
||||
#
|
||||
# `Wants=` on `swarm-bao-pki`, not `Requires=`: a pki start that fails or is
|
||||
# refused fails each requirer's job with `dependency`, which leaves the reader
|
||||
# inactive rather than failed, so its `Restart=on-failure` never fires. Here
|
||||
# the reader runs anyway; with its leaf still missing, its login exits 1 into
|
||||
# ./lib/store-retry.nix's retries.
|
||||
#
|
||||
# ⚠️ Gated on BOTH the store and that reader being here. Off the store's host
|
||||
# neither unit exists, and `Requires=` on an absent unit fails the job, so
|
||||
# there the reader's own start timeout bounds the attempt instead. On the
|
||||
# store's host without the reader, setting `systemd.services.<reader>.after`
|
||||
# would define a unit with no ExecStart, so each gate below restates the one
|
||||
# the reader's own module puts on it. A reader whose gate changes must change
|
||||
# here too.
|
||||
# neither unit exists, and the reader's own start timeout bounds the attempt
|
||||
# instead. On the store's host without the reader, setting
|
||||
# `systemd.services.<reader>.after` would define a unit with no ExecStart, so
|
||||
# each gate below restates the one the reader's own module puts on it. A
|
||||
# reader whose gate changes must change here too.
|
||||
{
|
||||
lib,
|
||||
config,
|
||||
|
|
@ -65,8 +70,10 @@ let
|
|||
"swarm-bao-pki.service"
|
||||
"container@${baoCfg.machine}.service"
|
||||
];
|
||||
wants = [ "container@${baoCfg.machine}.service" ];
|
||||
requires = [ "swarm-bao-pki.service" ];
|
||||
wants = [
|
||||
"swarm-bao-pki.service"
|
||||
"container@${baoCfg.machine}.service"
|
||||
];
|
||||
};
|
||||
};
|
||||
in
|
||||
|
|
|
|||
Loading…
Reference in a new issue