Test some ideas that might help performance a bit
This commit is contained in:
parent
dec5b62339
commit
f3788e3c78
|
@ -91,7 +91,7 @@ class FederationHandler(BaseHandler):
|
||||||
|
|
||||||
yield run_on_reactor()
|
yield run_on_reactor()
|
||||||
|
|
||||||
yield self.replication_layer.send_pdu(event, destinations)
|
self.replication_layer.send_pdu(event, destinations)
|
||||||
|
|
||||||
@log_function
|
@log_function
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
|
@ -527,7 +527,7 @@ class FederationHandler(BaseHandler):
|
||||||
event.signatures,
|
event.signatures,
|
||||||
)
|
)
|
||||||
|
|
||||||
yield self.replication_layer.send_pdu(new_pdu, destinations)
|
self.replication_layer.send_pdu(new_pdu, destinations)
|
||||||
|
|
||||||
state_ids = [e.event_id for e in context.current_state.values()]
|
state_ids = [e.event_id for e in context.current_state.values()]
|
||||||
auth_chain = yield self.store.get_auth_chain(set(
|
auth_chain = yield self.store.get_auth_chain(set(
|
||||||
|
|
|
@ -440,15 +440,30 @@ class SQLBaseStore(object):
|
||||||
)
|
)
|
||||||
|
|
||||||
def _get_events_txn(self, txn, event_ids):
|
def _get_events_txn(self, txn, event_ids):
|
||||||
|
if not event_ids:
|
||||||
|
return []
|
||||||
|
|
||||||
|
if len(event_ids) > 50:
|
||||||
events = []
|
events = []
|
||||||
for e_id in event_ids:
|
n = 50
|
||||||
ev = self._get_event_txn(txn, e_id)
|
for e_ids in [event_ids[i:i + n] for i in range(0, len(event_ids), n)]:
|
||||||
|
events.extend(self._get_events_txn(txn, e_ids))
|
||||||
if ev:
|
|
||||||
events.append(ev)
|
|
||||||
|
|
||||||
return events
|
return events
|
||||||
|
|
||||||
|
where_clause = " OR ".join(["e.event_id = ?" for _ in event_ids])
|
||||||
|
|
||||||
|
sql = (
|
||||||
|
"SELECT internal_metadata, json, r.event_id FROM event_json as e "
|
||||||
|
"LEFT JOIN redactions as r ON e.event_id = r.redacts "
|
||||||
|
"WHERE %s"
|
||||||
|
) % (where_clause,)
|
||||||
|
|
||||||
|
txn.execute(sql, event_ids)
|
||||||
|
|
||||||
|
res = txn.fetchall()
|
||||||
|
|
||||||
|
return [self._get_event_from_row_txn(txn, *r) for r in res]
|
||||||
|
|
||||||
def _get_event_txn(self, txn, event_id, check_redacted=True,
|
def _get_event_txn(self, txn, event_id, check_redacted=True,
|
||||||
get_prev_content=True):
|
get_prev_content=True):
|
||||||
sql = (
|
sql = (
|
||||||
|
@ -467,6 +482,13 @@ class SQLBaseStore(object):
|
||||||
|
|
||||||
internal_metadata, js, redacted = res
|
internal_metadata, js, redacted = res
|
||||||
|
|
||||||
|
return self._get_event_from_row_txn(
|
||||||
|
txn, internal_metadata, js, redacted, check_redacted=check_redacted,
|
||||||
|
get_prev_content=get_prev_content,
|
||||||
|
)
|
||||||
|
|
||||||
|
def _get_event_from_row_txn(self, txn, internal_metadata, js, redacted,
|
||||||
|
check_redacted=True, get_prev_content=True):
|
||||||
d = json.loads(js)
|
d = json.loads(js)
|
||||||
internal_metadata = json.loads(internal_metadata)
|
internal_metadata = json.loads(internal_metadata)
|
||||||
|
|
||||||
|
|
|
@ -183,20 +183,14 @@ class RoomMemberStore(SQLBaseStore):
|
||||||
)
|
)
|
||||||
|
|
||||||
def _get_members_query_txn(self, txn, where_clause, where_values):
|
def _get_members_query_txn(self, txn, where_clause, where_values):
|
||||||
del_sql = (
|
|
||||||
"SELECT event_id FROM redactions WHERE redacts = e.event_id "
|
|
||||||
"LIMIT 1"
|
|
||||||
)
|
|
||||||
|
|
||||||
sql = (
|
sql = (
|
||||||
"SELECT e.*, (%(redacted)s) AS redacted FROM events as e "
|
"SELECT e.* FROM events as e "
|
||||||
"INNER JOIN room_memberships as m "
|
"INNER JOIN room_memberships as m "
|
||||||
"ON e.event_id = m.event_id "
|
"ON e.event_id = m.event_id "
|
||||||
"INNER JOIN current_state_events as c "
|
"INNER JOIN current_state_events as c "
|
||||||
"ON m.event_id = c.event_id "
|
"ON m.event_id = c.event_id "
|
||||||
"WHERE %(where)s "
|
"WHERE %(where)s "
|
||||||
) % {
|
) % {
|
||||||
"redacted": del_sql,
|
|
||||||
"where": where_clause,
|
"where": where_clause,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -62,14 +62,7 @@ class StateStore(SQLBaseStore):
|
||||||
keyvalues={"state_group": group},
|
keyvalues={"state_group": group},
|
||||||
retcol="event_id",
|
retcol="event_id",
|
||||||
)
|
)
|
||||||
state = []
|
state = self._get_events_txn(txn, state_ids)
|
||||||
for state_id in state_ids:
|
|
||||||
s = self._get_events_txn(
|
|
||||||
txn,
|
|
||||||
[state_id],
|
|
||||||
)
|
|
||||||
if s:
|
|
||||||
state.extend(s)
|
|
||||||
|
|
||||||
res[group] = state
|
res[group] = state
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue