tChannelDB.load_data: add comment re bad performance, and some speed-up - electrum - Electrum Bitcoin wallet HTML git clone https://git.parazyd.org/electrum DIR Log DIR Files DIR Refs DIR Submodules --- DIR commit 99f736f3e73c5b3ed5832f360fefd82e6b289e89 DIR parent 4d6b0184b9a82582a6f56d379eb250d38947785a HTML Author: SomberNight <somber.night@protonmail.com> Date: Tue, 3 Mar 2020 04:04:30 +0100 ChannelDB.load_data: add comment re bad performance, and some speed-up On my machine, ChannelDB.load_data() went from around 6 sec to 4 sec, just by commenting out that assert in lnmsg. related #6006 Diffstat: M electrum/channel_db.py | 3 +++ M electrum/lnmsg.py | 3 +-- 2 files changed, 4 insertions(+), 2 deletions(-) --- DIR diff --git a/electrum/channel_db.py b/electrum/channel_db.py t@@ -581,6 +581,9 @@ class ChannelDB(SqlDB): @sql @profiler def load_data(self): + # Note: this method takes several seconds... mostly due to lnmsg.decode_msg being slow. + # I believe lnmsg (and lightning.json) will need a rewrite anyway, so instead of tweaking + # load_data() here, that should be done. see #6006 c = self.conn.cursor() c.execute("""SELECT * FROM address""") for x in c: DIR diff --git a/electrum/lnmsg.py b/electrum/lnmsg.py t@@ -57,14 +57,13 @@ def _make_handler(msg_name: str, v: dict) -> Callable[[bytes], Tuple[str, dict]] Returns function taking bytes """ def handler(data: bytes) -> Tuple[str, dict]: - nonlocal msg_name, v ma = {} # map of field name -> field data; after parsing msg pos = 0 for fieldname in v["payload"]: poslenMap = v["payload"][fieldname] if "feature" in poslenMap and pos == len(data): continue - assert pos == _eval_exp_with_ctx(poslenMap["position"], ma) + #assert pos == _eval_exp_with_ctx(poslenMap["position"], ma) # this assert is expensive... length = poslenMap["length"] length = _eval_exp_with_ctx(length, ma) ma[fieldname] = data[pos:pos+length]