Add `tpt_bind_addrs` and separate registry eps
Thread a `tpt_bind_addrs` param through `open_piker_runtime()` and `open_pikerd()` so pikerd's bind addrs can differ from the registry endpoint (support a dedicated `regd` service). Simplify `load_trans_eps()` to delegate entirely to `tractor.discovery.parse_endpoints()`. Deats, - `conf.toml`: fix maddr prefixes to proper `/ip4/` and `/unix/`, add `chart` endpoints section, add commented `regd` example. - `cli/__init__.py`: replace `parse_maddr` with `parse_endpoints`, rename `--maddr` -> `--maddrs`, parse `regd` key from eps falling back to `pikerd` addrs. - `_actor_runtime.py`: thread `tpt_bind_addrs` through runtime open fns to `open_root_actor`. - `ui/cli.py`: activate `network` config parsing for chart CLI, extract `chart` eps for bind and `regd`/`pikerd` for registry, pass `tpt_bind_addrs` through runtime config. (this commit msg was generated in some part by [`claude-code`][claude-code-gh]) [claude-code-gh]: https://github.com/anthropics/claude-codemaddr_endpoints
parent
d326eaccca
commit
573ee3e7a3
|
|
@ -1,9 +1,26 @@
|
|||
[network]
|
||||
pikerd = [
|
||||
'/ipv/127.0.0.1/tcp/6116', # TCP localhost loopback
|
||||
# TCP localhost loopback
|
||||
'/ip4/127.0.0.1/tcp/6116',
|
||||
|
||||
# '/uds/run/user/1000/piker/pikerd@6116.sock', # UDS socket path using `multiaddr` lib!
|
||||
# same but UDS
|
||||
'/unix/run/user/1000/piker/pikerd.sock',
|
||||
]
|
||||
chart = [
|
||||
'/ip4/127.0.0.1/tcp/3003',
|
||||
'/unix/run/user/1000/piker/chart.sock',
|
||||
]
|
||||
# the service-actor registry endpoint;
|
||||
# other pikerd trees contact this to discover
|
||||
# actors.
|
||||
# XXX if absent, pikerd binds the registry
|
||||
# on its own tpt_bind_addrs.
|
||||
# regd = ['/ip4/127.0.0.1/tcp/6116']
|
||||
|
||||
# chart = [
|
||||
# '/ip4/127.0.0.1/tcp/3333',
|
||||
# '/unix/run/user/1000/piker/chart@3333.sock',
|
||||
# ]
|
||||
|
||||
|
||||
[ui]
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ from types import ModuleType
|
|||
import click
|
||||
import trio
|
||||
import tractor
|
||||
from tractor.discovery._multiaddr import parse_maddr
|
||||
from tractor.discovery import parse_endpoints
|
||||
|
||||
from ..log import (
|
||||
get_console_log,
|
||||
|
|
@ -46,48 +46,25 @@ log = get_logger('piker.cli')
|
|||
|
||||
|
||||
def load_trans_eps(
|
||||
network: dict | None = None,
|
||||
maddrs: list[tuple] | None = None,
|
||||
network: dict|None = None,
|
||||
maddrs: list[str]|None = None,
|
||||
|
||||
) -> dict[str, dict[str, dict]]:
|
||||
) -> dict[str, list]:
|
||||
'''
|
||||
Load transport endpoints from a `[network]` config
|
||||
table or CLI-provided multiaddr strings, delegating
|
||||
to `tractor.discovery.parse_endpoints()`.
|
||||
|
||||
# transport-oriented endpoint multi-addresses
|
||||
eps: dict[
|
||||
str, # service name, eg. `pikerd`, `emsd`..
|
||||
|
||||
# libp2p style multi-addresses parsed into prot layers
|
||||
list[dict[str, str | int]]
|
||||
] = {}
|
||||
|
||||
if (
|
||||
network
|
||||
and
|
||||
not maddrs
|
||||
):
|
||||
# load network section and (attempt to) connect all endpoints
|
||||
# which are reachable B)
|
||||
for key, maddrs in network.items():
|
||||
match key:
|
||||
|
||||
# TODO: resolve table across multiple discov
|
||||
# prots Bo
|
||||
case 'resolv':
|
||||
pass
|
||||
|
||||
case 'pikerd':
|
||||
dname: str = key
|
||||
for maddr in maddrs:
|
||||
layers: dict = parse_maddr(maddr)
|
||||
eps.setdefault(
|
||||
dname,
|
||||
[],
|
||||
).append(layers)
|
||||
'''
|
||||
if network and not maddrs:
|
||||
return parse_endpoints(network)
|
||||
|
||||
elif maddrs:
|
||||
# presume user is manually specifying the root actor ep.
|
||||
eps['pikerd'] = [parse_maddr(maddr)]
|
||||
return parse_endpoints(
|
||||
{'pikerd': list(maddrs)}
|
||||
)
|
||||
|
||||
return eps
|
||||
return {}
|
||||
|
||||
|
||||
@click.command()
|
||||
|
|
@ -108,13 +85,13 @@ def load_trans_eps(
|
|||
help='Enable tractor debug mode',
|
||||
)
|
||||
@click.option(
|
||||
'--maddr',
|
||||
'--maddrs',
|
||||
'-m',
|
||||
default=None,
|
||||
help='Multiaddrs to bind or contact',
|
||||
)
|
||||
def pikerd(
|
||||
maddr: list[str] | None,
|
||||
maddrs: list[str]|None,
|
||||
loglevel: str,
|
||||
tl: bool,
|
||||
pdb: bool,
|
||||
|
|
@ -145,7 +122,8 @@ def pikerd(
|
|||
))
|
||||
|
||||
# service-actor registry endpoint socket-address set
|
||||
regaddrs: list[tuple[str, int]] = []
|
||||
regaddrs: list = []
|
||||
tpt_bind_addrs: list|None = None
|
||||
|
||||
conf, _ = config.load(
|
||||
conf_name='conf',
|
||||
|
|
@ -153,7 +131,8 @@ def pikerd(
|
|||
network: dict = conf.get('network')
|
||||
if (
|
||||
network is None
|
||||
and not maddr
|
||||
and
|
||||
not maddrs
|
||||
):
|
||||
regaddrs = [(
|
||||
_default_registry_host,
|
||||
|
|
@ -165,11 +144,19 @@ def pikerd(
|
|||
with maybe_open_crash_handler(pdb=pdb):
|
||||
eps: dict[str, list] = load_trans_eps(
|
||||
network,
|
||||
maddr,
|
||||
maddrs,
|
||||
)
|
||||
|
||||
# pikerd bind addresses (may differ from
|
||||
# registry if regd is separate)
|
||||
tpt_bind_addrs = eps.get('pikerd')
|
||||
|
||||
# registry: dedicated `regd` key, or fall
|
||||
# back to pikerd addrs (pikerd IS the registry)
|
||||
regaddrs = eps.get(
|
||||
'regd',
|
||||
tpt_bind_addrs,
|
||||
)
|
||||
addrs: list[tractor.Address] = eps['pikerd']
|
||||
for addr in addrs:
|
||||
regaddrs.append(addr)
|
||||
|
||||
from .. import service
|
||||
|
||||
|
|
@ -178,6 +165,7 @@ def pikerd(
|
|||
async with (
|
||||
service.open_pikerd(
|
||||
registry_addrs=regaddrs,
|
||||
tpt_bind_addrs=tpt_bind_addrs,
|
||||
loglevel=loglevel,
|
||||
debug_mode=pdb,
|
||||
# enable_transports=['uds'],
|
||||
|
|
|
|||
|
|
@ -59,6 +59,7 @@ def get_runtime_vars() -> dict[str, Any]:
|
|||
async def open_piker_runtime(
|
||||
name: str,
|
||||
registry_addrs: list[tuple[str, int]] = [],
|
||||
tpt_bind_addrs: list|None = None,
|
||||
|
||||
enable_modules: list[str] = [],
|
||||
loglevel: str|None = None,
|
||||
|
|
@ -112,6 +113,7 @@ async def open_piker_runtime(
|
|||
|
||||
# passed through to `open_root_actor`
|
||||
registry_addrs=registry_addrs,
|
||||
tpt_bind_addrs=tpt_bind_addrs,
|
||||
name=name,
|
||||
start_method=start_method,
|
||||
loglevel=loglevel,
|
||||
|
|
@ -166,6 +168,7 @@ _root_modules: list[str] = [
|
|||
@acm
|
||||
async def open_pikerd(
|
||||
registry_addrs: list[tuple[str, int]],
|
||||
tpt_bind_addrs: list|None = None,
|
||||
loglevel: str|None = None,
|
||||
|
||||
# XXX: you should pretty much never want debug mode
|
||||
|
|
@ -198,6 +201,7 @@ async def open_pikerd(
|
|||
loglevel=loglevel,
|
||||
debug_mode=debug_mode,
|
||||
registry_addrs=registry_addrs,
|
||||
tpt_bind_addrs=tpt_bind_addrs,
|
||||
|
||||
**kwargs,
|
||||
|
||||
|
|
|
|||
|
|
@ -195,30 +195,28 @@ def chart(
|
|||
conf_name='conf',
|
||||
)
|
||||
|
||||
regaddrs: list[tuple[str, int]] = config.get(
|
||||
regaddrs: list = config.get(
|
||||
'registry_addrs',
|
||||
[],
|
||||
)
|
||||
# network: dict = conf.get('network')
|
||||
# if network:
|
||||
# eps: dict = load_trans_eps(
|
||||
# network,
|
||||
# maddrs=None,
|
||||
# )
|
||||
# addr: tractor.Address
|
||||
# for addr in eps['pikerd']:
|
||||
# regaddrs.append(addr)
|
||||
network: dict = conf.get('network')
|
||||
if network:
|
||||
eps: dict = load_trans_eps(
|
||||
network,
|
||||
maddrs=None,
|
||||
)
|
||||
|
||||
# # !TODO, expose this from open_root_actor()!
|
||||
# tpt_bind_addrs: list[
|
||||
# tractor.Address # `Address.get_random()` case
|
||||
# |tractor.UnwrappedAddress # registrar case `= uw_reg_addrs`
|
||||
# ] = []
|
||||
# chart_maddrs: list[str] = eps.get('chart')
|
||||
# if chart_maddrs:
|
||||
# addr: tractor.Address
|
||||
# for addr in load_trans_eps(chart_maddrs):
|
||||
# tpt_bind_addrs.append(addr)
|
||||
# registry addrs: prefer `regd`, fall back
|
||||
# to `pikerd` eps
|
||||
reg_eps = eps.get(
|
||||
'regd',
|
||||
eps.get('pikerd')
|
||||
)
|
||||
assert reg_eps
|
||||
regaddrs = [
|
||||
addr.unwrap() for addr in reg_eps
|
||||
]
|
||||
chart_eps = eps.get('chart')
|
||||
|
||||
_main(
|
||||
syms=symbols,
|
||||
|
|
@ -229,6 +227,7 @@ def chart(
|
|||
'loglevel': tractorloglevel,
|
||||
'name': 'chart',
|
||||
'registry_addrs': list(set(regaddrs)),
|
||||
'tpt_bind_addrs': chart_eps,
|
||||
'enable_modules': [
|
||||
|
||||
# remote data-view annotations Bo
|
||||
|
|
|
|||
Loading…
Reference in New Issue