Merge pull request #4461 from matrix-org/anoa/room_dir_quick_fix
Add a 60s timeout to filtered room directory queriespull/4466/head
						commit
						50c396a7ee
					
				| 
						 | 
				
			
			@ -0,0 +1 @@
 | 
			
		|||
Add a timeout to filtered room directory queries.
 | 
			
		||||
| 
						 | 
				
			
			@ -73,8 +73,14 @@ class RoomListHandler(BaseHandler):
 | 
			
		|||
            # We explicitly don't bother caching searches or requests for
 | 
			
		||||
            # appservice specific lists.
 | 
			
		||||
            logger.info("Bypassing cache as search request.")
 | 
			
		||||
 | 
			
		||||
            # XXX: Quick hack to stop room directory queries taking too long.
 | 
			
		||||
            # Timeout request after 60s. Probably want a more fundamental
 | 
			
		||||
            # solution at some point
 | 
			
		||||
            timeout = self.clock.time() + 60
 | 
			
		||||
            return self._get_public_room_list(
 | 
			
		||||
                limit, since_token, search_filter, network_tuple=network_tuple,
 | 
			
		||||
                limit, since_token, search_filter,
 | 
			
		||||
                network_tuple=network_tuple, timeout=timeout,
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
        key = (limit, since_token, network_tuple)
 | 
			
		||||
| 
						 | 
				
			
			@ -87,7 +93,8 @@ class RoomListHandler(BaseHandler):
 | 
			
		|||
    @defer.inlineCallbacks
 | 
			
		||||
    def _get_public_room_list(self, limit=None, since_token=None,
 | 
			
		||||
                              search_filter=None,
 | 
			
		||||
                              network_tuple=EMPTY_THIRD_PARTY_ID,):
 | 
			
		||||
                              network_tuple=EMPTY_THIRD_PARTY_ID,
 | 
			
		||||
                              timeout=None,):
 | 
			
		||||
        if since_token and since_token != "END":
 | 
			
		||||
            since_token = RoomListNextBatch.from_token(since_token)
 | 
			
		||||
        else:
 | 
			
		||||
| 
						 | 
				
			
			@ -202,6 +209,9 @@ class RoomListHandler(BaseHandler):
 | 
			
		|||
 | 
			
		||||
        chunk = []
 | 
			
		||||
        for i in range(0, len(rooms_to_scan), step):
 | 
			
		||||
            if timeout and self.clock.time() > timeout:
 | 
			
		||||
                raise Exception("Timed out searching room directory")
 | 
			
		||||
 | 
			
		||||
            batch = rooms_to_scan[i:i + step]
 | 
			
		||||
            logger.info("Processing %i rooms for result", len(batch))
 | 
			
		||||
            yield concurrently_execute(
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue