diff --git a/config/conf.toml b/config/conf.toml index 77bab1a4..8d208e34 100644 --- a/config/conf.toml +++ b/config/conf.toml @@ -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] diff --git a/piker/cli/__init__.py b/piker/cli/__init__.py index a8c0c0e7..dec11271 100644 --- a/piker/cli/__init__.py +++ b/piker/cli/__init__.py @@ -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'], diff --git a/piker/service/_actor_runtime.py b/piker/service/_actor_runtime.py index a5325e78..5bb67c5b 100644 --- a/piker/service/_actor_runtime.py +++ b/piker/service/_actor_runtime.py @@ -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, diff --git a/piker/ui/cli.py b/piker/ui/cli.py index c4b37290..fec29afe 100644 --- a/piker/ui/cli.py +++ b/piker/ui/cli.py @@ -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