Repository navigation
fix(standard): resolve a licence server before its forwarder takes the server's name - #43
Merged
Merged
Conversation
A licence server's forwarder joins the unit's internal network under the server's own name. It resolved that name for each connection, and the network's DNS then answered with the forwarder itself, so the agent got a closed connection. The forwarder now resolves the name once, before it listens, and keeps every address. Each connection tries the addresses in order and skips an address family this machine lacks. A name that does not resolve ends the forwarder with an "unresolved" event. The unit connects the forwarder to its network only after the forwarder listens.
harenome
force-pushed
the
fix/licence-forwarder
branch
from
November 10, 2026 15:27
36f6b79 to
5fb3db9
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #41
What
A licence server's forwarder joins the unit's internal network under the server's own name. It resolved that name for each connection, and the network's DNS answered with the forwarder itself, so the agent got a closed connection. The forwarder now resolves the name once, before it listens, and keeps every address. Each connection tries the addresses in order and skips an address family that the machine does not have. A name that does not resolve ends the forwarder with an
unresolvedevent.Unit._forwardwaits forlisteningbeforenetwork connect, so the lookup happens before the name becomes the forwarder's. A Unix socket target (the MCP door) is unchanged.Touches
the standard · backend
app/nullius/standard/forward.py,container.Unit._forwardapp/tests/test_standard_forward.py(new),app/tests/test_standard_container.pyVerified
The reproduction, on
mainand on this branch:docker:dindcontainer on a podman network with DNS.LICENSE-OK) runs in a second podman container on that network, namednullius-licence-server.Unit._forward(1, "nullius-licence-server:27001")runs from the source. An agent container on the unit's network connects to the address that it returns.main:This branch:
1609 tests in 103 modules: OK. Route suite:262 tests in 35 modules: OK. Both ran in a rootless podman container capped at 4 CPUs.test_standard_forwardandtest_a_licence_forwarder_listens_before_it_takes_the_servers_name: 10 runs in that container, all OK.host.docker.internal, which--add-hostpins. Docker's default bridge has no embedded DNS, so a tier test cannot give a server a name there. The check above was made by hand.Risk
unresolvedevent. Before, it failed at the first connection.listening. A very slow resolver fails the unit with "did not listen in 30 s", not withunresolved.