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
|
from types import ModuleType
|
||||||
import warnings
|
import warnings
|
||||||
|
|
||||||
|
from bidict import bidict
|
||||||
import trio
|
import trio
|
||||||
from trio._core import _run as trio_runtime
|
from trio._core import _run as trio_runtime
|
||||||
from trio import (
|
from trio import (
|
||||||
|
@ -1879,10 +1880,10 @@ class Arbiter(Actor):
|
||||||
**kwargs,
|
**kwargs,
|
||||||
) -> None:
|
) -> None:
|
||||||
|
|
||||||
self._registry: dict[
|
self._registry: bidict[
|
||||||
tuple[str, str],
|
tuple[str, str],
|
||||||
UnwrappedAddress,
|
UnwrappedAddress,
|
||||||
] = {}
|
] = bidict({})
|
||||||
self._waiters: dict[
|
self._waiters: dict[
|
||||||
str,
|
str,
|
||||||
# either an event to sync to receiving an actor uid (which
|
# 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]))
|
uid = (str(uid[0]), str(uid[1]))
|
||||||
entry: tuple = self._registry.pop(uid, None)
|
entry: tuple = self._registry.pop(uid, None)
|
||||||
if entry is 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