zfs: the module owns a node's ZFS and changes nothing unset; pacman declares its config before its package (issue 1979) #676

Merged
mesh-tools merged 35 commits from feature/1979-zfs-owns-zfs into main 2026-11-13 08:01:02 +00:00
35 Commits
Author SHA1 Message Date
jschoubben 0041b69d17 zfs: findings is a state of the module's state list, not of requires, so the conditions keeper reads it
mesh/delivery merged: source.main moved to novox/mesh-catalog@32f1566cc879
mesh/delivery-group group feature/1979-zfs-owns-zfs merged: every member is merged
mesh/check being carried to 0041b69d1736 on 32f1566cc879 | from 117f933dacf0, mesh-delivery 7221a1e5cd7f, mesh-host 0193949efe9f, mesh-sdk e42b9491c93…
The validator refused zfs and mesh-conditions: mesh-conditions reads zfs.findings, which zfs had moved to bus state in requires, where the new form has no readers (ADR 0596 section 2). The keeper process's bus.state keeps naming findings. The manifest test holds it.

Builds: design 42 zfs-owns-zfs A-46 (A-32, 26, 27)
2026-11-13 03:27:38 +01:00
jschoubben d1a15ced6c zfs: the keeper tests' socket directory is the shortest that works
In the test's temporary directory, or /tmp when the socket path would pass 100 characters, so a long TMPDIR cannot fail the bind.

Builds: design 42 zfs-owns-zfs §18, A-37
2026-11-13 03:15:30 +01:00
jschoubben afa825f902 mesh-hand-acts: the whole test dates its warrant from now, inside the 14-day window
Issue 1979, blocking: a date-bound test. The warrant dated 2026-10-29 fell out of the listing's 14 days on 2026-11-13, failing every mesh-catalog check.

Builds: design 42 zfs-owns-zfs (the group's check)
2026-11-13 03:15:19 +01:00
jschoubben 064ebc9b84 zfs: the zed-functions file names its notification services on purpose, with its reason
The group's check failed TestRulesBus/NoCatalogueManifestNamesAnInstallation: 11 values name an installation (the vendor sites in the package's zed-functions.sh, resources[13]).

Builds: design 42 zfs-owns-zfs §14, A-2
2026-11-13 03:13:39 +01:00
jschoubben 8ae4fabfbe zfs: the keeper tests make their socket directory in the test's own temporary directory
The group's check failed TestOnlyRootOpensTheKeepersSocketAndANeedlessKeeperIsTheBusDown and TestAKeeperThatDoesNotAnswerIsWarnedOnce: stat /var/tmp: no such file or directory.

Builds: design 42 zfs-owns-zfs §18, A-37
2026-11-13 03:12:40 +01:00
jschoubben aa0a472b29 mesh-conditions: the keeper reads zfs's findings (A-32)
The group's check failed TestEveryControllerKindHasItsHome: the reader zfs's findings are not read by the keeper.

Builds: design 42 zfs-owns-zfs §27, A-32
2026-11-13 03:12:09 +01:00
jschoubben d15502f365 zfs: declare health on the four running services, README says hand acts answer started
mesh/delivery-group group feature/1979-zfs-owns-zfs rejected: composed together: the checker's verdict at the members' heads (03f2ebff6ed0): unit: mesh-conditi…
mesh/delivery closed: a newer head of the same pull request
mesh/check failed (9): unit: mesh-conditions/cmd/mesh-conditions.TestEveryControllerKindHasItsHome: the rea…; and 8 more | d15502f3650d on 117f933dacf0
Builds: design 42 zfs-owns-zfs §13, §24, lead answers A-45, A-43
2026-11-13 02:01:06 +01:00
jschoubben 58664eee60 zfs: the hand acts answer started at once and the manifest asks stream-publish, bus-state-calls and ledger-calls (A-43, A-44)
Removes streamHear, HandPoll, HandWait and the stream mark; keeps toolEmit.

Builds: design 42 zfs-owns-zfs §24, §25, lead answers A-43, A-44
2026-11-13 01:52:50 +01:00
jschoubben 1ff904f101 zfs: the tools say events with mesh/stream.publish and a hand act hears its event on the events stream (A-42, A-12)
The tools say every event of §25 (snapshot.taken.person, scrub.requested and the others) with mesh/stream.publish on the
stream events, never stdio.Emit; the hand acts' 30 s wait reads the mark (stream.fill) before the act starts, then
stream.read from the next sequence, for at most HandWait.

