diff options
author | Jonathan de Jong <jonathan@automatia.nl> | 2021-03-09 12:09:31 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-09 11:09:31 +0000 |
commit | 9898470e7d7b1b2f3c0dfa7d07832ec4662221da (patch) | |
tree | 93f54482fd57bc2220967b6125bc7c9460e8d4eb | |
parent | quick config comment tweak to clarify allow_profile_lookup_over_federation (diff) | |
download | synapse-9898470e7d7b1b2f3c0dfa7d07832ec4662221da.tar.xz |
Add logging to ObservableDeferred callbacks (#9523)
Diffstat (limited to '')
-rw-r--r-- | changelog.d/9523.misc | 1 | ||||
-rw-r--r-- | synapse/util/async_helpers.py | 26 |
2 files changed, 19 insertions, 8 deletions
diff --git a/changelog.d/9523.misc b/changelog.d/9523.misc new file mode 100644 index 0000000000..f03e939efb --- /dev/null +++ b/changelog.d/9523.misc @@ -0,0 +1 @@ +Add extra logging to ObservableDeferred when callbacks throw exceptions. \ No newline at end of file diff --git a/synapse/util/async_helpers.py b/synapse/util/async_helpers.py index 719e35b78d..f33c115844 100644 --- a/synapse/util/async_helpers.py +++ b/synapse/util/async_helpers.py @@ -76,11 +76,16 @@ class ObservableDeferred: def callback(r): object.__setattr__(self, "_result", (True, r)) while self._observers: + observer = self._observers.pop() try: - # TODO: Handle errors here. - self._observers.pop().callback(r) - except Exception: - pass + observer.callback(r) + except Exception as e: + logger.exception( + "%r threw an exception on .callback(%r), ignoring...", + observer, + r, + exc_info=e, + ) return r def errback(f): @@ -90,11 +95,16 @@ class ObservableDeferred: # traces when we `await` on one of the observer deferreds. f.value.__failure__ = f + observer = self._observers.pop() try: - # TODO: Handle errors here. - self._observers.pop().errback(f) - except Exception: - pass + observer.errback(f) + except Exception as e: + logger.exception( + "%r threw an exception on .errback(%r), ignoring...", + observer, + f, + exc_info=e, + ) if consumeErrors: return None |