lnpeer: make forwarding partly event-driven
This commit is contained in:
@@ -14,7 +14,7 @@ from datetime import datetime
|
||||
import functools
|
||||
|
||||
import aiorpcx
|
||||
from aiorpcx import TaskGroup
|
||||
from aiorpcx import TaskGroup, ignore_after
|
||||
|
||||
from .crypto import sha256, sha256d
|
||||
from . import bitcoin, util
|
||||
@@ -109,6 +109,7 @@ class Peer(Logger):
|
||||
self.received_htlc_removed_event = asyncio.Event()
|
||||
self._htlc_switch_iterstart_event = asyncio.Event()
|
||||
self._htlc_switch_iterdone_event = asyncio.Event()
|
||||
self._received_revack_event = asyncio.Event()
|
||||
|
||||
def send_message(self, message_name: str, **kwargs):
|
||||
assert type(message_name) is str
|
||||
@@ -1629,6 +1630,8 @@ class Peer(Logger):
|
||||
chan.receive_revocation(rev)
|
||||
self.lnworker.save_channel(chan)
|
||||
self.maybe_send_commitment(chan)
|
||||
self._received_revack_event.set()
|
||||
self._received_revack_event.clear()
|
||||
|
||||
def on_update_fee(self, chan: Channel, payload):
|
||||
feerate = payload["feerate_per_kw"]
|
||||
@@ -1836,7 +1839,12 @@ class Peer(Logger):
|
||||
while True:
|
||||
self._htlc_switch_iterdone_event.set()
|
||||
self._htlc_switch_iterdone_event.clear()
|
||||
await asyncio.sleep(0.1) # TODO maybe make this partly event-driven
|
||||
# We poll every 0.1 sec to check if there is work to do,
|
||||
# or we can be woken up when receiving a revack.
|
||||
# TODO when forwarding, we should also be woken up when there are
|
||||
# certain events with the downstream peer
|
||||
async with ignore_after(0.1):
|
||||
await self._received_revack_event.wait()
|
||||
self._htlc_switch_iterstart_event.set()
|
||||
self._htlc_switch_iterstart_event.clear()
|
||||
self.ping_if_required()
|
||||
|
||||
Reference in New Issue
Block a user