split network main_taskgroup: create daemon.taskgroup
network.main_taskgroup restarts every time the proxy settings are changed, many long-running tasks (some introduced with lightning) are not prepared for and do not want this.
This commit is contained in:
@@ -188,10 +188,11 @@ class LNWorker(Logger):
|
||||
def start_network(self, network: 'Network'):
|
||||
self.network = network
|
||||
self.config = network.config
|
||||
daemon = network.daemon
|
||||
self.channel_db = self.network.channel_db
|
||||
self._last_tried_peer = {} # type: Dict[LNPeerAddr, float] # LNPeerAddr -> unix timestamp
|
||||
self._add_peers_from_config()
|
||||
asyncio.run_coroutine_threadsafe(self.network.main_taskgroup.spawn(self.main_loop()), self.network.asyncio_loop)
|
||||
asyncio.run_coroutine_threadsafe(daemon.taskgroup.spawn(self.main_loop()), self.network.asyncio_loop)
|
||||
|
||||
def _add_peers_from_config(self):
|
||||
peer_list = self.config.get('lightning_peers', [])
|
||||
@@ -306,7 +307,7 @@ class LNGossip(LNWorker):
|
||||
|
||||
def start_network(self, network: 'Network'):
|
||||
super().start_network(network)
|
||||
asyncio.run_coroutine_threadsafe(self.network.main_taskgroup.spawn(self.maintain_db()), self.network.asyncio_loop)
|
||||
asyncio.run_coroutine_threadsafe(network.daemon.taskgroup.spawn(self.maintain_db()), self.network.asyncio_loop)
|
||||
|
||||
async def maintain_db(self):
|
||||
await self.channel_db.load_data()
|
||||
@@ -409,6 +410,7 @@ class LNWallet(LNWorker):
|
||||
self.lnwatcher = LNWatcher(network)
|
||||
self.lnwatcher.start_network(network)
|
||||
self.network = network
|
||||
daemon = network.daemon
|
||||
self.network.register_callback(self.on_update_open_channel, ['update_open_channel'])
|
||||
self.network.register_callback(self.on_update_closed_channel, ['update_closed_channel'])
|
||||
for chan_id, chan in self.channels.items():
|
||||
@@ -422,8 +424,8 @@ class LNWallet(LNWorker):
|
||||
self.sync_with_local_watchtower(),
|
||||
self.sync_with_remote_watchtower(),
|
||||
]:
|
||||
# FIXME: exceptions in those coroutines will cancel network.main_taskgroup
|
||||
asyncio.run_coroutine_threadsafe(self.network.main_taskgroup.spawn(coro), self.network.asyncio_loop)
|
||||
# FIXME: exceptions in those coroutines will cancel daemon.taskgroup
|
||||
asyncio.run_coroutine_threadsafe(daemon.taskgroup.spawn(coro), self.network.asyncio_loop)
|
||||
|
||||
def peer_closed(self, peer):
|
||||
for chan in self.channels_for_peer(peer.pubkey).values():
|
||||
|
||||
Reference in New Issue
Block a user