Add `Arbiter.delete_sockaddr()` to remove addrs
Since stale addrs can be leaked where the actor transport server task crashes but doesn't (successfully) unregister from the registrar, we need a remote way to remove such entries; hence this new (registrar) method. To implement this make use of the `bidict` lib for the `._registry` table thus making it super simple to do reverse uuid lookups from an input socket-address.dereg_on_oserror
							parent
							
								
									83ce2275b9
								
							
						
					
					
						commit
						9f5b112d19
					
				|  | @ -68,6 +68,7 @@ import textwrap | |||
| from types import ModuleType | ||||
| import warnings | ||||
| 
 | ||||
| from bidict import bidict | ||||
| import trio | ||||
| from trio._core import _run as trio_runtime | ||||
| from trio import ( | ||||
|  | @ -1879,10 +1880,10 @@ class Arbiter(Actor): | |||
|         **kwargs, | ||||
|     ) -> None: | ||||
| 
 | ||||
|         self._registry: dict[ | ||||
|         self._registry: bidict[ | ||||
|             tuple[str, str], | ||||
|             UnwrappedAddress, | ||||
|         ] = {} | ||||
|         ] = bidict({}) | ||||
|         self._waiters: dict[ | ||||
|             str, | ||||
|             # either an event to sync to receiving an actor uid (which | ||||
|  | @ -1988,4 +1989,17 @@ class Arbiter(Actor): | |||
|         uid = (str(uid[0]), str(uid[1])) | ||||
|         entry: tuple = self._registry.pop(uid, None) | ||||
|         if entry is None: | ||||
|             log.warning(f'Request to de-register {uid} failed?') | ||||
|             log.warning( | ||||
|                 f'Request to de-register {uid!r} failed?' | ||||
|             ) | ||||
| 
 | ||||
|     async def delete_sockaddr( | ||||
|         self, | ||||
|         sockaddr: tuple[str, int|str], | ||||
|     ) -> tuple[str, str]: | ||||
|         uid: tuple = self._registry.inverse.pop(sockaddr) | ||||
|         log.warning( | ||||
|             f'Deleting registry-entry for,\n' | ||||
|             f'{sockaddr!r}@{uid!r}' | ||||
|         ) | ||||
|         return uid | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue