Minor perf fixes to get_auth_chain_ids.

This commit is contained in:
Erik Johnston 2020-02-19 15:47:11 +00:00
parent fc87d2ffb3
commit 7b7c3cedf2
3 changed files with 6 additions and 7 deletions

1
changelog.d/6954.misc Normal file
View File

@ -0,0 +1 @@
Minor perf fixes to `get_auth_chain_ids`.

View File

@ -16,7 +16,6 @@ import itertools
import logging import logging
from typing import List, Optional, Set from typing import List, Optional, Set
from six.moves import range
from six.moves.queue import Empty, PriorityQueue from six.moves.queue import Empty, PriorityQueue
from twisted.internet import defer from twisted.internet import defer
@ -28,6 +27,7 @@ from synapse.storage.data_stores.main.events_worker import EventsWorkerStore
from synapse.storage.data_stores.main.signatures import SignatureWorkerStore from synapse.storage.data_stores.main.signatures import SignatureWorkerStore
from synapse.storage.database import Database from synapse.storage.database import Database
from synapse.util.caches.descriptors import cached from synapse.util.caches.descriptors import cached
from synapse.util.iterutils import batch_iter
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
@ -88,14 +88,12 @@ class EventFederationWorkerStore(EventsWorkerStore, SignatureWorkerStore, SQLBas
front = set(event_ids) front = set(event_ids)
while front: while front:
new_front = set() new_front = set()
front_list = list(front) for chunk in batch_iter(front, 100):
chunks = [front_list[x : x + 100] for x in range(0, len(front), 100)]
for chunk in chunks:
clause, args = make_in_list_sql_clause( clause, args = make_in_list_sql_clause(
txn.database_engine, "event_id", chunk txn.database_engine, "event_id", chunk
) )
txn.execute(base_sql + clause, list(args)) txn.execute(base_sql + clause, args)
new_front.update([r[0] for r in txn]) new_front.update(r[0] for r in txn)
new_front -= ignore_events new_front -= ignore_events
new_front -= results new_front -= results

View File

@ -1504,7 +1504,7 @@ class Database(object):
def make_in_list_sql_clause( def make_in_list_sql_clause(
database_engine, column: str, iterable: Iterable database_engine, column: str, iterable: Iterable
) -> Tuple[str, Iterable]: ) -> Tuple[str, list]:
"""Returns an SQL clause that checks the given column is in the iterable. """Returns an SQL clause that checks the given column is in the iterable.
On SQLite this expands to `column IN (?, ?, ...)`, whereas on Postgres On SQLite this expands to `column IN (?, ?, ...)`, whereas on Postgres