Issue 079: every machine named twice over, found by the large mesh bed; what running that bed cost, on 074
This commit is contained in:
@@ -47,3 +47,14 @@ its long idleness had hidden: the consumer fixture's login exceeded a backend's
|
|||||||
upstream artifact by bare image ID, which a registry copy cannot fetch since ADR 0096 — retired,
|
upstream artifact by bare image ID, which a registry copy cannot fetch since ADR 0096 — retired,
|
||||||
since genesis installs the catalogue's builder and proves the same. The large test as a whole has
|
since genesis installs the catalogue's builder and proves the same. The large test as a whole has
|
||||||
not been run end to end; its renamed tests and the tests around them have.
|
not been run end to end; its renamed tests and the tests around them have.
|
||||||
|
|
||||||
|
*2026-09-22.* The large mesh test was run end to end, for the first time in weeks: 12 of 25 passed.
|
||||||
|
Everything that failed was the bed lagging the mesh, and one defect of the mesh's own. The bed now
|
||||||
|
derives the anchor's filter after placing it on the overlay (ADR 0088), declares the ports its
|
||||||
|
fixtures listen on, waits for an image pulled at apply, starts the hand-started host and builder
|
||||||
|
once on a warm return, and reads the resolver modules from the catalogue instead of the example
|
||||||
|
modules that moved there. Three more tests were retired for the catalogue beds that prove them
|
||||||
|
(the modules resolving together and the forge, whole-mesh-novox; the cache grant, the grant bed)
|
||||||
|
and one for what every later test proves (the hub filtered without severing the mesh). The
|
||||||
|
defect: every machine named twice over in the files the mesh writes
|
||||||
|
([issue 079](../079-every-machine-is-named-twice-over/00-report.md)).
|
||||||
|
|||||||
@@ -0,0 +1,32 @@
|
|||||||
|
---
|
||||||
|
status: resolved
|
||||||
|
opened: 2026-09-22
|
||||||
|
located-in: [mesh-controller internal/catalogue (facts)]
|
||||||
|
fixed-by: mesh-controller multiple-fixes (the facts take a name as the control plane keys it, internal or bare, and write each machine once); a unit test holds both keyings to the same files
|
||||||
|
---
|
||||||
|
|
||||||
|
# 079 — Every machine is named twice over in the hosts file and the resolver's zones
|
||||||
|
|
||||||
|
## Symptom
|
||||||
|
|
||||||
|
The hosts file the mesh writes on every machine, and the zones file it hands a resolver, name each
|
||||||
|
machine as `<machine>.internal.internal`, with the intended name `<machine>.internal` in the
|
||||||
|
hosts file's second column. Names still resolve on the machine itself, because the second column
|
||||||
|
matches, so nothing noticed. A resolver serving the zones answers for `*.<machine>.internal.internal`
|
||||||
|
and for nothing under `<machine>.internal`, so a service named under a machine does not resolve
|
||||||
|
from anywhere.
|
||||||
|
|
||||||
|
Found by running the large mesh bed end to end for the first time since the mesh's knowledge became
|
||||||
|
a fact a module asks for: its name test read the zones back. No smaller bed reads them.
|
||||||
|
|
||||||
|
## Why it matters beyond the instance
|
||||||
|
|
||||||
|
Two functions agreed on a contract nobody wrote down: the caller keyed the map by the internal name,
|
||||||
|
the facts appended the suffix to a bare one. Each was tested alone, with its own keying, and both
|
||||||
|
passed. A file the mesh writes and nothing reads back in a test is a file that can be wrong for
|
||||||
|
as long as it takes someone to look.
|
||||||
|
|
||||||
|
## What would close it
|
||||||
|
|
||||||
|
The facts take either keying and write each machine once, held by a test that feeds both. And a bed
|
||||||
|
reads the files back — the large mesh bed does now.
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
# Diagnosis — 2026-09-22
|
||||||
|
|
||||||
|
1. The control plane collects every placed machine's name and address for a resolution keyed by
|
||||||
|
the internal name (`homer.internal`), because that is the map every container is given as its
|
||||||
|
hosts. The facts that render the hosts file and the resolver's zones took the same map as bare
|
||||||
|
names and appended `.internal` to each — their unit tests fed them bare names and passed.
|
||||||
|
2. Fixed in the facts: a name is read as either form, and each machine is written once as
|
||||||
|
`<machine>.internal` with its bare name beside it. A test feeds both keyings and holds the files
|
||||||
|
equal, and holds the zones free of a doubled suffix.
|
||||||
|
|
||||||
|
**Located in:** the facts. Not a decision. Proven by the unit test and by the large mesh bed's name
|
||||||
|
tests, once its controller image is rebuilt from the fix.
|
||||||
Reference in New Issue
Block a user