Browse Source
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
hard-fail-on-bad-server-string
SomberNight
5 years ago
No known key found for this signature in database
GPG Key ID: B33B5F232C6271E9
2 changed files with
4 additions and
2 deletions
-
electrum/channel_db.py
-
electrum/lnmsg.py
|
|
@ -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: |
|
|
|
|
|
@ -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] |
|
|
|