Fix "argument of type 'ObservableDeferred' is not iterable" error (#7708)

This commit is contained in:
Patrick Cloke authored and GitHub committed 2020-06-16 12:01:18 -04:00
1 parent 5c5516f80e
commit 231252516c
3 files changed
+7 -5

No files matched your search

+1
View File
@@ -0,0 +1 @@
Fixs a long standing bug which resulted in an exception: "TypeError: argument of type 'ObservableDeferred' is not iterable".
+5 -4
View File
@@ -24,6 +24,7 @@ from twisted.internet import defer
from synapse.storage._base import SQLBaseStore, make_in_list_sql_clause
from synapse.storage.database import Database
from synapse.storage.util.id_generators import StreamIdGenerator
from synapse.util.async_helpers import ObservableDeferred
from synapse.util.caches.descriptors import cached, cachedInlineCallbacks, cachedList
from synapse.util.caches.stream_change_cache import StreamChangeCache
@@ -300,10 +301,10 @@ class ReceiptsWorkerStore(SQLBaseStore):
room_id, None, update_metrics=False
)
# first handle the Deferred case
if isinstance(res, defer.Deferred):
if res.called:
res = res.result
# first handle the ObservableDeferred case
if isinstance(res, ObservableDeferred):
if res.has_called():
res = res.get_result()
else:
res = None
+1 -1
View File
@@ -93,7 +93,7 @@ class ObservableDeferred(object):
This returns a brand new deferred that is resolved when the underlying
deferred is resolved. Interacting with the returned deferred does not
effect the underdlying deferred.
effect the underlying deferred.
"""
if not self._result:
d = defer.Deferred()