remove expensive sql request, python set comparison is faster
This commit is contained in:
@@ -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):
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user