Conversation
This reverts-the-revert of commit bc13599 which was needed to land pre `multihomed` feat branch history.
Since we'd like to eventually allow a diverse set of transport
(protocol) methods and stacks, and a multi-peer discovery system for
distributed actor-tree applications, this reworks all runtime internals
to support multi-homing for any given tree on a logical host. In other
words any actor can now bind its transport server (currently only
unsecured TCP + `msgspec`) to more then one address available in its
(linux) network namespace. Further, registry actors (now dubbed
"registars" instead of "arbiters") can also similarly bind to multiple
network addresses and provide discovery services to remote actors via
multiple addresses which can now be provided at runtime startup.
Deats:
- adjust `._runtime` internals to use a `list[tuple[str, int]]` (and
thus pluralized) socket address sequence where applicable for transport
server socket binds, now exposed via `Actor.accept_addrs`:
- `Actor.__init__()` now takes a `registry_addrs: list`.
- `Actor.is_arbiter` -> `.is_registrar`.
- `._arb_addr` -> `._reg_addrs: list[tuple]`.
- always reg and de-reg from all registrars in `async_main()`.
- only set the global runtime var `'_root_mailbox'` to the loopback
address since normally all in-tree processes should have access to
it, right?
- `._serve_forever()` task now takes `listen_sockaddrs: list[tuple]`
- make `open_root_actor()` take a `registry_addrs: list[tuple[str, int]]`
and defaults when not passed.
- change `ActorNursery.start_..()` methods take `bind_addrs: list` and
pass down through the spawning layer(s) via the parent-seed-msg.
- generalize all `._discovery()` APIs to accept `registry_addrs`-like
inputs and move all relevant subsystems to adopt the "registry" style
naming instead of "arbiter":
- make `find_actor()` support batched concurrent portal queries over
all provided input addresses using `.trionics.gather_contexts()` Bo
- syntax: move to using `async with <tuples>` 3.9+ style chained
@acms.
- a general modernization of the code to a python 3.9+ style.
- start deprecation and change to "registry" naming / semantics:
- `._discovery.get_arbiter()` -> `.get_registry()`
Details are in the module docs; this is a first draft with lotsa room for refinement and extension.
…runtime debugging
…bally as `._root._default_lo_addrs`
Since it's handy to be able to debug the *writing* of this instance var (particularly when checking state passed down to a child in `Actor._from_parent()`), rename and wrap the underlying `Actor._reg_addrs` as a settable `@property` and add validation to the `.setter` for sanity - actor discovery is a critical functionality. Other tweaks: - fix `.cancel_soon()` to pass expected argument.. - update internal runtime error message to be simpler and link to GH issues. - use new `Actor.reg_addrs` throughout core.
Allows forcing the opened actor to either obtain the passed registry addrs or raise a runtime error.
Such that it's set to whatever `Actor.reg_addrs: list[tuple]` is during the actor's init-after-spawn guaranteeing each actor has at least the registry infos from its parent. Ensure we read this if defined over `_root._default_lo_addrs` in `._discovery` routines, namely `.find_actor()` since it's the one API normally used without expecting the runtime's `current_actor()` to be up. Update the latest inter-peer cancellation test to use the `reg_addr` fixture (and thus test this new runtime-vars value via `find_actor()` usage) since it was failing if run *after* the infected `asyncio` suite due to registry contact failure.
6 tasks
goodboy
added a commit
that referenced
this pull request
Apr 1, 2026
- Add issue/PR refs to all 6 abstract milestones (#410, #216, #367, #424, #420, #423) - Redistribute EUR 50k budget across 6 WPs (was 4); introduce dual rate tiers (EUR 50/hr maintainer, EUR 35/hr vetted contributors) - Expand technical challenges from 5 to 7: discovery split-brain (#216, #367), cross-plat shm ring-buf safety (#423), docs as API stabilization forcing fn - Add rework `.prompt.md` for AI disclosure (this patch was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code
goodboy
added a commit
that referenced
this pull request
Apr 1, 2026
- Add issue/PR refs to all 6 abstract milestones (#410, #216, #367, #424, #420, #423) - Redistribute EUR 50k budget across 6 WPs (was 4); introduce dual rate tiers (EUR 50/hr maintainer, EUR 35/hr vetted contributors) - Expand technical challenges from 5 to 7: discovery split-brain (#216, #367), cross-plat shm ring-buf safety (#423), docs as API stabilization forcing fn - Add rework `.prompt.md` for AI disclosure (this patch was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-code
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.
Mostly like it sounds. Adds support for actors to bind transport
layer sockets on multiple network addresses in anticipation of
supporting both multiple (transport layer or higher) protocols in
tandem as well as nested protocol tunneling with
wireguardandssh.Still missing is a
libp2pstyle multiaddressparser which I will patch in from another repo shortly. Longer run
the idea is to use multiaddrs to drive both per-actor transport
socket binds / listens and outbound connection requests for
remote peers across da internetz.
Follow-ups moved to issues,
That is on another non-AI mined git-service ;P