Split a storage function in two so that we don't have to do extra work.
parent
8be5284e91
commit
23c639ff32
|
@ -417,13 +417,13 @@ class FederationServer(FederationBase):
|
||||||
pdu.internal_metadata.outlier = True
|
pdu.internal_metadata.outlier = True
|
||||||
elif min_depth and pdu.depth > min_depth:
|
elif min_depth and pdu.depth > min_depth:
|
||||||
if get_missing and prevs - seen:
|
if get_missing and prevs - seen:
|
||||||
latest_tuples = yield self.store.get_latest_events_in_room(
|
latest = yield self.store.get_latest_event_ids_in_room(
|
||||||
pdu.room_id
|
pdu.room_id
|
||||||
)
|
)
|
||||||
|
|
||||||
# We add the prev events that we have seen to the latest
|
# We add the prev events that we have seen to the latest
|
||||||
# list to ensure the remote server doesn't give them to us
|
# list to ensure the remote server doesn't give them to us
|
||||||
latest = set(e_id for e_id, _, _ in latest_tuples)
|
latest = set(latest)
|
||||||
latest |= seen
|
latest |= seen
|
||||||
|
|
||||||
missing_events = yield self.get_missing_events(
|
missing_events = yield self.get_missing_events(
|
||||||
|
|
|
@ -86,12 +86,7 @@ class StateHandler(object):
|
||||||
If `event_type` is specified, then the method returns only the one
|
If `event_type` is specified, then the method returns only the one
|
||||||
event (or None) with that `event_type` and `state_key`.
|
event (or None) with that `event_type` and `state_key`.
|
||||||
"""
|
"""
|
||||||
events = yield self.store.get_latest_events_in_room(room_id)
|
event_ids = yield self.store.get_latest_event_ids_in_room(room_id)
|
||||||
|
|
||||||
event_ids = [
|
|
||||||
e_id
|
|
||||||
for e_id, _, _ in events
|
|
||||||
]
|
|
||||||
|
|
||||||
cache = None
|
cache = None
|
||||||
if self._state_cache is not None:
|
if self._state_cache is not None:
|
||||||
|
|
|
@ -96,11 +96,22 @@ class EventFederationStore(SQLBaseStore):
|
||||||
room_id,
|
room_id,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def get_latest_event_ids_in_room(self, room_id):
|
||||||
|
return self._simple_select_onecol(
|
||||||
|
table="event_forward_extremities",
|
||||||
|
keyvalues={
|
||||||
|
"room_id": room_id,
|
||||||
|
},
|
||||||
|
retcol="event_id",
|
||||||
|
desc="get_latest_events_in_room",
|
||||||
|
)
|
||||||
|
|
||||||
def _get_latest_events_in_room(self, txn, room_id):
|
def _get_latest_events_in_room(self, txn, room_id):
|
||||||
sql = (
|
sql = (
|
||||||
"SELECT e.event_id, e.depth FROM events as e "
|
"SELECT e.event_id, e.depth FROM events as e "
|
||||||
"INNER JOIN event_forward_extremities as f "
|
"INNER JOIN event_forward_extremities as f "
|
||||||
"ON e.event_id = f.event_id "
|
"ON e.event_id = f.event_id "
|
||||||
|
"AND e.room_id = f.room_id "
|
||||||
"WHERE f.room_id = ?"
|
"WHERE f.room_id = ?"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue