1818
1919from  prometheus_client  import  Counter , Gauge 
2020
21- from  synapse .api .constants  import  MAX_DEPTH 
21+ from  synapse .api .constants  import  MAX_DEPTH ,  EventTypes 
2222from  synapse .api .errors  import  StoreError 
2323from  synapse .api .room_versions  import  EventFormatVersions , RoomVersion 
2424from  synapse .events  import  EventBase , make_event_from_dict 
@@ -1013,8 +1013,8 @@ def _get_backfill_events(self, txn, room_id, event_list, limit):
10131013        # search. 
10141014
10151015        # Look for the prev_event_id connected to the given event_id 
1016-         query  =  """ 
1017-             SELECT depth, stream_ordering, prev_event_id FROM event_edges 
1016+         connected_prev_event_query  =  """ 
1017+             SELECT depth, stream_ordering, prev_event_id, events.type  FROM event_edges 
10181018            /* Get the depth and stream_ordering of the prev_event_id from the events table */ 
10191019            INNER JOIN events 
10201020            ON prev_event_id = events.event_id 
@@ -1029,7 +1029,7 @@ def _get_backfill_events(self, txn, room_id, event_list, limit):
10291029
10301030        # Look for the "insertion" events connected to the given event_id 
10311031        connected_insertion_event_query  =  """ 
1032-             SELECT e.depth, e.stream_ordering, i.event_id FROM insertion_event_edges AS i 
1032+             SELECT e.depth, e.stream_ordering, i.event_id, e.type  FROM insertion_event_edges AS i 
10331033            /* Get the depth of the insertion event from the events table */ 
10341034            INNER JOIN events AS e USING (event_id) 
10351035            /* Find an insertion event which points via prev_events to the given event_id */ 
@@ -1039,7 +1039,7 @@ def _get_backfill_events(self, txn, room_id, event_list, limit):
10391039
10401040        # Find any batch connections of a given insertion event 
10411041        batch_connection_query  =  """ 
1042-             SELECT e.depth, e.stream_ordering, c.event_id FROM insertion_events AS i 
1042+             SELECT e.depth, e.stream_ordering, c.event_id, e.type  FROM insertion_events AS i 
10431043            /* Find the batch that connects to the given insertion event */ 
10441044            INNER JOIN batch_events AS c 
10451045            ON i.next_batch_id = c.batch_id 
@@ -1063,6 +1063,7 @@ def _get_backfill_events(self, txn, room_id, event_list, limit):
10631063                table = "events" ,
10641064                keyvalues = {"event_id" : event_id , "room_id" : room_id },
10651065                retcols = (
1066+                     "type" ,
10661067                    "depth" ,
10671068                    "stream_ordering" ,
10681069                ),
@@ -1075,12 +1076,13 @@ def _get_backfill_events(self, txn, room_id, event_list, limit):
10751076                        - event_lookup_result ["depth" ],
10761077                        - event_lookup_result ["stream_ordering" ],
10771078                        event_id ,
1079+                         event_lookup_result ["type" ],
10781080                    )
10791081                )
10801082
10811083        while  not  queue .empty () and  len (event_results ) <  limit :
10821084            try :
1083-                 _ , _ , event_id  =  queue .get_nowait ()
1085+                 _ , _ , event_id ,  event_type  =  queue .get_nowait ()
10841086            except  Empty :
10851087                break 
10861088
@@ -1125,46 +1127,55 @@ def _get_backfill_events(self, txn, room_id, event_list, limit):
11251127            # Try and find any potential historical batches of message history. 
11261128            # 
11271129            # First we look for an insertion event connected to the current 
1128-             # event (by prev_event). If we find any, we need to go and try to 
1129-             # find any batch events connected to the insertion event (by 
1130-             # batch_id). If we find any, we'll add them to the queue and 
1131-             # navigate up the DAG like normal in the next iteration of the loop. 
1130+             # event (by prev_event). If we find any, we'll add them to the queue 
1131+             # and navigate up the DAG like normal in the next iteration of the 
1132+             # loop. 
11321133            txn .execute (
11331134                connected_insertion_event_query , (event_id , limit  -  len (event_results ))
11341135            )
11351136            connected_insertion_event_id_results  =  txn .fetchall ()
1136-             logger .debug (
1137+             logger .info (
11371138                "_get_backfill_events: connected_insertion_event_query %s" ,
11381139                connected_insertion_event_id_results ,
11391140            )
11401141            for  row  in  connected_insertion_event_id_results :
11411142                connected_insertion_event_depth  =  row [0 ]
11421143                connected_insertion_event_stream_ordering  =  row [1 ]
1143-                 connected_insertion_event  =  row [2 ]
1144-                 if  connected_insertion_event  not  in   event_results :
1144+                 connected_insertion_event_id  =  row [2 ]
1145+                 connected_insertion_event_type  =  row [3 ]
1146+                 if  connected_insertion_event_id  not  in   event_results :
11451147                    queue .put (
11461148                        (
11471149                            - connected_insertion_event_depth ,
11481150                            - connected_insertion_event_stream_ordering ,
1149-                             connected_insertion_event ,
1151+                             connected_insertion_event_id ,
1152+                             connected_insertion_event_type ,
11501153                        )
11511154                    )
11521155
1156+             # Second, we need to go and try to find any batch events connected 
1157+             # to a given insertion event (by batch_id). If we find any, we'll 
1158+             # add them to the queue and navigate up the DAG like normal in the 
1159+             # next iteration of the loop. 
1160+             if  event_type  ==  EventTypes .MSC2716_INSERTION :
11531161                # Find any batch connections for the given insertion event 
11541162                txn .execute (
11551163                    batch_connection_query ,
1156-                     (connected_insertion_event , limit  -  len (event_results )),
1164+                     (event_id , limit  -  len (event_results )),
11571165                )
11581166                batch_start_event_id_results  =  txn .fetchall ()
1159-                 logger .debug (
1167+                 logger .info (
11601168                    "_get_backfill_events: batch_start_event_id_results %s" ,
11611169                    batch_start_event_id_results ,
11621170                )
11631171                for  row  in  batch_start_event_id_results :
11641172                    if  row [2 ] not  in   event_results :
1165-                         queue .put ((- row [0 ], - row [1 ], row [2 ]))
1173+                         queue .put ((- row [0 ], - row [1 ], row [2 ],  row [ 3 ] ))
11661174
1167-             txn .execute (query , (event_id , False , limit  -  len (event_results )))
1175+             txn .execute (
1176+                 connected_prev_event_query ,
1177+                 (event_id , False , limit  -  len (event_results )),
1178+             )
11681179            prev_event_id_results  =  txn .fetchall ()
11691180            logger .info (
11701181                "_get_backfill_events: prev_event_ids %s" , prev_event_id_results 
@@ -1177,7 +1188,7 @@ def _get_backfill_events(self, txn, room_id, event_list, limit):
11771188
11781189            for  row  in  prev_event_id_results :
11791190                if  row [2 ] not  in   event_results :
1180-                     queue .put ((- row [0 ], - row [1 ], row [2 ]))
1191+                     queue .put ((- row [0 ], - row [1 ], row [2 ],  row [ 3 ] ))
11811192
11821193        return  event_results .values ()
11831194
0 commit comments