Merge pull request #4461 from matrix-org/anoa/room_dir_quick_fix
Add a 60s timeout to filtered room directory queries
This commit is contained in:
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
|
# We explicitly don't bother caching searches or requests for
|
||||||
# appservice specific lists.
|
# appservice specific lists.
|
||||||
logger.info("Bypassing cache as search request.")
|
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(
|
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)
|
key = (limit, since_token, network_tuple)
|
||||||
|
@ -87,7 +93,8 @@ class RoomListHandler(BaseHandler):
|
||||||
@defer.inlineCallbacks
|
@defer.inlineCallbacks
|
||||||
def _get_public_room_list(self, limit=None, since_token=None,
|
def _get_public_room_list(self, limit=None, since_token=None,
|
||||||
search_filter=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":
|
if since_token and since_token != "END":
|
||||||
since_token = RoomListNextBatch.from_token(since_token)
|
since_token = RoomListNextBatch.from_token(since_token)
|
||||||
else:
|
else:
|
||||||
|
@ -202,6 +209,9 @@ class RoomListHandler(BaseHandler):
|
||||||
|
|
||||||
chunk = []
|
chunk = []
|
||||||
for i in range(0, len(rooms_to_scan), step):
|
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]
|
batch = rooms_to_scan[i:i + step]
|
||||||
logger.info("Processing %i rooms for result", len(batch))
|
logger.info("Processing %i rooms for result", len(batch))
|
||||||
yield concurrently_execute(
|
yield concurrently_execute(
|
||||||
|
|
Loading…
Reference in New Issue