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
604e5fcf9c
commit
5466acb764
|
|
@ -1,9 +1,26 @@
|
||||||
[network]
|
[network]
|
||||||
pikerd = [
|
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]
|
[ui]
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@ from types import ModuleType
|
||||||
import click
|
import click
|
||||||
import trio
|
import trio
|
||||||
import tractor
|
import tractor
|
||||||
from tractor.discovery._multiaddr import parse_maddr
|
from tractor.discovery import parse_endpoints
|
||||||
|
|
||||||
from ..log import (
|
from ..log import (
|
||||||
get_console_log,
|
get_console_log,
|
||||||
|
|
@ -47,47 +47,24 @@ log = get_logger('piker.cli')
|
||||||
|
|
||||||
def load_trans_eps(
|
def load_trans_eps(
|
||||||
network: dict|None = None,
|
network: dict|None = None,
|
||||||
maddrs: list[tuple] | 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[
|
if network and not maddrs:
|
||||||
str, # service name, eg. `pikerd`, `emsd`..
|
return parse_endpoints(network)
|
||||||
|
|
||||||
# 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)
|
|
||||||
|
|
||||||
elif maddrs:
|
elif maddrs:
|
||||||
# presume user is manually specifying the root actor ep.
|
return parse_endpoints(
|
||||||
eps['pikerd'] = [parse_maddr(maddr)]
|
{'pikerd': list(maddrs)}
|
||||||
|
)
|
||||||
|
|
||||||
return eps
|
return {}
|
||||||
|
|
||||||
|
|
||||||
@click.command()
|
@click.command()
|
||||||
|
|
@ -108,13 +85,13 @@ def load_trans_eps(
|
||||||
help='Enable tractor debug mode',
|
help='Enable tractor debug mode',
|
||||||
)
|
)
|
||||||
@click.option(
|
@click.option(
|
||||||
'--maddr',
|
'--maddrs',
|
||||||
'-m',
|
'-m',
|
||||||
default=None,
|
default=None,
|
||||||
help='Multiaddrs to bind or contact',
|
help='Multiaddrs to bind or contact',
|
||||||
)
|
)
|
||||||
def pikerd(
|
def pikerd(
|
||||||
maddr: list[str] | None,
|
maddrs: list[str]|None,
|
||||||
loglevel: str,
|
loglevel: str,
|
||||||
tl: bool,
|
tl: bool,
|
||||||
pdb: bool,
|
pdb: bool,
|
||||||
|
|
@ -145,7 +122,8 @@ def pikerd(
|
||||||
))
|
))
|
||||||
|
|
||||||
# service-actor registry endpoint socket-address set
|
# service-actor registry endpoint socket-address set
|
||||||
regaddrs: list[tuple[str, int]] = []
|
regaddrs: list = []
|
||||||
|
tpt_bind_addrs: list|None = None
|
||||||
|
|
||||||
conf, _ = config.load(
|
conf, _ = config.load(
|
||||||
conf_name='conf',
|
conf_name='conf',
|
||||||
|
|
@ -153,7 +131,8 @@ def pikerd(
|
||||||
network: dict = conf.get('network')
|
network: dict = conf.get('network')
|
||||||
if (
|
if (
|
||||||
network is None
|
network is None
|
||||||
and not maddr
|
and
|
||||||
|
not maddrs
|
||||||
):
|
):
|
||||||
regaddrs = [(
|
regaddrs = [(
|
||||||
_default_registry_host,
|
_default_registry_host,
|
||||||
|
|
@ -165,11 +144,19 @@ def pikerd(
|
||||||
with maybe_open_crash_handler(pdb=pdb):
|
with maybe_open_crash_handler(pdb=pdb):
|
||||||
eps: dict[str, list] = load_trans_eps(
|
eps: dict[str, list] = load_trans_eps(
|
||||||
network,
|
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
|
from .. import service
|
||||||
|
|
||||||
|
|
@ -178,6 +165,7 @@ def pikerd(
|
||||||
async with (
|
async with (
|
||||||
service.open_pikerd(
|
service.open_pikerd(
|
||||||
registry_addrs=regaddrs,
|
registry_addrs=regaddrs,
|
||||||
|
tpt_bind_addrs=tpt_bind_addrs,
|
||||||
loglevel=loglevel,
|
loglevel=loglevel,
|
||||||
debug_mode=pdb,
|
debug_mode=pdb,
|
||||||
# enable_transports=['uds'],
|
# enable_transports=['uds'],
|
||||||
|
|
|
||||||
|
|
@ -59,6 +59,7 @@ def get_runtime_vars() -> dict[str, Any]:
|
||||||
async def open_piker_runtime(
|
async def open_piker_runtime(
|
||||||
name: str,
|
name: str,
|
||||||
registry_addrs: list[tuple[str, int]] = [],
|
registry_addrs: list[tuple[str, int]] = [],
|
||||||
|
tpt_bind_addrs: list|None = None,
|
||||||
|
|
||||||
enable_modules: list[str] = [],
|
enable_modules: list[str] = [],
|
||||||
loglevel: str|None = None,
|
loglevel: str|None = None,
|
||||||
|
|
@ -112,6 +113,7 @@ async def open_piker_runtime(
|
||||||
|
|
||||||
# passed through to `open_root_actor`
|
# passed through to `open_root_actor`
|
||||||
registry_addrs=registry_addrs,
|
registry_addrs=registry_addrs,
|
||||||
|
tpt_bind_addrs=tpt_bind_addrs,
|
||||||
name=name,
|
name=name,
|
||||||
start_method=start_method,
|
start_method=start_method,
|
||||||
loglevel=loglevel,
|
loglevel=loglevel,
|
||||||
|
|
@ -166,6 +168,7 @@ _root_modules: list[str] = [
|
||||||
@acm
|
@acm
|
||||||
async def open_pikerd(
|
async def open_pikerd(
|
||||||
registry_addrs: list[tuple[str, int]],
|
registry_addrs: list[tuple[str, int]],
|
||||||
|
tpt_bind_addrs: list|None = None,
|
||||||
loglevel: str|None = None,
|
loglevel: str|None = None,
|
||||||
|
|
||||||
# XXX: you should pretty much never want debug mode
|
# XXX: you should pretty much never want debug mode
|
||||||
|
|
@ -198,6 +201,7 @@ async def open_pikerd(
|
||||||
loglevel=loglevel,
|
loglevel=loglevel,
|
||||||
debug_mode=debug_mode,
|
debug_mode=debug_mode,
|
||||||
registry_addrs=registry_addrs,
|
registry_addrs=registry_addrs,
|
||||||
|
tpt_bind_addrs=tpt_bind_addrs,
|
||||||
|
|
||||||
**kwargs,
|
**kwargs,
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -195,30 +195,28 @@ def chart(
|
||||||
conf_name='conf',
|
conf_name='conf',
|
||||||
)
|
)
|
||||||
|
|
||||||
regaddrs: list[tuple[str, int]] = config.get(
|
regaddrs: list = config.get(
|
||||||
'registry_addrs',
|
'registry_addrs',
|
||||||
[],
|
[],
|
||||||
)
|
)
|
||||||
# network: dict = conf.get('network')
|
network: dict = conf.get('network')
|
||||||
# if network:
|
if network:
|
||||||
# eps: dict = load_trans_eps(
|
eps: dict = load_trans_eps(
|
||||||
# network,
|
network,
|
||||||
# maddrs=None,
|
maddrs=None,
|
||||||
# )
|
)
|
||||||
# addr: tractor.Address
|
|
||||||
# for addr in eps['pikerd']:
|
|
||||||
# regaddrs.append(addr)
|
|
||||||
|
|
||||||
# # !TODO, expose this from open_root_actor()!
|
# registry addrs: prefer `regd`, fall back
|
||||||
# tpt_bind_addrs: list[
|
# to `pikerd` eps
|
||||||
# tractor.Address # `Address.get_random()` case
|
reg_eps = eps.get(
|
||||||
# |tractor.UnwrappedAddress # registrar case `= uw_reg_addrs`
|
'regd',
|
||||||
# ] = []
|
eps.get('pikerd')
|
||||||
# chart_maddrs: list[str] = eps.get('chart')
|
)
|
||||||
# if chart_maddrs:
|
assert reg_eps
|
||||||
# addr: tractor.Address
|
regaddrs = [
|
||||||
# for addr in load_trans_eps(chart_maddrs):
|
addr.unwrap() for addr in reg_eps
|
||||||
# tpt_bind_addrs.append(addr)
|
]
|
||||||
|
chart_eps = eps.get('chart')
|
||||||
|
|
||||||
_main(
|
_main(
|
||||||
syms=symbols,
|
syms=symbols,
|
||||||
|
|
@ -229,6 +227,7 @@ def chart(
|
||||||
'loglevel': tractorloglevel,
|
'loglevel': tractorloglevel,
|
||||||
'name': 'chart',
|
'name': 'chart',
|
||||||
'registry_addrs': list(set(regaddrs)),
|
'registry_addrs': list(set(regaddrs)),
|
||||||
|
'tpt_bind_addrs': chart_eps,
|
||||||
'enable_modules': [
|
'enable_modules': [
|
||||||
|
|
||||||
# remote data-view annotations Bo
|
# remote data-view annotations Bo
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue