77 lines
2.9 KiB
Plaintext
77 lines
2.9 KiB
Plaintext
|
|
ok now i want you to take a look at the most recent commit adding
|
||
|
|
a `tpt_bind_addrs` to `open_root_actor()` and extend the existing
|
||
|
|
tests/discovery/test_multiaddr* and friends to use this new param in
|
||
|
|
at least one suite with parametrizations over,
|
||
|
|
|
||
|
|
- `registry_addrs == tpt_bind_addrs`, as in both inputs are the same.
|
||
|
|
- `set(registry_addrs) >= set(tpt_bind_addrs)`, as in the registry
|
||
|
|
addrs include the bind set.
|
||
|
|
- `registry_addrs != tpt_bind_addrs`, where the reg set is disjoint from
|
||
|
|
the bind set in all possible combos you can imagine.
|
||
|
|
|
||
|
|
All of the ^above cases should further be parametrized over,
|
||
|
|
- the root being the registrar,
|
||
|
|
- a non-registrar root using our bg `daemon` fixture.
|
||
|
|
|
||
|
|
once we have a fairly thorough test suite and have flushed out all
|
||
|
|
bugs and edge cases we want to design a wrapping API which allows
|
||
|
|
declaring full tree's of actors tpt endpoints using multiaddrs such
|
||
|
|
that a `dict[str, list[str]]` of actor-name -> multiaddr can be used
|
||
|
|
to configure a tree of actors-as-services given such an input
|
||
|
|
"endpoints-table" can be matched with the number of appropriately
|
||
|
|
named subactore spawns in a `tractor` user-app.
|
||
|
|
|
||
|
|
Here is a small example from piker,
|
||
|
|
|
||
|
|
- in piker's root conf.toml we define a `[network]` section which can
|
||
|
|
define various actor-service-daemon names set to a maddr
|
||
|
|
(multiaddress str).
|
||
|
|
|
||
|
|
- each actor whether part of the `pikerd` tree (as a sub) or spawned
|
||
|
|
in other non-registrar rooted trees (such as `piker chart`) should
|
||
|
|
configurable in terms of its `tractor` tpt bind addresses via
|
||
|
|
a simple service lookup table,
|
||
|
|
|
||
|
|
```toml
|
||
|
|
[network]
|
||
|
|
pikerd = [
|
||
|
|
'/ip4/127.0.0.1/tcp/6116', # std localhost daemon-actor tree
|
||
|
|
'/uds/run/user/1000/piker/pikerd@6116.sock', # same but serving UDS
|
||
|
|
]
|
||
|
|
chart = [
|
||
|
|
'/ip4/127.0.0.1/tcp/3333', # std localhost daemon-actor tree
|
||
|
|
'/uds/run/user/1000/piker/chart@3333.sock',
|
||
|
|
]
|
||
|
|
```
|
||
|
|
|
||
|
|
We should take whatever common API is needed to support this and
|
||
|
|
distill it into a
|
||
|
|
```python
|
||
|
|
tractor.discovery.parse_endpoints(
|
||
|
|
) -> dict[
|
||
|
|
str,
|
||
|
|
list[Address]
|
||
|
|
|dict[str, list[Address]]
|
||
|
|
# ^recursive case, see below
|
||
|
|
]:
|
||
|
|
```
|
||
|
|
|
||
|
|
style API which can,
|
||
|
|
|
||
|
|
- be re-used easily across dependent projects.
|
||
|
|
- correctly raise tpt-backend support errors when a maddr specifying
|
||
|
|
a unsupport proto is passed.
|
||
|
|
- be used to handle "tunnelled" maddrs per
|
||
|
|
https://github.com/multiformats/py-multiaddr/#tunneling such that
|
||
|
|
for any such tunneled maddr-`str`-entry we deliver a data-structure
|
||
|
|
which can easily be passed to nested `@acm`s which consecutively
|
||
|
|
setup nested net bindspaces for binding the endpoint addrs using
|
||
|
|
a combo of our `.ipc.*` machinery and, say for example something like
|
||
|
|
https://github.com/svinota/pyroute2, more precisely say for
|
||
|
|
managing tunnelled wireguard eps within network-namespaces,
|
||
|
|
* https://docs.pyroute2.org/
|
||
|
|
* https://docs.pyroute2.org/netns.html
|
||
|
|
|
||
|
|
remember to include use of all default `.claude/skills` throughout
|
||
|
|
this work!
|