fix(v4.0.0): a node blocked at a port with no one on it is given an error, not left there
A node writing to a node that was stuck, and was then killed, stayed blocked for ever: killing a stuck node could cost its neighbours. And on the hosted and bare-metal products a write to an empty port, 5 7 PORT!, ended the program with "the node stopped". Now a node that can take an error, blocked writing to or reading from one port that nothing is wired to -- nothing ever was, or what was there has been killed or the wire cut -- has error 18, No one on that port, raised on it and goes on. A bare node waits as on the fabric; so does a node whose neighbour is asleep, and one reading "any port". test_host_unit.c: Hera kills node 14 while node 12 is blocked writing to it. It failed first: 12 stayed blocked. test_fabric.c: a bare node still waits. hosted-check types 5 7 PORT! and goes on; it failed first too. make -C v4 test, sanitize and hosted-check pass; amd64, aarch64 and riscv64 boot, POST 538 of 538, dict_hash 0x5f0a949a6fc8ef2b on all six: logs/20261007-121743, -122008, -122337. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
18adf59091
commit
bc6deab3f5
@@ -116,6 +116,29 @@ word address `base`:
|
||||
That is how an F18 node runs code from a port, and it is what makes
|
||||
ruling 8 need no code in a newborn node.
|
||||
- A port with nothing on the other end blocks for ever, as on the fabric.
|
||||
**Fixed 2026-10-07 ("Fix the error. no bad code is ever released"):**
|
||||
that holds for a bare node. A node that can take an error is not left
|
||||
there. When it is blocked writing to one port, or reading from one, that
|
||||
nothing is wired to — because nothing ever was, or because what was
|
||||
there has been killed or the wire cut — error 18, "No one on that
|
||||
port", is raised on it: what it was doing ends with the message and it
|
||||
goes on (`v4/src/node.c`, `v4_node_port_gone`; `v4/src/fabric.c`,
|
||||
`v4_fabric_gone_error`; the lone node, `v4/system/boot.c`). A node whose
|
||||
neighbour is asleep waits, and so does one reading "any port".
|
||||
What it mended: a node writing to a node that was stuck, and was then
|
||||
killed, stayed blocked for ever, so that killing a stuck node could cost
|
||||
its neighbours (found while step 7 was being designed); and on the two
|
||||
products a write to an empty port, `5 7 PORT!`, ended the program.
|
||||
`v4/tests/test_host_unit.c`: Hera kills node 14 while node 12 is blocked
|
||||
writing to it; 12's line ends "No one on that port", every other node
|
||||
answers, and a later send to 14 is that error at once.
|
||||
`v4/tests/test_fabric.c`: a bare node still waits. `hosted-check` and the
|
||||
three boots type `5 7 PORT!` and go on: `logs/20261007-121743` (amd64),
|
||||
`-122008` (aarch64), `-122337` (riscv64); POST 538 of 538,
|
||||
`dict_hash=0x5f0a949a6fc8ef2b` on all six.
|
||||
**Not mended, and reported:** a node that waits at "any port" for an
|
||||
answer that never comes (`AWAIT`, on a node that never answers) waits
|
||||
for ever, and on the lone node that ends the line as "stopped".
|
||||
|
||||
### 4.2 A node at reset
|
||||
|
||||
|
||||
Reference in New Issue
Block a user