Builds: design 42 zfs-owns-zfs §25, §24, lead answers A-42, A-12
2026-11-13 01:50:27 +01:00
jschoubben 2d592c63c1 zfs: a keeper that does not answer is warned once, and RunKeeper closes its second connection (review round 2 finding 2, A-37)
A failed keeper call in a root process (hand acts, forget, Paused, every call) now adds one warning that the bus is
taken as down, instead of being dropped silently. RunKeeper closes the connection acct.Dial opens when the keeper
stops; the message id's comment says it is nanotime-pid.

Builds: design 42 zfs-owns-zfs A-37
2026-11-13 01:45:19 +01:00
jschoubben 87f8c30a09 zfs: the keeper publishes events with an acknowledged JetStream publish on mesh.bus.zfs.events.<kind> (review finding 1, A-41)
Builds: design 42 zfs-owns-zfs A-41, §25
2026-11-13 01:31:08 +01:00
jschoubben e79392d666 zfs: a follower reaches the keeper's socket on every call, so a keeper up later is used (A-37, reviewer's note)
Builds: design 42 zfs-owns-zfs A-37
2026-11-13 01:29:15 +01:00
jschoubben 5f372ac63a zfs: read an unwritten ledger instance as state null and sequence 0, pass every error up (review finding 2, A-40)
Builds: design 42 zfs-owns-zfs A-40
2026-11-13 01:28:51 +01:00
jschoubben 008e02afbd zfs: take out the events stream's max-mib, a bound no design line gives (review finding 3)
Builds: design 42 zfs-owns-zfs §25
2026-11-13 01:28:51 +01:00
jschoubben 605c1b1ca0 Z19 the budget test does not match its own text
Builds: design 42 zfs-owns-zfs §31
2026-11-13 01:09:16 +01:00
jschoubben 7831f14a6e Z19 zfs-readme-budget: the README says what the module owns and how it is checked, and the test budget is a test
Builds: design 42 zfs-owns-zfs §31, §7, §19, §23
2026-11-13 01:06:04 +01:00
jschoubben 8927d68900 Z4 zfs-manifest-bus: the events stream, states and ledger by template, the keeper as the module's one process bus account
The three root processes declare no bus and reach the keeper's socket; the module invokes the service manager's start. The judge refuses the keeper's bus emits and state until the validator accepts what the module asks for in requires (A-38).

Builds: design 42 zfs-owns-zfs §25, §26, §27, §28, A-6, A-19, A-36, A-37, A-38
2026-11-13 01:05:19 +01:00
jschoubben ec27f12524 A-37 the keeper: the module's one process bus account, a socket only root opens, and the root processes' bus through it
Builds: design 42 zfs-owns-zfs §18, §20, §26, §27, A-6, A-20, A-37
2026-11-13 01:04:41 +01:00
jschoubben c6844fc951 Z11 Z12 Z15 the ledger is one instance per dataset and kind, its state a map taken keyed by the ZFS snapshot's name
Builds: design 42 zfs-owns-zfs §21, §22, §26, §28, A-36 (corrects A-30)
2026-11-13 01:03:17 +01:00
jschoubben 9116067e11 Z18 zfs-callsite: the call-site test pins every form of ADR 0679 whole
Renamed TestTheBundleRunsOnlyTheFormsOfADR0679: each root form is held to its whole argument list, no verb the decision never allows, zgenhostid only with the parsed hostid, a device only as cache or log.

Builds: design 42 zfs-owns-zfs §19
2026-11-13 01:01:35 +01:00
jschoubben 5ab8bb7e62 Z1 Z2 Z3 zfs-manifest: packages and values, files and units, the apply and the run in the declared order
The manifest declares zfs-utils and zfs-dkms, renames scrub-pool to pool, and declares every new value not managed until set; its config file is ${config-json}, the options file, ZED's folder, rc, functions, handlers and drop-in each under their condition, the three ZFS units, the apply (run-once, restarted by its config file) and the run before the distribution's scrub and trim timers. One commit: the three subtasks change the one file module.json.

