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