From 115113f492f3a84187bd267269edc497b47897db Mon Sep 17 00:00:00 2001 From: ThomasV Date: Mon, 17 Jun 2019 09:30:14 +0200 Subject: [PATCH] remove expensive sql request, python set comparison is faster --- electrum/lnrouter.py | 17 ++++------------- electrum/lnworker.py | 2 +- 2 files changed, 5 insertions(+), 14 deletions(-) diff --git a/electrum/lnrouter.py b/electrum/lnrouter.py index 372aa05f1..e7f2d4a41 100644 --- a/electrum/lnrouter.py +++ b/electrum/lnrouter.py @@ -41,7 +41,7 @@ from sqlalchemy.orm.query import Query from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.sql import not_, or_ -from .sql_db import SqlDB, sql, SQLITE_LIMIT_VARIABLE_NUMBER +from .sql_db import SqlDB, sql from . import constants from .util import bh2u, profiler, get_headers_dir, bfh, is_ip_address, list_enabled_bits, print_msg, chunks from .logging import Logger @@ -228,18 +228,9 @@ class ChannelDB(SqlDB): self.num_nodes = self.DBSession.query(NodeInfo).count() @sql - @profiler - def compare_channels(self, channel_ids): - ids = [x.hex() for x in channel_ids] - known = set() - # I need to get the unknown, and also the channels that need refresh - for ids_chunk in chunks(ids, SQLITE_LIMIT_VARIABLE_NUMBER): - known_part = self.DBSession \ - .query(ChannelInfo) \ - .filter(ChannelInfo.short_channel_id.in_(ids_chunk)) \ - .all() - known |= set(bfh(r.short_channel_id) for r in known_part) - return known + def known_ids(self): + known = self.DBSession.query(ChannelInfo.short_channel_id).all() + return set(bfh(r.short_channel_id) for r in known) @sql def add_recent_peer(self, peer: LNPeerAddr): diff --git a/electrum/lnworker.py b/electrum/lnworker.py index bb853c3c4..d2a7cf5b2 100644 --- a/electrum/lnworker.py +++ b/electrum/lnworker.py @@ -274,7 +274,7 @@ class LNGossip(LNWorker): await asyncio.sleep(5) def add_new_ids(self, ids): - known = self.channel_db.compare_channels(ids) + known = self.channel_db.known_ids() new = set(ids) - set(known) self.unknown_ids.update(new)