Builds: design 42 zfs-owns-zfs §6, §7, §8, §9, §11, §12, §13, §14, §15, §18, §20, A-1, A-2, A-3, A-7, A-14, A-15, A-16, A-23
2026-11-13 01:00:42 +01:00
jschoubben 97bdb7d656 Z16 zfs-health: a refused or failed command in the applied state is unhealthy naming its key, and the module's own warnings
Builds: design 42 zfs-owns-zfs §29, §15, A-35
2026-11-13 00:55:17 +01:00
jschoubben c0067e77fc Z15 zfs-tools: zfs_config, zfs_snapshots_schedule, zfs_module_events, zfs_snapshots_check and zfs_findings read what the module owns, keeps and says
zfs_config also says what the module says before it leaves a node (Z17): the next load of the kernel module uses ZFS's defaults, the three units and /etc/hostid stay.

Builds: design 42 zfs-owns-zfs §28, §30, §10, A-31, A-35
2026-11-13 00:54:06 +01:00
jschoubben 8aad282e6c Z10 Z12 trim without day or time refused, keep count 0 removes nothing
A trim schedule of weekly or monthly with no trim-day or trim-time is one refused value naming it; a keep count of 0 is that kind's none: the existing scheduled ZFS snapshots are kept and a warning names them.

Builds: design 42 zfs-owns-zfs §20, §21, §22, A-33, A-35
2026-11-13 00:51:11 +01:00
jschoubben dd1a4e083c Z14 zfs-follower: the follower starts the apply on the events that end a wait and keeps its findings in its own state
Builds: design 42 zfs-owns-zfs §18, §27, A-10, A-16, A-32
2026-11-13 00:49:01 +01:00
jschoubben 23256413de Z12 zfs-snapshots-remove: the run removes surplus scheduled ZFS snapshots only by their own record
Builds: design 42 zfs-owns-zfs §22, §26, A-30, A-31
2026-11-13 00:44:07 +01:00
jschoubben a357a85faa Z11 zfs-snapshots-take: the run takes its due ZFS snapshots per filesystem and records each in the ledger
Builds: design 42 zfs-owns-zfs §21, §26, A-19, A-20, A-30, A-31
2026-11-13 00:43:09 +01:00
jschoubben 316039ca95 Z13 zfs-hand-acts: hand acts write their key and start the run; zfs_snapshot keeps a person's snapshots apart
Builds: design 42 zfs-owns-zfs §23, §24, A-12, A-17, A-18
2026-11-13 00:41:21 +01:00
jschoubben 06d83912cd Z10 zfs-run: the scheduled run takes the lock, starts a due scrub and trim without waiting, and acts on hand acts
Builds: design 42 zfs-owns-zfs §20, §24, A-17
2026-11-13 00:38:17 +01:00
jschoubben 1bea6edcb8 Z9 zfs-apply-run: the apply holds the lock, waits on a scrub or an unimported pool, and converges the node's id, ARC and pool
Builds: design 42 zfs-owns-zfs §15, §18, A-8, A-16, A-29
2026-11-13 00:34:58 +01:00
jschoubben 2fb1e5c4ea Z8 zfs-apply-devices: cache and log devices converged by their stable names, after their checks
Builds: design 42 zfs-owns-zfs §17
2026-11-13 00:32:06 +01:00
jschoubben a10bf45ed9 Z7 zfs-apply-properties: pool and dataset properties converged, read back and said
Builds: design 42 zfs-owns-zfs §10, §16
2026-11-13 00:27:31 +01:00
jschoubben 0fa4b5d8e7 Z6 zfs-events-state: each change, refusal and wait said as its event and kept in the state applied
Builds: design 42 zfs-owns-zfs §25, §26, A-19
2026-11-13 00:26:32 +01:00
jschoubben 3cb2b83a15 Z5 zfs-config-parse: the config file's values each read in their fixed form
A value of another form is refused before anything is written or run; absent and empty are not managed.

Builds: design 42 zfs-owns-zfs §9, §11, A-15, A-23
2026-11-13 00:25:48 +01:00
jschoubben 2b699d4046 Z0 pacman-config-first: the pacman module declares its config file before its package
The apply stops at the first failure and the package fails while the config file is missing (A-26).

Builds: design 42 zfs-owns-zfs §1, A-26
2026-11-13 00:23:56 +01:00