|
|
|
@ -1928,6 +1928,18 @@ class EventsWorkerStore(SQLBaseStore): |
|
|
|
|
LIMIT 1 |
|
|
|
|
""" |
|
|
|
|
|
|
|
|
|
# We consider any forward extremity as the latest in the room and |
|
|
|
|
# not a forward gap. |
|
|
|
|
# |
|
|
|
|
# To expand, even though there is technically a gap at the front of |
|
|
|
|
# the room where the forward extremities are, we consider those the |
|
|
|
|
# latest messages in the room so asking other homeservers for more |
|
|
|
|
# is useless. The new latest messages will just be federated as |
|
|
|
|
# usual. |
|
|
|
|
txn.execute(forward_extremity_query, (event.room_id, event.event_id)) |
|
|
|
|
if txn.fetchone(): |
|
|
|
|
return False |
|
|
|
|
|
|
|
|
|
# Check to see whether the event in question is already referenced |
|
|
|
|
# by another event. If we don't see any edges, we're next to a |
|
|
|
|
# forward gap. |
|
|
|
@ -1936,8 +1948,7 @@ class EventsWorkerStore(SQLBaseStore): |
|
|
|
|
/* Check to make sure the event referencing our event in question is not rejected */ |
|
|
|
|
LEFT JOIN rejections ON event_edges.event_id = rejections.event_id |
|
|
|
|
WHERE |
|
|
|
|
event_edges.room_id = ? |
|
|
|
|
AND event_edges.prev_event_id = ? |
|
|
|
|
event_edges.prev_event_id = ? |
|
|
|
|
/* It's not a valid edge if the event referencing our event in |
|
|
|
|
* question is rejected. |
|
|
|
|
*/ |
|
|
|
@ -1945,25 +1956,11 @@ class EventsWorkerStore(SQLBaseStore): |
|
|
|
|
LIMIT 1 |
|
|
|
|
""" |
|
|
|
|
|
|
|
|
|
# We consider any forward extremity as the latest in the room and |
|
|
|
|
# not a forward gap. |
|
|
|
|
# |
|
|
|
|
# To expand, even though there is technically a gap at the front of |
|
|
|
|
# the room where the forward extremities are, we consider those the |
|
|
|
|
# latest messages in the room so asking other homeservers for more |
|
|
|
|
# is useless. The new latest messages will just be federated as |
|
|
|
|
# usual. |
|
|
|
|
txn.execute(forward_extremity_query, (event.room_id, event.event_id)) |
|
|
|
|
forward_extremities = txn.fetchall() |
|
|
|
|
if len(forward_extremities): |
|
|
|
|
return False |
|
|
|
|
|
|
|
|
|
# If there are no forward edges to the event in question (another |
|
|
|
|
# event hasn't referenced this event in their prev_events), then we |
|
|
|
|
# assume there is a forward gap in the history. |
|
|
|
|
txn.execute(forward_edge_query, (event.room_id, event.event_id)) |
|
|
|
|
forward_edges = txn.fetchall() |
|
|
|
|
if not len(forward_edges): |
|
|
|
|
txn.execute(forward_edge_query, (event.event_id,)) |
|
|
|
|
if not txn.fetchone(): |
|
|
|
|
return True |
|
|
|
|
|
|
|
|
|
return False |
|
|
|
|