Disable aggregation bundling on `/sync` responses (#11583)
* Disable aggregation bundling on `/sync` responses A partial revert of #11478. This turns out to have had a significant CPU impact on initial-sync handling. For now, let's disable it, until we find a more efficient way of achieving this. * Fix tests. Co-authored-by: Patrick Cloke <patrickc@matrix.org>pull/11625/head
							parent
							
								
									92906e1b60
								
							
						
					
					
						commit
						76aa5537ad
					
				| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
Fix a performance regression in `/sync` handling, introduced in 1.49.0.
 | 
			
		||||
| 
						 | 
				
			
			@ -522,7 +522,15 @@ class SyncRestServlet(RestServlet):
 | 
			
		|||
                time_now=time_now,
 | 
			
		||||
                # Don't bother to bundle aggregations if the timeline is unlimited,
 | 
			
		||||
                # as clients will have all the necessary information.
 | 
			
		||||
                bundle_aggregations=room.timeline.limited,
 | 
			
		||||
                # bundle_aggregations=room.timeline.limited,
 | 
			
		||||
                #
 | 
			
		||||
                # richvdh 2021-12-15: disable this temporarily as it has too high an
 | 
			
		||||
                # overhead for initialsyncs. We need to figure out a way that the
 | 
			
		||||
                # bundling can be done *before* the events are stored in the
 | 
			
		||||
                # SyncResponseCache so that this part can be synchronous.
 | 
			
		||||
                #
 | 
			
		||||
                # Ensure to re-enable the test at tests/rest/client/test_relations.py::RelationsTestCase.test_bundled_aggregations.
 | 
			
		||||
                bundle_aggregations=False,
 | 
			
		||||
                token_id=token_id,
 | 
			
		||||
                event_format=event_formatter,
 | 
			
		||||
                only_event_fields=only_fields,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -574,11 +574,11 @@ class RelationsTestCase(unittest.HomeserverTestCase):
 | 
			
		|||
        assert_bundle(channel.json_body["event"]["unsigned"].get("m.relations"))
 | 
			
		||||
 | 
			
		||||
        # Request sync.
 | 
			
		||||
        channel = self.make_request("GET", "/sync", access_token=self.user_token)
 | 
			
		||||
        self.assertEquals(200, channel.code, channel.json_body)
 | 
			
		||||
        room_timeline = channel.json_body["rooms"]["join"][self.room]["timeline"]
 | 
			
		||||
        self.assertTrue(room_timeline["limited"])
 | 
			
		||||
        _find_and_assert_event(room_timeline["events"])
 | 
			
		||||
        # channel = self.make_request("GET", "/sync", access_token=self.user_token)
 | 
			
		||||
        # self.assertEquals(200, channel.code, channel.json_body)
 | 
			
		||||
        # room_timeline = channel.json_body["rooms"]["join"][self.room]["timeline"]
 | 
			
		||||
        # self.assertTrue(room_timeline["limited"])
 | 
			
		||||
        # _find_and_assert_event(room_timeline["events"])
 | 
			
		||||
 | 
			
		||||
        # Note that /relations is tested separately in test_aggregation_get_event_for_thread
 | 
			
		||||
        # since it needs different data configured.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue