1 files changed, 11 insertions, 14 deletions
diff --git a/synapse/storage/event_federation.py b/synapse/storage/event_federation.py
index 7140ea3d57..d66a49e9f2 100644
--- a/synapse/storage/event_federation.py
+++ b/synapse/storage/event_federation.py
@@ -32,24 +32,21 @@ class EventFederationStore(SQLBaseStore):
)
def _get_auth_chain_txn(self, txn, event_id):
- results = set([event_id])
+ results = set()
+
+ base_sql = (
+ "SELECT auth_id FROM event_auth WHERE %s"
+ )
front = set([event_id])
while front:
- for ev_id in front:
- new_front = set()
- auth_ids = self._simple_select_onecol_txn(
- txn,
- table="event_auth",
- keyvalues={
- "event_id": ev_id,
- },
- retcol="auth_id",
- )
+ sql = base_sql % (
+ " OR ".join(["event_id=?"] * len(front)),
+ )
- new_front.update(auth_ids)
- front = new_front
- new_front.clear()
+ txn.execute(sql, list(front))
+ front = [r[0] for r in txn.fetchall()]
+ results.update(front)
sql = "SELECT * FROM events WHERE event_id = ?"
rows = []
|