Rework the main controller TaskGroup
- task groups don't propagate exceptions until joined - therefore waiting on events in the context manager body is not a good idiom; it caused failed tasks that were supposed to set the event to lead to a deadlock with no backtrace Fixes #608
This commit is contained in:
parent
fab4ed21eb
commit
d9d802f970
@ -119,14 +119,14 @@ class Controller(ServerBase):
|
||||
await daemon.height()
|
||||
|
||||
caught_up_event = Event()
|
||||
serve_externally_event = Event()
|
||||
synchronized_event = Event()
|
||||
async with TaskGroup() as group:
|
||||
await group.spawn(session_mgr.serve(notifications,
|
||||
serve_externally_event))
|
||||
await group.spawn(bp.fetch_and_process_blocks(caught_up_event))
|
||||
mempool_event = Event()
|
||||
|
||||
async def wait_for_catchup():
|
||||
await caught_up_event.wait()
|
||||
await group.spawn(db.populate_header_merkle_cache())
|
||||
await group.spawn(mempool.keep_synchronized(synchronized_event))
|
||||
await synchronized_event.wait()
|
||||
serve_externally_event.set()
|
||||
await group.spawn(mempool.keep_synchronized(mempool_event))
|
||||
|
||||
async with TaskGroup() as group:
|
||||
await group.spawn(session_mgr.serve(notifications, mempool_event))
|
||||
await group.spawn(bp.fetch_and_process_blocks(caught_up_event))
|
||||
await group.spawn(wait_for_catchup())
|
||||
|
||||
Loading…
Reference in New Issue
Block a user