Add a `._state._runtime_vars['_registry_addrs']`
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.modden_spawn_from_client_req_XPS_BACKUP
							parent
							
								
									4c3c3e4b56
								
							
						
					
					
						commit
						7458f99733
					
				|  | @ -939,6 +939,7 @@ async def tell_little_bro( | ||||||
| def test_peer_spawns_and_cancels_service_subactor( | def test_peer_spawns_and_cancels_service_subactor( | ||||||
|     debug_mode: bool, |     debug_mode: bool, | ||||||
|     raise_client_error: str, |     raise_client_error: str, | ||||||
|  |     reg_addr: tuple[str, int], | ||||||
| ): | ): | ||||||
|     # NOTE: this tests for the modden `mod wks open piker` bug |     # NOTE: this tests for the modden `mod wks open piker` bug | ||||||
|     # discovered as part of implementing workspace ctx |     # discovered as part of implementing workspace ctx | ||||||
|  | @ -956,6 +957,7 @@ def test_peer_spawns_and_cancels_service_subactor( | ||||||
|         async with tractor.open_nursery( |         async with tractor.open_nursery( | ||||||
|             # NOTE: to halt the peer tasks on ctxc, uncomment this. |             # NOTE: to halt the peer tasks on ctxc, uncomment this. | ||||||
|             debug_mode=debug_mode, |             debug_mode=debug_mode, | ||||||
|  |             registry_addrs=[reg_addr], | ||||||
|         ) as an: |         ) as an: | ||||||
|             server: Portal = await an.start_actor( |             server: Portal = await an.start_actor( | ||||||
|                 (server_name := 'spawn_server'), |                 (server_name := 'spawn_server'), | ||||||
|  |  | ||||||
|  | @ -35,7 +35,10 @@ from ._portal import ( | ||||||
|     open_portal, |     open_portal, | ||||||
|     LocalPortal, |     LocalPortal, | ||||||
| ) | ) | ||||||
| from ._state import current_actor, _runtime_vars | from ._state import ( | ||||||
|  |     current_actor, | ||||||
|  |     _runtime_vars, | ||||||
|  | ) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| if TYPE_CHECKING: | if TYPE_CHECKING: | ||||||
|  | @ -205,7 +208,11 @@ async def find_actor( | ||||||
|         # every call since something may change it globally (eg. |         # every call since something may change it globally (eg. | ||||||
|         # like in our discovery test suite)! |         # like in our discovery test suite)! | ||||||
|         from . import _root |         from . import _root | ||||||
|         registry_addrs = _root._default_lo_addrs |         registry_addrs = ( | ||||||
|  |             _runtime_vars['_registry_addrs'] | ||||||
|  |             or | ||||||
|  |             _root._default_lo_addrs | ||||||
|  |         ) | ||||||
| 
 | 
 | ||||||
|     maybe_portals: list[ |     maybe_portals: list[ | ||||||
|         AsyncContextManager[tuple[str, int]] |         AsyncContextManager[tuple[str, int]] | ||||||
|  |  | ||||||
|  | @ -811,10 +811,10 @@ class Actor: | ||||||
|         name: str, |         name: str, | ||||||
|         *, |         *, | ||||||
|         enable_modules: list[str] = [], |         enable_modules: list[str] = [], | ||||||
|         uid: str | None = None, |         uid: str|None = None, | ||||||
|         loglevel: str | None = None, |         loglevel: str|None = None, | ||||||
|         registry_addrs: list[tuple[str, int]] | None = None, |         registry_addrs: list[tuple[str, int]]|None = None, | ||||||
|         spawn_method: str | None = None, |         spawn_method: str|None = None, | ||||||
| 
 | 
 | ||||||
|         # TODO: remove! |         # TODO: remove! | ||||||
|         arbiter_addr: tuple[str, int] | None = None, |         arbiter_addr: tuple[str, int] | None = None, | ||||||
|  | @ -896,6 +896,7 @@ class Actor: | ||||||
|         self._reg_addrs: list[tuple[str, int]] = [] |         self._reg_addrs: list[tuple[str, int]] = [] | ||||||
|         if registry_addrs: |         if registry_addrs: | ||||||
|             self.reg_addrs: list[tuple[str, int]] = registry_addrs |             self.reg_addrs: list[tuple[str, int]] = registry_addrs | ||||||
|  |             _state._runtime_vars['_registry_addrs'] = registry_addrs | ||||||
| 
 | 
 | ||||||
|     @property |     @property | ||||||
|     def reg_addrs(self) -> list[tuple[str, int]]: |     def reg_addrs(self) -> list[tuple[str, int]]: | ||||||
|  |  | ||||||
|  | @ -33,7 +33,8 @@ _last_actor_terminated: Actor|None = None | ||||||
| _runtime_vars: dict[str, Any] = { | _runtime_vars: dict[str, Any] = { | ||||||
|     '_debug_mode': False, |     '_debug_mode': False, | ||||||
|     '_is_root': False, |     '_is_root': False, | ||||||
|     '_root_mailbox': (None, None) |     '_root_mailbox': (None, None), | ||||||
|  |     '_registry_addrs': [], | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue