diff --git a/electrumx/server/controller.py b/electrumx/server/controller.py index acb8a9a..868a1f3 100644 --- a/electrumx/server/controller.py +++ b/electrumx/server/controller.py @@ -82,8 +82,8 @@ class Controller(ServerBase): '''Start the RPC server and wait for the mempool to synchronize. Then start serving external clients. ''' - if not (0, 10, 4) <= aiorpcx_version < (0, 11): - raise RuntimeError('aiorpcX version 0.10.x, x >= 4, required') + if not (0, 11, 0) <= aiorpcx_version < (0, 12): + raise RuntimeError('aiorpcX version 0.11.x is required') env = self.env min_str, max_str = env.coin.SESSIONCLS.protocol_min_max_strings() diff --git a/electrumx/server/session.py b/electrumx/server/session.py index 8b4bf8b..37023d3 100644 --- a/electrumx/server/session.py +++ b/electrumx/server/session.py @@ -262,8 +262,9 @@ class SessionManager(object): for session in stale_sessions) self.logger.info(f'closing stale connections {text}') # Give the sockets some time to close gracefully - for session in stale_sessions: - await session.spawn(session.close()) + async with TaskGroup() as group: + for session in stale_sessions: + await group.spawn(session.close()) # Consolidate small groups bw_limit = self.env.bandwidth_limit @@ -512,10 +513,9 @@ class SessionManager(object): finally: # Close servers then sessions await self._close_servers(list(self.servers.keys())) - for session in list(self.sessions): - await session.spawn(session.close(force_after=1)) - for session in list(self.sessions): - await session.closed_event.wait() + async with TaskGroup() as group: + for session in list(self.sessions): + await group.spawn(session.close(force_after=1)) def session_count(self): '''The number of connections that we've sent something to.''' @@ -573,8 +573,9 @@ class SessionManager(object): for hashX in set(hc).intersection(touched): del hc[hashX] - for session in self.sessions: - await session.spawn(session.notify, touched, height_changed) + async with TaskGroup() as group: + for session in self.sessions: + await group.spawn(session.notify, touched, height_changed) def add_session(self, session): self.sessions.add(session) diff --git a/setup.py b/setup.py index 1a7ae25..cf37db6 100644 --- a/setup.py +++ b/setup.py @@ -14,7 +14,7 @@ setuptools.setup( # "xevan_hash" package is required to sync Xuez network. # "groestlcoin_hash" package is required to sync Groestlcoin network. # "pycryptodomex" package is required to sync SmartCash network. - install_requires=['aiorpcX>=0.10.4,<0.11', 'attrs', + install_requires=['aiorpcX>=0.11.0,<0.12', 'attrs', 'plyvel', 'pylru', 'aiohttp >= 2'], packages=setuptools.find_packages(include=('electrumx*',)), description='ElectrumX Server',