diff --git a/synapse/handlers/room.py b/synapse/handlers/room.py
index 75c0be8c36..a151b6ecd8 100644
--- a/synapse/handlers/room.py
+++ b/synapse/handlers/room.py
@@ -1427,7 +1427,6 @@ class TimestampLookupHandler:
remote_response,
)
- # TODO: Do we want to persist this as an extremity?
# TODO: I think ideally, we would try to backfill from
# this event and run this whole
# `get_event_for_timestamp` function again to make sure
@@ -1435,6 +1434,10 @@ class TimestampLookupHandler:
remote_event_id = remote_response.event_id
origin_server_ts = remote_response.origin_server_ts
+ # Persist this as an extremity so we can backfill from it
+ # later when calling `/messages`
+ self.store.insert_backward_extremeties([(room_id, remote_event_id)])
+
# Only return the remote event if it's closer than the local event
if not local_event or (
abs(origin_server_ts - timestamp)
diff --git a/synapse/storage/databases/main/events.py b/synapse/storage/databases/main/events.py
index a3e12f1e9b..33b74e3942 100644
--- a/synapse/storage/databases/main/events.py
+++ b/synapse/storage/databases/main/events.py
@@ -2304,18 +2304,28 @@ class PersistEventsStore:
self._update_backward_extremeties(txn, events)
- def _update_backward_extremeties(
- self, txn: LoggingTransaction, events: List[EventBase]
+ async def insert_backward_extremeties(
+ self, room_id_and_event_id_pairs: List[Tuple[str, str]]
) -> None:
- """Updates the event_backward_extremities tables based on the new/updated
- events being persisted.
+ """TODO
- This is called for new events *and* for events that were outliers, but
- are now being persisted as non-outliers.
+ Args:
+ room_and_event_id_pairs: Events to mark as backward extremities
- Forward extremities are handled when we first start persisting the events.
+ Returns:
+ xxx
"""
- # From the events passed in, add all of the prev events as backwards extremities.
+
+ return await self.db_pool.runInteraction(
+ "_insert_backward_extremeties_txn",
+ self._insert_backward_extremeties_txn,
+ )
+
+ def _insert_backward_extremeties_txn(
+ txn: LoggingTransaction, room_id_and_event_id_pairs: List[Tuple[str, str]]
+ ) -> None:
+ """TODO"""
+
# Ignore any events that are already backwards extrems or outliers.
query = (
"INSERT INTO event_backward_extremities (event_id, room_id)"
@@ -2337,7 +2347,28 @@ class PersistEventsStore:
txn.execute_batch(
query,
[
- (e_id, ev.room_id, e_id, ev.room_id, e_id, ev.room_id, False)
+ (event_id, room_id, event_id, room_id, event_id, room_id, False)
+ for (room_id, event_id) in room_id_and_event_id_pairs
+ ],
+ )
+
+ def _update_backward_extremeties(
+ self, txn: LoggingTransaction, events: List[EventBase]
+ ) -> None:
+ """Updates the event_backward_extremities tables based on the new/updated
+ events being persisted.
+
+ This is called for new events *and* for events that were outliers, but
+ are now being persisted as non-outliers.
+
+ Forward extremities are handled when we first start persisting the events.
+ """
+ # From the events passed in, add all of the prev events as backwards extremities.
+ # Ignore any events that are already backwards extrems or outliers.
+ self._insert_backward_extremeties_txn(
+ txn,
+ [
+ (ev.room_id, e_id)
for ev in events
for e_id in ev.prev_event_ids()
if not ev.internal_metadata.is_outlier()
|