diff options
author | Erik Johnston <erik@matrix.org> | 2016-04-01 15:02:59 +0100 |
---|---|---|
committer | Erik Johnston <erik@matrix.org> | 2016-04-01 15:02:59 +0100 |
commit | a853cdec5beb74624e5ab4ec93bce7c37a67cf3e (patch) | |
tree | cf03ca30a3617e5c47e5d34eb7cd094dffdc1a48 /synapse/handlers/room.py | |
parent | Merge pull request #682 from matrix-org/markjh/fix_invalidate (diff) | |
parent | Comment (diff) | |
download | synapse-a853cdec5beb74624e5ab4ec93bce7c37a67cf3e.tar.xz |
Merge pull request #685 from matrix-org/erikj/sync_leave
Add concurrently_execute function
Diffstat (limited to 'synapse/handlers/room.py')
-rw-r--r-- | synapse/handlers/room.py | 17 |
1 files changed, 7 insertions, 10 deletions
diff --git a/synapse/handlers/room.py b/synapse/handlers/room.py index ee99ded214..3e1d9282d7 100644 --- a/synapse/handlers/room.py +++ b/synapse/handlers/room.py @@ -23,7 +23,8 @@ from synapse.api.constants import ( EventTypes, JoinRules, RoomCreationPreset, ) from synapse.api.errors import AuthError, StoreError, SynapseError -from synapse.util import stringutils, unwrapFirstError +from synapse.util import stringutils +from synapse.util.async import concurrently_execute from synapse.util.logcontext import preserve_context_over_fn from synapse.util.caches.response_cache import ResponseCache @@ -368,6 +369,8 @@ class RoomListHandler(BaseHandler): def _get_public_room_list(self): room_ids = yield self.store.get_public_room_ids() + results = [] + @defer.inlineCallbacks def handle_room(room_id): aliases = yield self.store.get_aliases_for_room(room_id) @@ -428,18 +431,12 @@ class RoomListHandler(BaseHandler): joined_users = yield self.store.get_users_in_room(room_id) result["num_joined_members"] = len(joined_users) - defer.returnValue(result) + results.append(result) - result = [] - for chunk in (room_ids[i:i + 10] for i in xrange(0, len(room_ids), 10)): - chunk_result = yield defer.gatherResults([ - handle_room(room_id) - for room_id in chunk - ], consumeErrors=True).addErrback(unwrapFirstError) - result.extend(v for v in chunk_result if v) + yield concurrently_execute(handle_room, room_ids, 10) # FIXME (erikj): START is no longer a valid value - defer.returnValue({"start": "START", "end": "END", "chunk": result}) + defer.returnValue({"start": "START", "end": "END", "chunk": results}) class RoomContextHandler(BaseHandler): |