summary refs log tree commit diff
path: root/synapse
diff options
context:
space:
mode:
authorRichard van der Hoff <richard@matrix.org>2018-05-18 09:15:35 +0100
committerRichard van der Hoff <richard@matrix.org>2018-05-18 09:15:35 +0100
commit8b1c856d815c8ab939cd5a272665d80a22ee5d33 (patch)
tree959b1512146117e54e22652c9a7141c5e65028d8 /synapse
parentMerge pull request #3225 from matrix-org/rav/move_creation_handler (diff)
downloadsynapse-8b1c856d815c8ab939cd5a272665d80a22ee5d33.tar.xz
Fix error in handling receipts
Fixes an error which has been happening ever since #2158 (v0.21.0-rc1):

> TypeError: argument of type 'ObservableDeferred' is not iterable

fixes #3234
Diffstat (limited to 'synapse')
-rw-r--r--synapse/storage/receipts.py18
1 files changed, 11 insertions, 7 deletions
diff --git a/synapse/storage/receipts.py b/synapse/storage/receipts.py

index 2f95e7e82a..709c69a926 100644 --- a/synapse/storage/receipts.py +++ b/synapse/storage/receipts.py
@@ -297,18 +297,22 @@ class ReceiptsWorkerStore(SQLBaseStore): if receipt_type != "m.read": return - # Returns an ObservableDeferred + # Returns either an ObservableDeferred or the raw result res = self.get_users_with_read_receipts_in_room.cache.get( room_id, None, update_metrics=False, ) - if res: - if isinstance(res, defer.Deferred) and res.called: + # first handle the Deferred case + if isinstance(res, defer.Deferred): + if res.called: res = res.result - if user_id in res: - # We'd only be adding to the set, so no point invalidating if the - # user is already there - return + else: + res = None + + if res and user_id in res: + # We'd only be adding to the set, so no point invalidating if the + # user is already there + return self.get_users_with_read_receipts_in_room.invalidate((room_id,))