Merge pull request '0115: one assignment of a module per node — the requirement is dropped' (#133) from decision/0115-one-assignment-per-module-per-node into main
This commit was merged in pull request #133.
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
---
|
||||
topic: what runs on it
|
||||
status: accepted
|
||||
date: 2026-09-26
|
||||
deciders: jochen
|
||||
extends: 0112-a-module-definition-names-no-node-mesh-or-path.md
|
||||
---
|
||||
|
||||
# 115. One assignment of a module per node: the module's name is the assignment's identity
|
||||
|
||||
## Context
|
||||
|
||||
Everything an assignment owns is named after its module: the database user
|
||||
(`mesh_<node>_<module>`), the broker account (`<node>-<module>`), the containers, the sealed
|
||||
secrets, and — since ADR 0112 — the placed directory (`<root>/<module>`). A second assignment
|
||||
of the same module on the same node would collide on every one of those names at once, which
|
||||
is why the mesh has never allowed it.
|
||||
|
||||
[Issue 119](../04-ISSUES/119-a-module-definition-decides-where-its-files-live/00-report.md)
|
||||
recorded this as a kept limitation, and 0112 deliberately did not fix it — giving assignments
|
||||
identities of their own would have touched every naming recipe in one already-large change.
|
||||
The question stayed open: is multi-assignment a requirement deferred, or a requirement at all?
|
||||
|
||||
The original motivation was real — one module serving two tenants on one machine, a second
|
||||
photo site, a second mail domain. The operator held that requirement once and has now weighed
|
||||
it against what it costs.
|
||||
|
||||
## Decision
|
||||
|
||||
**Dropped.** One assignment of a module per node is the rule, not a limitation. The module's
|
||||
name IS the assignment's identity on a node, permanently, and every naming recipe may rely on
|
||||
it.
|
||||
|
||||
Wanting the same software twice on one node has a spelling the mesh already supports: **two
|
||||
modules.** A module definition is cheap — two photo sites are two modules sharing artifacts
|
||||
(the build's images are content-addressed; nothing is built twice), each with its own name,
|
||||
its own directory, its own grants and its own routes. The tenant boundary lands where every
|
||||
other boundary already is: the module name.
|
||||
|
||||
## Consequences
|
||||
|
||||
- The naming recipes stay as simple as they are. No instance suffixes, no assignment ids
|
||||
threaded through six systems, no migration of every existing name.
|
||||
- `<root>/<module>` is the assignment's directory with nothing left open (0112's placement
|
||||
language stands unchanged).
|
||||
- The controller may refuse a second assignment *plainly* — "novox already runs mailu, and one
|
||||
node runs one of each (ADR 0115)" — instead of failing on whichever name collides first.
|
||||
- Multi-tenant asks are answered in the catalogue (a second module definition), not in the
|
||||
control plane.
|
||||
Reference in New Issue
Block a user